testing cycle has been structured to model the development cycle. In other words, one should be able to establish a one-to-one correspondence between development and testing processes. For instance, the purpose of a module test is to find discrepancies between the program's modules and their interface specifications. The purpose of function testing is showing that a program does not match its external specifications. The purpose of system testing is showing that the product is inconsistent with its original objectives. The advantages of this structure are that it avoids unproductive redundant testing and prevents one from overlooking large class of errors. For instance, rather than simply labeling system testing as "testing of the whole system" and possibly repeating earlier tests, system testing is oriented toward a distinct class of errors (those made during the translation of the objectives to the external specification) and measured with respect to a distinct type of documentation in the development process.
As noted earlier, the forms of high-order testing shown in Figure 6.3 (above) are most applicable to software products (programs written as a result of a contract or programs intended for wide usage, as opposed to experimental programs or programs written for use only by the program's author). Programs not written as programs often do not have formal requirements and objectives; for such programs, the function test might be the only higher-order test. Also, the need for high-order testing increases as the size of the program increases. The reason is that the ratio of design errors (errors made in the earlier development processes) to coding errors is considerably higher in large programs than in small programs.
Note that the sequence of testing processes in Figure 6.3 does not necessarily imply a time sequence. For instance, since system testing is not defined as "the kind of testing one does after function testing", but is defined as a distinct type of testing focused on a distinct class of errors, it could very well be partially overlapped in time with other testing processes.