The software industry uses a process called, Software Development Life Cycle (SDLC) in order to conceptualize, design, develop and test high-quality software applications. Its goal is to ensure that a high-quality software delivery within the estimated time and cost while meeting the customer expectations.
Given the complexity involved in the development of software, several SDLC models have evolved over time, such as waterfall, rapid prototyping, spiral model, Agile methodologies, incremental model etc. The waterfall model is one of the oldest models of SDLC which still finds its place in modern software development.
The Waterfall Model
The Waterfall Model is one of the most commonly used models in software development. It is called as “Linear Model/Sequential Model” or; “Classic Life Cycle model” because of the involvement of complexity in a software development project. This model considers a “Theoretical way of developing software” because it’s primarily sequential in its approach.
In Waterfall model, the phases organize in a linear order. The first two phases call for System Engineering Steps. At the end of each phase, validation and some certification of the intermediate work product ensure that the output phase gives consistent input and output of this with the overall requirements of the system.
To understand this model you need to understand all the phases of the waterfall model, listed below:
- Feasibility Study
- Software Requirement Analysis
- Coding and Unit Testing
- Integration and System Testing
The main aim of a Feasibility study is to determine whether it would be financial and technically feasible to develop the product. In order to carry out the feasibility study, the project managers and the team leaders attempt to establish a basic understanding of the high-level requirements.
They study the different input data to the system and output data to be produced by the system. They should study what type of processing needs to be done on this data and consider various constraints applicable to the behavior of the system.
Software Requirement Analysis
The major aim of this phase is to clearly understand the exact requirements of the customer and to document them properly in a systematic manner. Requirements are the sets of functionalities and constraints that the end user, the customer (who will be using the system) expects from the system. That is why the main objective of the requirements analysis and requirements specification phase is to understand the exact and correct requirements of the customer and document them. This phase consists of two distinct activities:
- Requirement Gathering
- Requirement Specification
Both the Software Engineering team and a customer should work together to develop a document called the SRS (Software Requirement Specification).
The main objective of the design phase is to transform the SRS (obtained during the requirement analysis phase) into a structure that is suitable for implementation in a programming language. In this phase, the overall software architecture is defined at all levels. This work is documented and known as SDD (software design description document). The information contained in SDD should be sufficient to design the coding phase. Before starting for actual coding, it is highly important to understand what we are going to create and what it should look like.
Coding & Unit testing
After completion of the design phase, the next phase is coding and unit testing. This phase intends to translate the software requirements into a machine-readable form utilizing the software design document produced in the design phase. Theoretically, if the design performs in a specific format and systematic manner with 100% accuracy, then code generation accomplish mechanically.
While getting the design documents, the work is divided into modules/units and actual coding is started. Each unit is coded in form of small programs and then tested for its correctness and is verified for its output corresponding to the requirements. This testing is known as unit testing. Later, these units are integrated together followed by another round of testing, known as integration testing.
Integration & System Testing
As above, the system first divides into units or modules which already develops and make a test of their functionalities. Integration units into a complete system during or at the time of integration phase and test to check if all modules or units coordination with each other and the system as a whole, behave as per the specification.
Once the code generates, then the integration testing begins. Testing focuses on verifying that the entire system generates the desired output, mapping with the requirement specification, under various test conditions and scenarios.
Maintenance & Support
This phase of the Waterfall Model is virtually a never-ending phase. Any software model of SDLC puts to the customer use and alongside, a maintenance and support team works to ensure that the software continues to function in coherence with the customer requirements.
Generally, the system develope creates the problems and come up after its practical use starts. So, the issue generally relates to the system solve the development of the system. Not every issue come in the photos specifically but they arise time to time and the solution requires. It reapplies each of the preceding phases to an existing program rather than a new one.
Principles of Waterfall Model
- It is a series of steps.
- Each step defines well in format.
- The correctness of each step checks its Verification and Validation process.
- Each step creates a definite product
- Every phase forms the basis for the next phase.
The Waterfall Model gets its name because each stage produces a product. A stream of water which passes on to the next stage. Just as water cannot flow up a waterfall, information does not flow backward in the waterfall model. Once a step is complete, there is no going back.
Advantages of the Waterfall Model
The advantages of waterfall model as follows:
- It is the oldest and most widely used model for Software Engineering.
- Waterfall Model provides a template into which methods for analysis, design, coding, and maintenance can place.
- It is better than a haphazard approach to software development.
- Easy to understand and easy to use
- Clear project Objective
- Provides structure to inexperienced staff
- Stable project requirement.
- Progress of system is measurable
- Helps to plan and schedule the project.
- Milestones clearly define and well understood.
- Works well when the quality is more important than the cost and schedule.
Disadvantages of the Waterfall Model
The following are the disadvantages of this model:
- If we talk about Real projects, It rarely follows sequentially flow that the model purposes. although this model can accommodate iteration, it does so indirectly. As a result, changes may cause confusion as the project team proceeds.
- It is quite difficult for the customer to state all the requirements at the beginning of the software project. This model requires documentation of all the requirements right in the beginning. Therefore, changes in SRS (Software Requirement Specification) cannot make at a later stage.
- The customer must have patience. A working software is not available until late in the project time span, thus the delivery of the software severely delay.
- The linear nature of the classic life cycle leads to “blocking states”. This causes some project team members to wait for other members of the team to complete the dependent tasks. This may result in a blocking state as no other project member can proceed further.
- This may end up causing time overruns because of the dependencies between the activities and on other factors.
- In case a correction needs in the deliverable of a previous step, the waterfall model disallows you to go back to a previous step to perform a correction.
Applications of the Waterfall Model
The Waterfall Model defines the routine type of projects where all requirements meet. For example, if an organization has a significant experience in developing payroll systems, they can build a new payroll system easily and manage with this model.
When to Use Waterfall Model?
- If all requirements meet all the criteria.
- When the product definition is stable.
- If the technology requires building and the team
- While building a new version of an existing product.
- In case of porting an existing product to a new platform.
There are two things that indicate, you should use it or not depends largely on-
- How well you believe you understand your customer’s needs.
- How much volatility you expect in those need as the project progresses.
Waterfall model can use only in those projects which are relatively stable and where customer needs can clearly identify at an early stage.