When you finish module-testing a program, you have really only just begun the testing process. This is especially true of large or complex programs. Consider this important concept:
A software error occurs when the program does not do what its end user reasonably expects it to do.
Applying this definition, even if you could perform an absolutely perfect module test, you still couldn't guarantee that you have found all software errors. To complete testing, then, some form of further testing is necessary. We call this new form higher-order testing.
Software development is largely a process of communicating information about the eventual program and translating this information from one form to another. In essence, it is moving from the conceptual to the concrete. For that reason, the vast majority of software errors can be attributed to breakdowns, mistakes, and “noise” during the communication and translation of information.
This view of software development is illustrated in Figure 6.1, a model of the development cycle for a software product. The flow of the process can be summarized in seven steps:
1. Translate the program user's needs into a set of written requirements. These are the goals for the product.
2. Translate the requirements into specific objectives by assessing feasibility, time, and cost, ...