The 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.