The waterfall model is a sequential (non-iterative) software development process, in which progress is seen as flowing steadily downward (like a waterfall) through the phases of idea/wish/etc., requirements elicitation, analysis, design, coding, testing, deployment (production/implementation), and maintenance.
The waterfall model is derived from the traditional way of working in major projects in the construction industry. The purpose of this way of working is that the project is divided into several phases, starting with the first phase. When you are almost at the end of this phase you may start with phase two. But the first phase has to be completed before reaching a certain agreed point in the second phase. When you are almost at the end of the second phase you may start the next phase with the same approach, until you have completed the last phase. Completed in this situation means that phase 1 is reviewed and verified. And when you discover a fault in one of the phases you must go back all the way to correct that phase and perform the following phases all over again.
Some people are fond of the waterfall model, while other people hate it. At any rate, when you want to apply the waterfall model you may consider the following characteristics (this is not an exhaustive list) [Balaji 2012]:
- Each phase must be completed within a specified time period.
- Per phase, products should be clear before going to next phase.
- Per phase, products are frozen before the next phase starts.
- Each phase of development proceeds in order with a minimum of overlapping of the phases.
- Testing is carried out after the coding phase.
- The tester role will be involved in different phases (e.g. review of requirements, design, writing test cases, executing test cases, etc.).