1. Statement testing
    1. Statement testing exercises the executable statements in the code
    2. Coverage
      1. is measured as the number of statements executed by the tests divided by the total number of executable statements in the test object, normally expressed as a percentage
    3. Applicability
      1. This level of coverage should be considered as a minimum for all code being tested
    4. Limitations/Difficulties
      1. Decisions are not considered
        1. Even high percentages of statement coverage may not detect certain defects in the code’s logic
  2. Decision testing
    1. Decision testing exercises the decisions in the code and tests the code that is executed based on the decision outcomes
    2. Coverage
      1. is measured as the number of decision outcomes executed by the tests divided by the total number of decision outcomes in the test object, normally expressed as a percentage
    3. Applicability
      1. This level of coverage should be considered when the code being tested is important or even critical
    4. Limitations/Difficulties
      1. when time is an issue
      2. fail to detect defects caused by combinations of conditions
  3. Modified Condition/Decision Coverage (MC/DC) testing
    1. MC/DC testing considers how a decision is made when it includes multiple conditions
    2. Coverage
      1. Assuming N unique, independent atomic conditions, MC/DC can usually be achieved with N+1 unique test cases
    3. Applicability
      1. it is used when testing software where a failure may cause a catastrophe
    4. Limitations/Difficulties
      1. there are multiple occurrences of a variable in a decision with multiple conditions
  4. Multiple Condition testing
    1. to test all possible combinations of atomic conditions (N) that a decision may contain
      1. 2^N
    2. Coverage
      1. the number of unique condition combinations executed by the tests divided by the total number of condition combinations in the test object
    3. Applicability
      1. for software which is expected to run reliably without crashing for long periods of time
  5. Basis Path testing
    1. consists of identifying paths through the code and then creating tests to cover them
    2. Applicability
      1. critical software
    3. Coverage
      1. full coverage of all the linearly independent paths and the number of paths should match the cyclomatic complexity for the code