Software Testing

Software testing is the activity required to find defects in new software, before those defects reach production — where they can cause accidents, data loss, or damage to property. Testing has its own vocabulary and techniques; this page covers the two most basic terms and points you to where the practice itself is taught.

Testing is a core part of the software development life-cycle: it's how a team gets confidence that the software actually meets its users' needs. It can be done by hand or automated, and it draws on a wide set of concepts and techniques.

Errors

When software doesn't behave correctly, we say an error was found. That doesn't only mean a crash — a program that runs to completion but produces the wrong result, or behaves unexpectedly, has also failed: an error is any departure from the specification.

Bugs

In the early days of computing, machines used physical relays and contacts. An IBM operator once found a moth trapped between a relay's contacts, causing a malfunction — and "bug" has meant a hidden software defect ever since. Software doesn't literally have insects in it; it's just the word we use for a defect that makes a program misbehave.

This page stops at the vocabulary. For the actual testing practice — test paradigms, the anatomy of a functional test, continuous integration, and test-driven development — see Testing Strategy in the Open Source Development roadmap.