You are here  >> Testing Concepts >> Waterfall Model

Waterfall model

Software Development Life Cycle (SDLC) Models There are many models of software development that have been developed over the years and each has its own defined purpose and disadvantage. It is therefore necessary to completely understand the available models and use the one that best suits the project needs.
Waterfall Model : The model is a step-by-step sequential execution of each phase of the software life cycle. Like the flow of water from a waterfall, the product development flows through each and every phase with reviews conducted at the end of each phase. The model does not encourage revisiting any of the previously completed phases and is hence considered as an inflexible model by many.


Planning :
The feasibility study is used to determine if the project should get the go-ahead. If the project is to proceed, the feasibility study will produce a project plan and budget estimates for the future stages of development.
Requirement Analysis and Design :
Analysis gathers the requirements for the system. This stage includes a detailed study of the business needs of the organization. Options for changing the business process may be considered. Design focuses on high level design like, what programs are needed and how are they going to interact, low-level design (how the individual programs are going to work), interface design (what are the interfaces going to look like) and data design (what data will be required). During these phases, the software's overall structure is defined. Analysis and Design are very crucial in the whole development cycle. Any glitch in the design phase could be very expensive to solve in the later stage of the software development. Much care is taken during this phase. The logical system of the product is developed in this phase.
Implementation :
In this phase the designs are translated into code. Computer programs are written using a conventional programming language or an application generator. Programming tools like Compilers, Interpreters, Debuggers are used to generate the code. Different high level programming languages like C, C++, Pascal, Java are used for coding. With respect to the type of application, the right programming language is chosen.
Design includes the Unit testing which is done by the developer to test their modules.
Testing :
In this phase the system is tested. Normally programs are written as a series of individual modules, these subject to separate and detailed test. The system is then tested as a whole. The separate modules are brought together and tested as a complete system. The system is tested to ensure that interfaces between modules work (integration testing), the system works on the intended platform and with the expected volume of data (volume testing) and that the system does what the user requires (acceptance/beta testing).
This also includes the System testing where the software is integrated to the overall product and tested.
Maintenance :
Inevitably the system will need maintenance. Software will definitely undergo change once it is delivered to the customer. There are many reasons for the change. Change could happen because of some unexpected input values into the system. In addition, the changes in the system could directly affect the software operations. The software should be developed to accommodate changes that could happen during the post implementation period.
When to use this model :
  • Requirements are very well known
  • Product definition is stable
  • Technology is understood
  • New version of an existing product
  • Porting an existing product to a new platform
Advantages:
  • Easy to understand, easy to use
  • Provides structure to inexperienced staff
  • Milestones are well understood
  • Sets requirements stability
  • Good for management control (plan, staff, track)
  • Works well when quality is more important than cost or schedule
Deficiencies :
  • All requirements must be known upfront
  • Deliverables created for each phase are considered frozen - inhibits flexibility
  • Can give a false impression of progress
  • Does not reflect problem-solving nature of software development - iterations of phases
  • Integration is one big bang at the end
  • Little opportunity for customer to preview the system (until it may be too late)