The value of testing becomes vivid when you look at what happens without it. History is full of expensive, sometimes tragic, failures that trace back to inadequate testing. These examples are described in general terms to illustrate the lessons, not to assign blame.
When software fails
- Spacecraft lost to a units mix-up — a mismatch between metric and imperial units in software interfaces led to the loss of an interplanetary probe. Integration testing of the interface between systems would have caught it.
- A rocket destroyed seconds after launch — reused software from an earlier vehicle hit an unhandled numeric overflow on a faster, larger rocket. Testing against the new flight profile would have exposed the limit.
- Radiation therapy overdoses — a race condition in control software delivered dangerous doses to patients. Concurrency defects like this are notoriously hard to find without deliberate, rigorous testing.
- Trading and banking outages — faulty deployments and untested edge cases have wiped out fortunes in minutes and locked customers out of their money.
The common pattern behind these failures
Assumption left untested
→
Edge case hit in the real world
→
Failure with serious consequences
The lesson: these were not exotic, unforeseeable events. In most cases a realistic test — of an interface, a boundary value, a concurrent operation, or a new environment — would have revealed the defect safely, long before anyone was harmed.
Conclusion
Real-world disasters show that software defects are not abstract — they cost money, trust, and occasionally lives. Thorough, risk-focused testing is the discipline that stands between a hidden assumption and a headline failure. With the "why" established, the rest of this section turns to the "how".