Learn all About Agile and Waterfall Methodologies, Different Types of SDLC Models and the Differences Between Waterfall vs Agile Development Models as well as Testing:
Read this informative article to decide which is the best suitable model for your project based on the pros and cons of each.
The Waterfall Model and the Agile Model are the types of Software Development Life Cycle (SDLC). These are the process used by the software industry to design, develop, and test the software.
By following the SDLC, we can achieve customer expectations, complete the project within given time frames, and estimate the cost.
Table of Contents:
Waterfall And Agile Model Workflows
In simple English, Agile means ‘able to move quickly and easily’ and hence that is what it means when it comes to the Agile development methodology.
Agile is a method of project management that is represented by splitting the tasks into shorter segments of work with frequent reviews and adaptation of plans.
Similarly, the word waterfall denotes a vertical flow of water or the flow of water through a series of steep drops. The waterfall model is a linear sequential model in which the progress flows majorly in one direction downwards through the phases of requirement gathering, analysis, design, development, testing, deployment, and maintenance.
This same illustration applies to the concept of project management when it comes to the waterfall model. It is a method of project management that is represented by serial stages and a fixed plan of work.
[image source]
Before discussing the Waterfall workflow and Agile workflow, let us have a look into the Software Development Life Cycle definition and its requirements.
What Is The Software Development Life Cycle?
It is a step by step procedure to develop the software systematically. For this, we select from different types of software development life cycles in different companies. Based on the requirement, an appropriate life cycle is selected.
The waterfall model is one of the SDLC types and it is an old process of developing software. The agile model is the latest and advanced one. Agile is derived from other software development life cycle.
Other SDLC includes the spiral model, V and V model, Prototype model. Based on the necessity and compatibility of the business requirement, we will choose the best model to develop the software application.
[image source]
Why software development life cycle is required?
SDLC is required to manage the project in a structured way. It provides a certain level of control and defines the roles and responsibilities of the team members. It provides the scope and deadline for each phase in SDLC.
It is somewhat like a user guide to the team members to follow all the steps to develop and deliver the quality product. It helps the team management to define and evaluate the objectives and requirements. It also helps in scheduling and estimating the tasks. It makes the communication line between the client and the development team and creates the roles and responsibilities for each of them.
Types Of Software Development Life Cycle
Let us see a brief introduction to the types of SDLC used in the software development process.
#1) Waterfall Model
As discussed earlier, the waterfall model is the first introduced software development life cycle. It is the sequential way of developing software. Very few companies follow this approach. When the project is very simple and there are no further requirements changes, we will follow this approach.
We will discuss more on the waterfall model in this tutorial.
#2) Agile Model
An agile workflow is an advanced approach to the software development process, which is used in the majority of companies. Agile is defined as the sprint-based software development life cycle.
In the upcoming sections, we can discuss more on the Agile workflow.
#3) Spiral Model
It is the way of building and testing the software by splitting and adding the requirement in incremental order. This model will help in projects where the requirements keep on changing. This spiral model is the combination of the iterative development process and the sequential linear development process.
This approach will allow us in incremental releases of the product. Here, it is not necessary to wait for the completion of all modules of the software for the release.
The linear sequential model means it is a systematic sequential approach of software development that begins at the system level and progresses through analysis, design, coding, testing, and support.
The iterative model means, it is a particular implementation of a software development life cycle that focuses on an initial, simplified implementation, which then progressively gains more complexity and a broader feature is set until the final system is complete.
#4) Prototype Model
This model includes the process of building and testing the software in such a way that, first we develop the dummy model and if it is feasible and reaches all the business requirements then we implement the actual working model.
Here first, we built and test the prototype then built the actual model with the exact system specifications. Software prototyping is the activity of creating prototypes of software applications.
#5) V And V Model
It is the verification and validation model. Here, while developing the software we used to verify and validate everything in each phase of the SDLC. The V-model is considered as an extension of the waterfall model.
So, all the SDLC types have their features and characteristics. Based on the project requirement, needs, feasibility, time duration, we can choose the particular software development life cycle to develop the software application.
Now, we will discuss the Waterfall and Agile software development life cycles in detail.
Waterfall Model
In the Waterfall model, each phase should be completed before starting another phase. We cannot operate multiple phases at the same time. This was introduced in 1970 by Winston Royce. The Waterfall model is divided into different phases.
[image source]
Waterfall Model includes the following phases:
- Requirement collection
- Feasibility study
- Design
- Coding
- Testing
- Maintenance
#1) Requirement Analysis
Here, the business analyst will get the requirement specification. The requirement will be in the CRS (Customer Requirement Specification) format. CRS explains how the business flow should go and how the application should work as per the specified requirement. The business analysts will convert CRS into SRS (Software Requirement Specification).
Then the business analyst discusses the requirement specifications with the development and testing team in detail and understands the requirement from the development and testing point of view. This is the phase to discuss and analyze requirements to build the application software based on actual requirements.
Here, everything should be documented in the Software requirement specification document. In the waterfall model, each phase’s deliverable/result/output is the input source for the next phases.
In a service-based industry, a Business Analyst can bring the requirement.
In a product-based company, the Product Analyst brings the requirement.
#2) Feasibility Study
The Management team will do the feasibility study. It means, the team will analyze parameters like, is this requirement/application can be developed in our environment or not, the available resource is enough or not, the cost and many other factors are feasible or not and to check are we able to cover all the business flows or not.
In this meeting/analysis, Project Manager, Business Analyst, Finance Manager, HR, Project Lead will be part of the discussion.
#3) System Design
Here, the Project Architect will prepare the system design. He will specify the hardware, system requirement and design the application architecture. There are 2 parts in the system design: high-level design and low-level design. In high-level design, we design the different blocks of the application. In low-level design, we write the pseudo-code.
#4) Coding
Here, developers start the exact coding of each function and UI of the application by using different methods and different logics. They can use any programming language like Java, Python or any other language to build the application.
Once coding is complete for each functionality of the particular module of the application, the developer will do the unit testing. If the code works fine, the developer will deploy the code into the testing environment and give the build to the tester for testing.
#5) Testing
From here the testing activity begins. Until this phase, we will be having no task in the Waterfall model. In this phase, we do all types of testing. These testing types include smoke testing, functional testing, integration testing, system testing, acceptance testing, Regression testing, ad-hoc testing, exploratory testing, and cross-browser testing.
We will start testing the application once we get the build. First, we will start with smoke testing. If no blocker issues are observed, we will continue with the in detail testing.
In functional testing, we will start to test each component of the application. Here we check the different components like text fields, buttons, links, radio buttons, upload buttons, dropdowns, and navigation links.
Next, we will check the UI, look and feel and the positive and negative input testing.
Then we will start with the integration testing. Here we will check the data integration. We will verify if the same data is reflecting in different respective pages or not, will verify email link navigation to the respective pages. We will check the data integration with 3rd party applications and check the database changes in the application.
Next, we will do system testing. We will check the whole application as a single unit. We will check the functionality, integration of the pages, field validations, error messages, confirmation messages and many more.
While testing the application we will log the issues in the bug tracking tool. We will give priority for the bug based on the issues. After creating the bug we will assign it to the respective developer to fix the issue. We will verify the bugs once the developers assigned them to testers after fixing them. If it works fine tester will close the bug, else testers will assign back to the developer to fix the issue. This is how the bug life cycle goes on.
Then we move on to the acceptance testing. Here we test the application in different environments like staging and UAT (User Acceptance Testing). This is the most important phase to test the application thoroughly before we move the code to the Production environment.
Once the acceptance testing is done with no errors, then the client will plan to deploy the code to the Production server and plan for the release.
#6) Maintenance
Once we deploy the application code to the production server, we should provide the support/maintenance to the client application. This maintenance phase is to observe and fix the real-time production issues, to check the memory issues, to enhance the application, and to develop the new requirement changes.
In which cases we can opt for the waterfall model?
- When there are no required changes.
- When the project is small and simple.
- When there is no complexity in technology.
- When there are more resources available.
Waterfall Pros:
- Forward & backward planning and implementation is easy.
- The waterfall model is simple to use and easy to understand. It does not require any special training for project managers or employees. It has an easy learning curve.
- Being rigid in nature, it is easy to manage the waterfall cycle. Each phase has fixed deliverables and a review process.
- Less complexity as the phases does not overlap. Phases are followed one after another. It uses a clear structure when compared to the other software development methodologies. The project goes through fixed sequential steps starting from the requirement gathering and finally lands up at maintenance.
- Due to phased development, discipline is enforced, and timescales can be kept easily.
- Works well for small projects where we have fixed and crystal-clear requirements.
- Processes and results are well-documented.
- Arranging tasks is easy.
- It is easy to measure the progress as the start and endpoints of each phase are predetermined.
- There is almost no change in the requirements throughout the project, hence the tasks remain stable for the developers. Also, it is easy for any new developer to quickly learn and start the work.
- There are no financial surprises. Once the requirements are fixed, the final cost can be calculated before starting the development.
- Caters for a sequential funding model.
- Its detailed design makes the final expected outcome very clear to everyone.
- The functional requirement specification documented in the requirement gathering phase gives enough details to the testers to design test scenarios and test cases. Hence, the testing process becomes easy in the waterfall model.
Waterfall Cons:
- As all the requirements must be clearly known before starting the development, it delays the project.
- Requires extensive research into the user needs.
- At the initial phase of the project, it is challenging for a customer to clearly define and conceptualize their requirements in the form of functional specifications. Hence, there is a high possibility for them to change their minds after seeing the end product. This change can also occur due to a business plan or market influence. Low flexibility in this model makes it difficult to accommodate any such changes, especially when the product needs to be re-engineered to a large extent.
- No working model is produced until the later stage during the waterfall lifecycle.
- Slow delivery times. The customer is not able to see the product until it is fully completed.
- The customer has no opportunity to get familiar with the system in advance. The waterfall model is more of an internal process and keeps the end-user excluded.
- The client is not informed well about the health of the project.
- Deadlines can be missed if strict management and regular monitoring are not kept.
- There is no room for changes even if it is visible during the development as the product is not going to cater to the market requirement.
- Delays testing until after completion. Also, large revisions are very costly at this point.
- High risk and uncertainty are involved in the waterfall model as there is too much room for issues to remain unnoticed until the project comes near to completion.
- Not a suitable model for long, complex, and ongoing projects.
- It is difficult to measure the progress within each phase.
- Testers will sit idle during the many stages of the project.
Agile Workflow
Now we will see the Agile Software development life cycle. Agile is the process of doing work quickly and easily with more accuracy.
This model is related to a method of project management, used especially for software development. It is characterized by the division of tasks into short phases of work and frequent reassessment and adaptation of plans. Each team member should have the idea of the basic business flows.
[image source]
In Agile, developers and testers work parallelly to develop and test the application software. Development is done in iterative mode. Each iteration user stories requires the analysis, design, coding, and testing.
We test the requirement in a detailed manner to verify if the requirement is error-free and implementable or not. Switch to next iteration after the end of each iteration and we follow the same process to the new/other requirements.
Thus, this process of developing and testing the block of software is performed in a short duration of time with more accuracy and flexibility. So more industries follow and adopt this process.
First, the product owner will add all requirements to the product backlog. The product backlog contains all the user stories. Let us say, 100 to 150 user stories are related to the complete project. Now add the particular user stories to the sprint backlog which we need to be implemented. Then, all the developers, QA, BA will work on the sprint items. This is how Agile flow works.
Key Terminologies Used In Agile
What is the sprint backlog?
It is the list of user stories which we need to implement in the current iteration or sprint.
For Example, there are 20 to 30 user stories in the sprint backlog. Then these are the user stories which we need to implement in the current sprint.
[image source]
What is a Sprint?
Sprint is the small duration in which we need to implement the selected user stories within a particular duration. Sprint duration will be around 2 to 3 weeks. Its duration varies from company to company.
In this sprint duration, the team has to analyze the requirement, design the requirements, perform coding, testing, fixing the issue, re-testing, regression testing, demo, and many more activities.
Daily Standup Scrum meeting
Business Analyst, Developer, Tester, the Project Manager are part of daily stand up scrum meetings. It is done daily. It should not extend more than 15 to 30 minutes.
Here all the team members will share the daily work status. The main things which we discuss here are: what are the things completed yesterday, plan for today’s work, and any challenges or dependencies which they are facing in the project.
If any team member faces any challenges or obstacles during the project, the concerned person will work on it to get it done.
Burndown Chart
It is a pictorial graph representation of time and work. The x-axis represents work remaining, the y-axis represents leftover sprint time. The team has to create the work tasks concerning time available in the particular sprint. The team will burn the task hours on daily basis based on the work they have worked and completed.
[image source]
Kanban Chart
It is a project management chart/tool. With this, we can manage the tasks of the whole project. We can check the project progress status and individuals work status. It shows the pictorial digital representation of progress items, pending items, finished items.
[image source]
Planning Poker Activity
It is a game between the sprint team members to estimate the user stories. Here the whole team will play the poker activity. Each team members give the estimation based on the user story point. Based on the majority estimation votes, the team will decide and allocate the time slot.
For example, one user story team member will give an estimation like 3, 5, 8, 3, 1, 3. Then the team will choose 3 as the estimation. Poker activity card contains 0, 1, 3, 5, 8, 13, 20, 100, break, doubts? cards. Based on this team members will suggest any estimation card. Like this, we will estimate all the user stories which are related to the particular sprint.
[image source]
- 0 poker number represents: no task in that item /user story
- 1, 3 numbers represent: the task is less
- 5, 8 numbers represent: medium level tasks
- 13, 20 number represents: large level tasks
- 100 number represents: very large tasks
- Infinity represents: Task is huge, need to split into multiple tasks and user stories
- Break represents: need a break
- ? Represents: Doubts
Scrum Master
He is the person who helps the team to follow the agile process and meet the project requirement. He will conduct the meeting whenever it is required and helps to discuss the project’s need.
Scrum master acts as a bridge to all the team members to resolve the challenges and the dependencies which come across the project. He will track the project progress concerning each sprint.
He is involved in the standup meeting, retrospective meeting, inspection, review, demo. He is the one who conducts the daily stand up meetings and takes the team member update.
Product Owner
He is the person who drives and monitors the product/project from the business point of view. He keeps on watching like the product is developed as per the business requirement or not. He is the one who prioritizes the user stories and moved the requirements from the product backlog to the sprint backlog. He will estimate the project deadlines.
He always looks at the product from the user’s point of view. The product owner has complete knowledge about how the application should work.
User Story
It is a block of requirement. It contains the set of use cases/requirement which is related to the same module. Here we define how each component of an application should work and how the UI should look. The scope of each component is defined in the user story.
Tasks
Team members are going to create the task for the user story which is assigned to them. They need to create the task based on the different tasks like development task, testing task, user story analysis task. Task duration should depend on the user story points.
As a tester, we will create the tasks for user story analysis, test case preparation, execution, regression testing, and many more.
Backlog Grooming
This part involves managing backlog items. The activities which we do here is, prioritizing the backlog items, breaking into smaller items, creating the task, and updating the acceptance criteria.
Iteration
Iteration is the development and testing of some modules/parts of the software application. Each iteration consists of the analysis of the product, design the product, development of the product, testing the product, and demo of the product.
Key Factors To Adopt Agile Methodology
- Observation: Review the work and product regularly and plan the activities accordingly. So the product development process and product quality will be good.
- Welcome Changes: Changes are handled very easily. It doesn’t affect much on the product because modules of the software are developed separately and integrated later. So, there will be no rework if the requirement got changed in the future.
- Time Frame: We are given the time frame for each unit of the application. So the estimation will be accurate towards the project time estimations.
- Customer Satisfaction: Customer satisfaction is more because we interact with the client and stockholder throughout the project and we will give a demo on each level of product development. By this, we get the customer/client feedback regularly about the business flows and work progress. Thus work and development of the application are done accordingly.
Types Of Agile Methodologies
- Agile Scrum Methodology
- Lean Software Development
- Kanban
- Extreme Programming (XP)
- Crystal
- Dynamic Systems Development Method (DSDM)
- Feature Driven Development (FDD)
Agile Pros:
- One of the biggest advantages of the agile model is its great adaptability. Adaptability means ‘responding to change’. Agile is very flexible in dealing with the changes in customer needs and priorities.
- Allows to constantly refine and re-prioritize the overall product backlog without affecting the current iteration in which the team is focused on delivering the MVP. The changes can be planned for the next iteration, thereby offering an opportunity to bring in the changes within a few weeks only.
- Agile methodology offers a great degree of stakeholder engagement. The client and the project team meet before, during, and after each sprint. As the customer is constantly involved throughout the project, there are more opportunities for the team to clearly understand the customer’s vision.
- The working software is delivered early and frequently. This increases the stakeholder’s trust in the team and encourages the team to stay highly committed to the project.
- This model gives transparency. Both the stakeholders and the team know well about what is happening. The client can see the work in progress.
- Fixed schedule sprints of one to four weeks allow for early and predictable delivery. New features are released quickly and frequently in a time-boxed manner.
- Agile is customer-centric. It does not just deliver the functionality but also focuses on delivering the feature that is of some value to the user. Each user story has a business-focused acceptance criterion.
- Valuable customer feedback is gained early in the project and changes to the product can be made as required.
- The focus is on business value. It first delivers what is most important to the client.
- Improves the quality of deliverables. Unlike waterfall, testing is continuously and frequently done in an Agile project and that, in turn, helps in detecting and fixing the issues early.
- Agile supports TDD (Test Driven Development) approach which provides enough time to create unit tests for the features that are going to be released through MVP.
- Also, by producing frequent builds, any misalignment with the customer requirements can also be detected and fixed early.
- As we get immediate user feedback after each MVP release, the risk of project failure is low, when you are working in an Agile way.
- Agile promotes teamwork. There is a great collaboration, interaction, harmony, and enthusiasm among the Agile team members.
- The cost and schedule estimates of each sprint are communicated to the client prior to the start of the sprint. This improves decision making as the user can understand the cost of each feature and prioritize accordingly.
- In an agile project, there is room for continuous improvement. Lessons learned from the past sprints can be applied in the upcoming sprints.
- It focuses on the particular task at every stage of the project.
Agile Cons:
- It is often seen that Agile teams have a tendency to neglect documentation. This is because the Agile manifesto focuses more on working software than the comprehensive documentation. However, the teams should maintain the right balance between the code and documentation.
- As it requires a high degree of customer involvement, it can sometimes be problematic for customers who do not have much time and interest to participate in the project.
- It does not work well if the team is lacking commitment and dedication. Waterfall requires involvement, however, Agile requires commitment.
- If the initial architecture and design are weak, then frequent refactoring is required.
- When compared to the waterfall, Agile is difficult to practice. The team members must be well versed in Agile concepts. It requires a lot of discipline and commitment to practice Agile.
- Due to re-prioritization, it is less predictable than what will be delivered at the end of the sprint.
- Due to time-boxed delivery and frequent re-prioritization, there are chances for a few features to not get delivered in the allocated timeline. This can lead to additional sprints and additional costs. This can also lead to the problem of nebulous timelines.
- Lack of structure when compared to the waterfall, it demands self-disciplined, highly proficient, and cross-skilled teams. Without this, the project can really be a challenging one.
- Availability is less of a blueprint of the final deliverable.
- Sometimes the external stakeholder can’t resist following the Agile approach. In such cases, training and education about Agile are required to a wide audience.
- All team members are required to be involved in managing the Project.
- Documentation is less detailed.
Difference Between Agile Vs Waterfall Models
The differences between the Waterfall and Agile Software Development Life Cycles are listed below.
Waterfall | Agile |
---|---|
Waterfall methodology is a model in which each stage of the product’s lifecycle occurs in a sequence. The progress of the project flows gradually downwards through these phases resembling a waterfall. | Agile methodology is a model that follows an iterative approach. |
This model believes in one-time massive whole delivery. The product is delivered at the end of the SDLC. | This model believes in multiple small chunks of delivery at defined time intervals. A MVP (Minimum Viable Product) is delivered at the end of each sprint. |
Its a traditional and old-fashioned approach. | Its a new and modern approach. |
One single cycle and single release. | Repetitive number of iterations and multiple releases. |
It divides the software development lifecycle into different phases. | It divides the software development lifecycle into sprints. |
The process is treated as one single project which is further divided into different phases. | The process is divided into multiple projects and each project has an iteration of different stages. |
Structured and rigid model. It is difficult to alter the project's description, specification and design. | This model is known for its flexibility. We can make changes in any project phase at any time. |
Long-term planning scale. | Short term planning scale. |
A long distance exists between the customer and the developer. | A short distance exists between the customer and the developer. |
Long time between specification and implementation. The business analyst collects and prepares the requirement before the beginning of the project. | Short time between specification and implementation. The product owner prepares the requirements and updates to the team in each sprint. |
Takes a long time to discover problems. | Problems are discovered quickly. |
High project schedule risk. | Low project schedule risk. |
Less ability to respond quickly to changes. | High ability to respond quickly to changes. |
Testing phase occurs only after the completion of the development phase. | Testing is generally performed in parallel with the development to ensure quality continuously. |
The customer is involved only at the requirement gathering phase and after that there is no involvement of the customer. He comes into the picture only at the time of delivery of the product. | The customer is involved throughout the project and feed back is taken from the customer from time to time to ensure customer satisfaction. |
Suitable for projects which have clearly defined requirements and those which are not expecting changes. | Suitable for projects which have to evolve and those which involve changing requirements. |
Stringently sequential process. | Highly collaborative software development process leads to better team efforts and quick problem-solving. |
Exhibits a project mindset. | Introduces a product mindset and thus it is more customer focused. Demands and changes are the part of the process |
Formal and hierarchical. The project manager is the decision maker. | It is Informal. The entire team is responsible for decision making. |
This model anticipates that there will be no changes in requirements throughout the project. | This model is based on adaptation and it embraces changes. |
Need to create manual documents to verify the status of the individual's work and project progress. | Follows the Kanban chart and Burn Down chart to verify the project progress and the individual's work status. |
We had enough discussion about the differences between Agile & Waterfall methodologies and the benefits & challenges of each. Let us now explore the differences between agile testing vs waterfall testing.
Differences Between Agile Testing Vs Waterfall Testing
From the perspective of software testing, it is important for us to have a fair idea about how Agile testing is different from Waterfall testing.
Waterfall Testing | Agile Testing |
---|---|
Testing begins after the completion of the development and builds phases. | Testing starts concurrently with the development phase. |
Planning is done just once before the testing phase. | Planning is done before the project starts and is often done during the project. |
The test plan is rarely reviewed during the project. | The test plan is reviewed after every sprint. |
It is quiet challenging for the testing team to propose any changes in the requirements. | The test team actively participates in the requirement gathering and change process. |
Test cases are created once for all the functionalities. | Test cases are created sprint by sprint for the functionalities that need to be released in each sprint. |
Acceptance testing is performed once by the client after the release. | Acceptance testing can be done after each iteration and before the delivery by a business analyst or the test team. Later, it is done by the customer after every release. |
Test teams and the development teams are separated by a clear boundary and there is a strict and formal communication between them. | Test team and the development teams are integrated as one team and there is a free flow of communication between them. |
Verbose and extensive test documentation. | Test documentation is done only as much as necessary. |
Test estimates and assignments are often the responsibility of the test manager. | Test estimates and assignments are the shared responsibility of the team and the test engineers who are involved in providing the estimates and choosing their tasks. |
Regression testing is rarely done, and it involves execution of all the test cases. | Regression testing is done after each iteration and it involves only those test cases that are required. |
Conclusion
In this article, we learned the exact differences between the modern Agile approach and the traditional Waterfall method of software development and testing with a comparison table covering the pros and cons of each model.
By considering all the factors listed in this article, we can select the correct software development life cycle model to develop the software application. There is no doubt in saying that Agile methodologies are preferred over the Waterfall model. 90% of companies prefer and follow the Agile workflow to develop the software Application.
Agile methodology is good for all kinds of projects. Very few companies follow the waterfall methodology. This methodology is suitable only if the application is small, simple and there are no changes in the requirement.
In some cases, we also opt for other approaches called Spiral, V and V, and Prototype, based on the needs.
Hope this information will be helpful for you to decide which is the best model for your project. You may also go for the hybrid model removing the cons of each method – discussed here.