Introduction
Testing is central to creating working software. Here's the canonical statement in the importance of testing:
Any program feature without an automated test simply doesn't exist.
This is from Kent Beck's book, Extreme Programming Explained: Embrace Change.
We can distinguish several kinds of testing:
Unit testing: This applies to independent units of software: functions, classes, or modules. The unit is tested in isolation to confirm that it works correctly.
Integration testing: This combines units to be sure they integrate properly.
System testing: This tests an entire application or a system of interrelated applications to be sure that the aggregated suite of software components works properly. This is often used for overall acceptance of software as fit for use.
Performance testing: This assures that a unit meets performance objectives. In some cases, performance testing includes the study of resources such as memory, threads, or file descriptors. The goal is to be sure that software...