software-engineering testing
Core Principles
- 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.
- 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.
- Pesticide Paradox: If you repeat the same tests, they eventually stop finding new bugs.
- Strategy: Regularly review and vary your tests.
- Testing Shows Presence of Defects: Testing can prove bugs exist, but cannot prove they don’t.
- Strategy: Know when to stop (adequate criteria).
- Absence of Error Fallacy: A bug-free system is useless if it doesn’t meet user needs.
- Context Dependent: Testing a safety-critical system (avionics) is different from testing a mobile game.
- Early Testing: Start testing as early as possible (shift left) to reduce fixing costs.