According to D Galin, software testing is the formal process carried out by a specialized testing team in which a software unit, several integrated software units, or an entire software package are examined by running the programs on a computer; all the associated tests are performed according to approved test procedures on approved test cases.

Summary

The entire point here, is to exercise the software with test cases to gain confidence in the system, where when we encounter faults, we find gaps in our system

Definitions

  1. Test cases
  2. Test Stub
  3. Test Driver

Ideally, failures will occur when testing, then you want to debug your code to find the fault that caused the test failure. Not all tests will figure failure though. Three conditions need to be observed to get a failure:

  1. The location or locations in the program that contain the fault must be reached (Reachability)
  2. After executing the location, the state of the program must be incorrect (Infection)
  3. The infected state must propagate to cause some output of the program to be incorrect (Propagation)

Validation vs Verification

Validation is making sure software complies with intended usage (making sure the software does the right thing, this seems to be more qualitative), where verification makes sure that software aligns with the established requirements (make sure that the software is correct and does the thing right, this is more quantitative since we are concerned with meeting spec).

Effectiveness