Testing, inspections, proofs of correctness, model checking, and what else?
Testing is the primary vehicle for quality assurance in software
This is true whether or not one believes it is a good thing
Caveat: there may be some classes of systems, such as safety critical, for which the cost of other approaches, such as inspections, is greater than that for testing (although I can't find specific numbers about this)
Testing is a significant cost in the software lifecycle
Gathering specific numbers is hard, but Microsoft, for instance, has roughly one tester for every developer
Essentially everybody wants to improve the current testing situation
In some cases, the fundamental objective is to improve testing to increase the quality of the software that is produced
In other cases, the fundamental objective is to reduce the costs of testing while maintaining the current quality of the software that is produced
Even if people don't admit it, this is a common focus
As always, finding errors earlier reduces costs, since it reduces rework
A little terminology
A failure occurs when a program doesn't satisfy its specification
A fault occurs when a program's internal state is inconsistent with what is expected (usually an informal notion)
A defect is the code that leads to a fault (and perhaps to a failure)
An error is the mistake the programmer made in creating the defect
Root cause analysis tries to track a failure to an error
Identifying errors is important, because it can (a) help identify and remove other related defects and (b) help a programmer (and perhaps a team) avoid making the same or a similar error again
Kinds of testing include
Unit test
White-box test (coverage criterion: statement, edge, condition, path)