Chapter 4
Software process is a set of activities that leads to the production of a software product. There’s no, of course, ideal software process and every project needs different. Software processes are complex and, like all other intellectual and creative processes, rely on people making decisions and judgments.
Still, there are some common parts for almost any software process:
Software processes can be improved by process standardisation where diversity in software processes across an organisation is reduced.
Three process models covered in this chapter are:
In practice, of course, it is often impossible to work all the way trough within only one model. For example, sub-systems may be developed using different model than main system. Often, models are combined.
Principal stages of the waterfall model are:
The main principle is that the next phase cannot begin before previous is done. In practice, these stages may overlap and feed information to each other. During design, problems with requirements are identified. During coding design problems are found and so on. During the final life cycle phase (operation and maintenance) the software put into use. Errors and omissions in the original software requirements are discovered. The system must evolve to be useful.
The advantages of waterfall model are that documentation is produced at each phase and that it fits with other engineering process models. Its major problem is its flexible partitioning of the project into distinct stages. Commitments must be made at early stage in the process, which makes it difficult to respond to changing customer requirements.
There are two fundamental types of evolutionary development:
This approach is often more effective than the waterfall approach in producing systems that meet the immediate needs of customers. However, there are two major problems with this model:
These problems are acute when the project is large, for the small systems (up to 500,000 lines of code) the author of the book thinks that the evolutionary process it the best choice.
In the majority of systems there is some software reuse. Pretty often this happens informally, when people working on the project know of designs or code which is similar to that required. The look at these, modify them and reuse in current project. It is often essential for rapid system development. Stages for software process using component-based model are:
Change is inevitable in all large software projects. The system requirements change as the business procuring the system responds to external pressures. Management priorities change; new technologies become available, design and implementation change. This means that the software process is not a one-off process; rather, the process activities are regularly repeated as the system is reworked in response to change requests. There are two process models that have been designed to support process iteration:
My thoughts:
I really think mixing different software process models can give better results than using just one model of bread machine. Even for such a small project as our Monopoly game, we started as a waterfall model: defining requirements and use-cases first, then – designing the system, components and signals. When coding takes place, I think it might be better to switch the process to something between waterfall model and evolutionary development. This sounds like incremental delivery, where customers are us, developers. We develop some part of a system, make it executable and testable and test this part as if we were end-customers. This kind of work will reduce some errors, which can be seen only while executing and testing.