The need for levels of testing
Execution-based software testing, especially for large systems, is usually carried out at different levels. In most cases there will be 3-4 levels, or major phases of testing: unit test, integration test, system test, and some type of acceptance test as shown in Figure 6.1. Each of these may consist of one or more sublevels or phases. At each level there are specific testing goals. For example, at unit test a single component is tested. A principal goal is to detect functional and structural defects in the unit. At the integration level several components are tested as a group, and the tester investigates component interactions. At the system level the system as a whole is tested and a principle goal is to evaluate attributes such as usability, reliability, and performance. System test begins when all of the components have been integrated successfully. It usually requires the bulk of testing resources. Laboratory equipment, special software, or special hardware may be necessary, especially for real-time, embedded, or distributed systems. At the system level the tester looks for defects, but the focus is on evaluating performance, usability, reliability, and other quality-related requirements.
The approach used to design and develop a software system has an impact on how testers plan and design suitable tests. There are two major approaches to system development—bottom-up, and top-down. These approaches are supported by two major types of programming languages— procedure-oriented and object-oriented.