Software Testing

Software testing is the activity of running a program with the intent of finding defects and checking that it behaves as required. It is one of the core knowledge areas of the discipline: the IEEE Computer Society’s SWEBOK lists “Software Testing” among its knowledge areas, covering test levels, techniques, measures, and processes.

Testing is usually organized into levels that grow in scope. Unit testing exercises the smallest pieces of code in isolation; integration testing checks that those pieces work together; system testing evaluates the whole assembled program; and acceptance testing confirms the system meets the needs of its users. Different techniques apply at each level, from picking inputs based on the code’s structure to picking them based on the specification.

A famous caution shapes how the practice is understood. Edsger Dijkstra wrote that “program testing can be used very effectively to show the presence of bugs but never to show their absence.” Testing can build confidence and catch many faults, but passing tests is evidence, not proof, that a program is correct.

Because of this, testing is treated as one tool among several for achieving software quality, working alongside reviews, static analysis, and disciplined design rather than replacing them. Modern practice leans heavily on automated tests so that the same checks can be re-run cheaply every time the code changes.