The waterfall model of software development breaks the process of creating software into discrete phases, as seen in this diagram:
The phases correspond to specific steps that must be carried out to create the software:
- Requirements involves determining exactly what the software needs to do, as well as what platform(s) it needs to run on.
- Design involves designing the software system to meet those requirements - i.e. laying out a high-level architecture, often specifying this architecture with UML or similar approaches.
- Implementation is the actual programming of the system.
- Verification is the process by which the software is tested to ensure it works and does what it was intended to do
- Maintenance is the phase in which the software is used, and consists of fixing bugs as they are found, and possibly adding new features.
This approach is based on engineering practices, and is more or less the strategy employed by NASA on the Apollo project. We’ll spend the next few sections exploring the individual phases in detail, and then discuss how widely adopted the waterfall approach is, as well as its strengths and weaknesses.