software-engineering testing

Core Principles

  1. Exhaustive Testing is Impossible: You cannot test every possible input combination (domain is infinite).
    • Strategy: Prioritise risks and use techniques like partitioning to select effective cases.
  2. Defect Clustering: Bugs are not uniformly distributed. They tend to cluster in specific modules (“hotspots”).
    • Strategy: Analyse data and focus effort on complex/new areas.
  3. Pesticide Paradox: If you repeat the same tests, they eventually stop finding new bugs.
    • Strategy: Regularly review and vary your tests.
  4. Testing Shows Presence of Defects: Testing can prove bugs exist, but cannot prove they don’t.
    • Strategy: Know when to stop (adequate criteria).
  5. Absence of Error Fallacy: A bug-free system is useless if it doesn’t meet user needs.
  6. Context Dependent: Testing a safety-critical system (avionics) is different from testing a mobile game.
  7. Early Testing: Start testing as early as possible (shift left) to reduce fixing costs.