During the 1950s and 1960s, some programmers used abstraction and information hiding inadvertently in their programs. The important thing is that by 1975, both were better known. Moreover, engineers used the initial software development method, or, in this case, life cycle, while working in a form of obscurity. Winston Royce wrote about this method in 1970, in an article entitled Managing the Development of Large Systems: Concepts and Techniques [Royce70]. What he describes in that article looks like the documentation life cycle, because each milestone is based on releasing some document. It is now called the Waterfall Life Cycle, because it looks like Figure 8.3.
Note that the Waterfall model contains the terms specifying , designing , coding , and testing , as we will meet them again. It also flows from top to bottom; hence, the waterfall metaphor. As a natural waterfall does not flow uphill , this kind of waterfall implies that we are done with an activity before we proceed. This means that we are done specifying before designing begins. Those who expected that requirements changes ended soon after being specified were terribly wrong. They experienced the waterfall as shown in Figure 8.4.
Soon, the waterfall was modified by feedback loop, thus Figure 8.5.
This feedback loop enables engineers to react to change. If sufficient changes happen to the requirements, then the design can be changed. If coding reveals a design change, then it can be propagated backwards . This proved to be too cumbersome or ineffective , due to changes performed in things that were already considered done. Therefore, another change to the waterfall became prevalent , the use of prototypes (see Figure 8.6).
Describe in detail the differences between the last three models. What do these differences imply with respect to software developers?