Many people unfamiliar with large-scale software development view it as a one-step process. Sit down and write the code. This may work for a simple program developed by one person, but such a process quickly breaks down when any level of complexity is introduced. A more typical software life cycle includes at least seven well defined stages:
validation and verification
Early software development life cycles followed a "waterfall" model, as illustrated in Figure 3-1, where one stage followed another sequentially in time. Winston Royce first described the waterfall model in his 1970 paper, Managing the Development of Large Software Systems. At the time of its development, the waterfall model was a large step forward in software development. For the first time, it added a formal structure to the overall software development process and identified key steps such as requirements definition, system design, coding, and testing. As software development organizations adopted the waterfall model, software development tasks such as requirements analysis, system design, and coding were each done by separate groups of people. For instance, when system design was completed, the system designers would hand over the design to the developers who would write the actual code. Some of the reasoning behind such models was based on the notion that each phase was independent and needed to be fully completed before moving onto the next phase.
Over time, such practices brought their own shortcomings to the waterfall model. In large organizations, such a model did not foster communication between groups and in fact often prevented it. As separate requirements, design, and coding groups developed, so to did specialists in each area who did not necessarily understand the technologies employed by other project groups. Requirements engineers often came up with requirements that were impossible to implement given current technology. Design engineers, in turn , would often misunderstand requirements and develop system designs that did not meet user needs. Developers who misunderstood or did not like the designs handed to them by the design engineers made further modifications during the coding phase. Finally, the test team would test items in the software they believed to be important, without necessarily benefiting from the knowledge gained in earlier phases of the development process.
Today, just as car companies place manufacturing engineers in the same office as their design engineers to improve the engineering process, most software development is done using some sort of iterative or "spiral" development process. The spiral development model is illustrated in Figure 3-2. Dr. Barry Boehm, then of TRW, first developed the spiral development model, publishing his model in the 1988 IEEE Computer article, A Spiral Model of Software Development and Enhancement . In a spiral model, not only does each development phase overlap, the development phases also have feedback loops into previous phases allowing for continual improvement in the software process. Chapter 10 of this book spends more time defining and discussing software development life cycles and how to improve them.
The spiral model is a refinement of the traditional waterfall model, explicitly recognizing the development cycles in a large software project. This model incorporates risk analysis into the process and allows developers, as well as clients , to stop the process, depending on expected returns from new requirements. Basically, the idea is incremental development, using the waterfall model for each step; it's intended to help manage risks. The idea is to not define in detail the entire system at first. The developers should only define the highest priority features and then implement those. With this knowledge, they can then go back to define and implement more features in smaller chunks .
The spiral model defines four major activities within its life cycle:
Planning: The determining of project objectives, alternatives, and constraints.
Risk analysis: The analysis of alternatives and the identification and solution of risks.
Engineering: The development and testing of the product.
Customer evaluation: The assessment of the results of the engineering.
The model is represented by a spiral divided into four quadrants, each representing one of the above activities. The spiral model uses iterative development with the first iteration beginning at the center of the circle and working outward. Successive iterations follow as more complete versions of the software are built. At the beginning of each iteration of the life cycle a risk analysis is undertaken and a review of the project is taken at the end of the iteration. Actions are to be taken to counteract any observed risks, at any time.