Software process models

At this point, you know the possible activities, the possible phases performed during the software development process. But there this something that we still haven't discussed, that is how should we put these activities together to develop software?

This all comes down to the concept of software process model, also called software life-cycle model. A prescriptive model of what should happen from the very beginning to the very end. Of a software development process.

The main function of the life cycle model is to determine the order of the different activities so that we know which activities should come first and which ones should follow. Another important function of the life cycle model is to determine the transition criteria between activities. So, when we can go from one phase to the subsequent one. In other words, what the model should describe is what should we do next and how long should we continue to do it for each activity in the model.

Now let's see a few traditional software process models.

## Waterfall process

The first model we want to discuss is the grandfather of all life cycle models. And it is the waterfall model. In the waterfall model the project progresses to an orderly sequence of steps. From the initial software concept, down until the final phase. Which is system testing. And at the end of each phase there will be a review to determine whether the project is ready to advance to the next phase.

The pure waterfall model performs well for softer products in which there is a stable product definition. The domain is well known and the technologies involved are well understood. In these kind of domains, the waterfall model helps you to find errors in the early,
local stages of the projects.

The main advantage of the waterfall model is that it allows you to find errors early. However, the main disadvantages of the waterfall model arise from the fact that it is not flexible. Normally, it is difficult to fully specify requirements at the beginning of a project. And this lack of flexibility is far from ideal when dealing with project in which requirements change, the developers are not domain experts or the technology used are new and evolving, that is it is less than ideal for most real world projects.

## Spiral process

The next model that we will discuss is the spiral model, which was first described by Barry Boehm. The spiral model is an incremental risk-oriented life-cycle model that has four main phases listed here: determine objectives, identify and resolve risks, development and tests, and plan the next iteration.

A software project will go through these four phases in an iterative way. In the first phase, the requirements will be gathered. In the second phase, the risks and the alternate solutions will be identified, and a prototype will be produced. Software and tests for the software are produced in the development and test phase, which is the third step of the process. Finally, in the fourth phase, the output of the project, so far, is evaluated, and the next iteration is planned.

So basically, what the spiral process prescribes is a way of developing software by going through these phases in an iterative way, in which we learn more and more of the software, we identify more and more, and account for, more and more risks and we go more and more towards our final solution, our final release.

There are several advantages of using a spiral model. The first one is that the extensive risk analysis does reduce the chances of the project to fail. So there is a risk reduction advantage. The second advantage is that functionality can be added at a later phase because of the iterative nature of the process. And finally, software is produced early in the software life-cycle. So, at any iteration, we have something to show for our development. We don't wait until the end before producing something. And then of course there's also the advantage that we can get early feedback from the customer about what we produced.

The main disadvantages on the other hand of the spiral model, are that the risk analysis requires a highly specific expertise. And unfortunately, the whole success of the process is highly dependent on risk analysis. So risk analysis has to be done right. And finally the spiral model is way more complex than other models, like for example, the water fall model. And therefore it can be costly to implement.