Software Testing Techniques: Finding the Defects that Matter