Software development is an integral part of software engineering, along with disciplines responsible for the functioning and maintenance of software products.
The software development process is the procedure according to which the development of software is performed.
The development process consists of a number of steps, some of which are shown below. In the waterfall model, they go one after another, in agile models their order or composition changes.
- Requirements Analysis → Software Specification
- Software Engineering
- Software testing
- System integration
- Software implementation
- Software Maintenance
Waterfall model was proposed in 1970 by Winston Royce. It provides the consistent implementation of all phases of the project in a strictly fixed order. Once work is completed in one stage it can then move on to the next. The requirements defined at each stage are strictly documented in the form of a technical assignment and are fixed for the entire project development. It finally ends with the release of the software implemented by developers. accompanied by a complete set of documentation.
Stages of the project in accordance with the waterfall model:
- Requirements specification;
- Operation and maintenance.
- Full and consistent documentation;
- It is easy to determine the time and costs for the project.
In the waterfall model, the inaccuracy of any requirement, or its incorrect interpretation, means you have to "roll back" to the early phase of the project; in this case, the required processing not only delays the project team’s schedule, but often leads to a qualitative increase in costs.
Iterative and incremental model
An alternative to a waterfall model is the so-called iterative and incremental development (IID).
The IID model assumes a breakdown of the project lifecycle into a series of iterations, each of which resembles a "mini project", including all development processes to the creation of smaller fragments of functionality, compared to the project as a whole.
The goal of each iteration is to get a working version of the software system, including functionality. The final output contains all the required functionality of the product. Thus, with the completion of each iteration, the product evolves one step further.
- Simple quality control integration, implemented on each stage (with each new update, elimination of bugs and errors).
- Fast feedback about implemented changes from real users.
- The possibility of "rolling back" to the previous successful stage in case of failure.
- A great flexibility for development: quick implementation of new ideas based on the changing market demands or the growing needs of the enterprise.
- With iterations, it is necessary to discard the part of the work done previously, that leads to higher cost of the whole project.
- It’s impossible to evaluate all the risks and vulnerabilities of the IT system, as the whole concept description does not exist. So, a complete understanding of the possibilities and limitations of the project is missing.
IID vs Agile
In the business society Waterfall is opposed to Agile, based on the difference of approaches to software development. In Waterfall everything should be fixed in advance, whereas in Agile the set of demands is collected only for small time set, which can be implemented within a couple of weeks or month. A clear explanation of the differences in these metodologies can be found here.