Software development is a structured process of developing a software. There are a number of models which can be used to develop a software, like the waterfall, spiral, iterative, and incremental development model, etc.
In each of them, the steps are broadly divided into three stages, namely, the planning stage, implementation, testing, and documenting stage, and at last, the deployment and maintenance stage. Whichever exhibit is chosen for software development, the software, in the end, has to go through these stages. The order in which it goes through may vary.
Each of the exhibits have their own pros and cons. Therefore, depending upon the team, the project, availability of the resources, urgency level, etc., the model to be adopted is chosen by the development team. There is also the possibility of a number of models getting combined together if the project calls for it.
The definition of this subject was made by Barry Boehm in his article 'A Spiral Model of Software Development and Enhancement' in 1986.
Although it did not come up with the iterative approach in software development, it was the first one, which explained the importance of iteration. It combines the elements of both design as well as prototyping in stages. Due to this, it can reap the advantages of both top down as well as bottom up approach.
It combines various features of the waterfall and the prototyping model. It is often used for large, expensive, and complicated projects. This is due to the fact that its key feature is risk management at regular stages in the entire software development cycle. Like the name suggests, its activities of software development are organized like a spiral.
The steps are generalized as follows:-
- The very first step is a detailed system requirement definition. Here, the requirement is perfected to the last detail by interviewing a number of users who represent the external and/or internal users of the proposed system. The different aspects of the system are also found out in this step.
- After the system definition is made, a preliminary design is made of the proposed system. This is said to be the most important step. An analysis is carried out of all the possible as well as available alternatives to develop a cost-effective system. Along with it, the strategies to implement the alternatives are also decided upon.
- All the possible risks in the project are also identified in the same phase. The methods to resolve them are also determined immediately.
- In case of any risks, which point to uncertainty in the requirements, prototyping is used to make way with the available data and find out the solution to be able to deal with any potential changes, which may come about in the requirements.
- After the analysis, the first prototype is made using the preliminary design. It is not a full version, but a scaled-down version, which represents an approximation of the final product. The characteristics of the first prototype and the final version are similar to one another up to a large extent.
- The first prototype is evaluated to make the second prototype. The evaluation is made on terms of strengths, weakness, and risks. Then, the requirements for the second prototype are defined. Then comes the planning and designing of the second prototype, followed by constructing and testing of the same.
- Accordingly, the phases keep going in spirals till the entire system is ready. The bugs from the previous prototype are fixed in the next prototype.
The most important advantage is the high amount of risk analysis involved due to which the project does not face too many problems towards the end.
In case of any problems, the issues are addressed early in the project, and the total cost of the project is also lowered. It is a wonderful option for large and critical projects. The software is actually made early in the life cycle.
The high cost involved can be called a deterrent. When the risk analysis is carried out, it needs highly specific expertise, which may not be available all the time. The success of the project is highly dependent on the risk analysis phase. It may not prove to be useful for smaller projects.
This life cycle model proves to be beneficial for projects, which are mission critical and have risky elements. It proves beneficial to run a series of risk reduction iterations. The other type of application where it can be used is for game development. It helps because the size of the project is often large, and the project has constantly shifting goals.