Software Development
Software Development
What is SDLC?
SDLC stands for software development life cycle. It is a process followed for
software building within a software organization. SDLC consists of a precise plan
that describes how to develop, maintain, replace, and enhance specific software. The
life cycle defines a method for improving the quality of software and the all-around
development process.
1. Waterfall Model
It is the fundamental model of the software development life cycle. This is a very simple
model. The waterfall model is not in practice anymore, but it is the basis for all other
SDLC models. Because of its simple structure, the waterfall model is easier to use and
provides a tangible output. In the waterfall model, once a phase seems to be completed,
it cannot be changed, and due to this less flexible nature, the waterfall model is not in
practice anymore.
2. Agile Model
The agile model was mainly designed to adapt to changing requests quickly. The main
goal of the Agile model is to facilitate quick project completion. The agile model refers
to a group of development processes. These processes have some similar
characteristics but also possess certain subtle differences among themselves.
3. Iterative Model
In the iterative model, each cycle results in a semi-developed but deployable version;
with each cycle, some requirements are added to the software, and the final cycle
results in the software with the complete requirement specification.
4. Spiral Model
The spiral model is one of the most crucial SDLC models that provides support for risk
handling. It has various spirals in its diagrammatic representation; the number of spirals
depends upon the type of project. Each loop in the spiral structure indicates the Phases
of the Spiral model.
5. V-Shaped Model
The V-shaped model is executed in a sequential manner. Each stage or phase of this
model is integrated with a testing phase. After every development phase, a testing
phase is associated with it, and the next phase will start once the previous phase is
completed, i.e., development & testing. It is also known as the verification or validation
model.
Conclusion
In conclusion, we now know that Software Development Life Cycle (SDLC) software
engineering is an important framework for the better and more structured
development of optimized software programs. In a world full of rapid evolution in
technology, SDLC phases play a crucial role in enabling some good and innovative
solutions for helping users and organizations. Also, it’s better to adapt SDLC principles
to achieve software development goals effectively.
FAQs on Software Development Life Cycle (SDLC)
1. What is the Software Development Life Cycle?
The Software Development Life Cycle (SDLC) is basically a cost-effective process that
is used to design and build good software. It is a time-efficient process.
Overall, the waterfall model is used in situations where there is a need for a highly
structured and systematic approach to software development. It can be effective in
ensuring that large, complex projects are completed on time and within budget, with a
high level of quality and customer satisfaction.
Phases of Classical Waterfall Model
Waterfall Model is a classical software development methodology that was first
introduced by Winston W. Royce in 1970. It is a linear and sequential approach to
software development that consists of several phases that must be completed in a
specific order. The phases include:
1. Requirements Gathering and Analysis: The first phase involves gathering
requirements from stakeholders and analyzing them to understand the scope and
objectives of the project.
2. Design: Once the requirements are understood, the design phase begins. This
involves creating a detailed design document that outlines the software
architecture, user interface, and system components.
3. Implementation: The implementation phase involves coding the software based
on the design specifications. This phase also includes unit testing to ensure that
each component of the software is working as expected.
4. Testing: In the testing phase, the software is tested as a whole to ensure that it
meets the requirements and is free from defects.
5. Deployment: Once the software has been tested and approved, it is deployed to
the production environment.
6. Maintenance: The final phase of the Waterfall Model is maintenance, which
involves fixing any issues that arise after the software has been deployed and
ensuring that it continues to meet the requirements over time.
The classical waterfall model divides the life cycle into a set of phases. This model
considers that one phase can be started after the completion of the previous phase.
That is the output of one phase will be the input to the next phase. Thus the
development process can be considered as a sequential flow in the waterfall. Here the
phases do not overlap with each other. The different sequential phases of the classical
waterfall model are shown in the below figure.
Phases of Classical Waterfall Model
Let us now learn about each of these phases in detail.
1. Feasibility Study
The main goal of this phase is to determine whether it would be financially and
technically feasible to develop the software.
The feasibility study involves understanding the problem and then determining the
various possible strategies to solve the problem. These different identified solutions are
analyzed based on their benefits and drawbacks, The best solution is chosen and all the
other phases are carried out as per this solution strategy.
● Requirement gathering and analysis: Firstly all the requirements regarding the
software are gathered from the customer and then the gathered requirements are
analyzed. The goal of the analysis part is to remove incompleteness (an
incomplete requirement is one in which some parts of the actual requirements
have been omitted) and inconsistencies (an inconsistent requirement is one in
which some part of the requirement contradicts some other part).
● Requirement specification: These analyzed requirements are documented in a
software requirement specification (SRS) document. SRS document serves as a
contract between the development team and customers. Any future dispute
between the customers and the developers can be settled by examining the SRS
document.
3. Design
The goal of this phase is to convert the requirements acquired in the SRS into a format
that can be coded in a programming language. It includes high-level and detailed design
as well as the overall software architecture. A Software Design Document is used to
document all of this effort (SDD)
● Alpha testing: Alpha testing is the system testing performed by the development
team.
● Beta testing: Beta testing is the system testing performed by a friendly set of
customers.
● Acceptance testing: After the software has been delivered, the customer
performed acceptance testing to determine whether to accept the delivered
software or reject it.
6. Maintenance
Maintenance is the most important phase of a software life cycle. The effort spent on
maintenance is 60% of the total effort spent to develop a full software. There are
basically three types of maintenance.
● Corrective Maintenance: This type of maintenance is carried out to correct
errors that were not discovered during the product development phase.
● Perfective Maintenance: This type of maintenance is carried out to enhance the
functionalities of the system based on the customer’s request.
● Adaptive Maintenance: Adaptive maintenance is usually required for porting the
software to work in a new environment such as working on a new computer
platform or with a new operating system.
FAQs
1. What is the difference between Waterfall Model and Agile Model?
Answer:
The main difference between the Waterfall Model and the Agile Model is that the
Waterfall model relies on thorough-up front planning whereas the Agile model is more
flexible as it takes these processes in repeating cycles.
2. What are the benefits of the Waterfall Model?
Answer:
The waterfall Model has several benefits as it helps projects keep a well-defined,
predictable project under the budget.
All Agile methodologies discussed above share the same core values and principles,
but they may differ in their implementation and specific practices. Agile development
requires a high degree of collaboration and communication among team members, as
well as a willingness to adapt to changing requirements and feedback from customers.
In the Agile model, the requirements are decomposed into many small parts that can be
incrementally developed. The Agile model adopts Iterative development. Each
incremental part is developed over an iteration. Each iteration is intended to be small
and easily manageable and can be completed within a couple of weeks only. At a time
one iteration is planned, developed, and deployed to the customers. Long-term plans
are not made.
● Requirement gathering
● Design the Requirements
● Construction / Iteration
● Testing / Quality Assurance
● Deployment
● Feedback
2. Design the Requirements:- In this step, the development team will use
user-flow-diagram or high-level UML diagrams to show the working of the new features
and show how they will apply to the existing software. Wireframing and designing user
interfaces are done in this phase.
5. Deployment:- In this step, the development team will deploy the working project
to end users.
6. Feedback:- This is the last step of the Agile Model. In this, the team receives
feedback about the product and works on correcting bugs based on feedback provided
by the customer.
The time required to complete an iteration is known as a Time Box. Time-box refers to
the maximum amount of time needed to deliver an iteration to customers. So, the end
date for an iteration does not change. However, the development team can decide to
reduce the delivered functionality during a Time-box if necessary to deliver it on time.
The Agile model’s central principle is delivering an increment to the customer after each
Time-box.
Principles of the Agile Model
● To establish close contact with the customer during development and to gain a
clear understanding of various requirements, each Agile project usually includes
a customer representative on the team. At the end of each iteration stakeholders
and the customer representative review, the progress made and re-evaluate the
requirements.
● The agile model relies on working software deployment rather than
comprehensive documentation.
● Frequent delivery of incremental versions of the software to the customer
representative in intervals of a few weeks.
● Requirement change requests from the customer are encouraged and efficiently
incorporated.
● It emphasizes having efficient team members and enhancing communications
among them is given more importance. It is realized that improved
communication among the development team members can be achieved through
face-to-face communication rather than through the exchange of formal
documents.
● It is recommended that the development team size should be kept small (5 to 9
people) to help the team members meaningfully engage in face-to-face
communication and have a collaborative work environment.
● The agile development process usually deploys Pair Programming. In Pair
programming, two programmers work together at one workstation. One does
coding while the other reviews the code as it is typed in. The two programmers
switch their roles every hour or so.
● The lack of formal documents creates confusion and important decisions taken
during different phases can be misinterpreted at any time by different team
members.
● It is not suitable for handling complex dependencies.
● The agile model depends highly on customer interactions so if the customer is
not clear, then the development team can be driven in the wrong direction.
● Agile development models often involve working in short sprints, which can make
it difficult to plan and forecast project timelines and deliverables. This can lead to
delays in the project and can make it difficult to accurately estimate the costs and
resources needed for the project.
● Agile development models require a high degree of expertise from team
members, as they need to be able to adapt to changing requirements and work in
an iterative environment. This can be challenging for teams that are not
experienced in agile development practices and can lead to delays and
difficulties in the project.
● Due to the absence of proper documentation, when the project completes and
the developers are assigned to another project, maintenance of the developed
project can become a problem.
Q.2: Is it possible to use Agile Model for large and complex Projects?
Answer:
Yes, it is possible to use for Large and Complex Projects, but we need to change some
adaptations for using it like we have to add some frameworks like SAFE (Scaled Agile
Framework) and LeSS (Large-Scale Scrum) to use large and complex projects.
Q.3: What is Sprint Review in Agile Model?
Answer:
Sprint Review is simply a type of meeting that is held at the end of each sprint in the
Agile Model. In this meeting, the development team details the work done to the
stakeholder and Product Owner.
When errors are detected at some later phase, these feedback paths allow for
correcting errors committed by programmers during some phase. The feedback paths
allow the phase to be reworked in which errors are committed and these changes are
reflected in the later phases. But, there is no feedback path to the stage – feasibility
study, because once a project has been taken, does not give up the project easily.
It is good to detect errors in the same phase in which they are committed. It reduces the
effort and time required to correct the errors.
The Iterative Waterfall Model is a software development approach that combines
the sequential steps of the traditional Waterfall Model with the flexibility of iterative
design. It allows for improvements and changes to be made at each stage of the
development process, instead of waiting until the end of the project.
Real-life example: Iterative Waterfall Model could be building a new website for a small
business. The process might look like this:
Requirements gathering: This is the first stage where the business owners and
developers meet to discuss the goals and requirements of the website.
Design: In this stage, the developers create a preliminary design of the website based
on the requirements gathered in stage 1.
Implementation: In this stage, the developers begin to build the website based on
the design created in stage 2.
Testing: Once the website has been built, it is tested to ensure that it meets the
requirements and functions properly.
Deployment: The website is then deployed and made live to the public.
Review and improvement: After the website has been live for a while, the
business owners and developers review its performance and make any necessary
improvements.
This process is repeated until the website meets the needs and goals of the business.
Each iteration builds upon the previous one, allowing for continuous improvement and
iteration until the final product is complete.
Testing and feedback: The testing stage of the process is important for identifying any
issues or bugs that need to be addressed before the website is deployed. Additionally,
feedback from users or customers can be gathered and used to improve the website in
subsequent iterations.
Scalability: The iterative waterfall model is scalable, meaning it can be used for
projects of various sizes and complexities. For example, a larger business may require
more iterations or more complex requirements, but the same process can still be
followed.
● Feedback Path –
In the classical waterfall model, there are no feedback paths, so there is no
mechanism for error correction. But in the iterative waterfall model feedback path
from one phase to its preceding phase allows correcting the errors that are
committed and these changes are reflected in the later phases.
● Simple –
Iterative waterfall model is very simple to understand and use. That’s why it is
one of the most widely used software development models.
● Cost-Effective –
It is highly cost-effective to change the plan or requirements in the model.
Moreover, it is best suited for agile organizations.
● Well-organized –
In this model, less time is consumed on documenting and the team can spend
more time on development and designing.
● Risk Reduction: The iterative approach allows for early identification and
mitigation of risks, reducing the likelihood of costly errors later in the
development process.
● Quality Assurance: The iterative approach promotes quality assurance by
providing opportunities for testing and feedback throughout the development
process. This results in a higher-quality end product.
● Improved Customer Satisfaction: The iterative approach allows for customer
involvement and feedback throughout the development process, resulting in a
final product that better meets the needs and expectations of the customer.
● Predictable Outcomes: The phased approach of the iterative waterfall model
allows for more predictable outcomes and greater control over the development
process, ensuring that the project stays on track and within budget.
● Faster Time to Market: The iterative approach allows for faster time to market
as small and incremental improvements are made over time, rather than waiting
for a complete product to be developed.
● Easy to Manage: The iterative waterfall model is easy to manage as each phase
is well-defined and has a clear set of deliverables. This makes it easier to track
progress, identify issues, and manage resources.
● Planning: The first phase of the Spiral Model is the planning phase, where the
scope of the project is determined and a plan is created for the next iteration of
the spiral.
● Risk Analysis: In the risk analysis phase, the risks associated with the project
are identified and evaluated.
● Engineering: In the engineering phase, the software is developed based on the
requirements gathered in the previous iteration.
● Evaluation: In the evaluation phase, the software is evaluated to determine if it
meets the customer’s requirements and if it is of high quality.
● Planning: The next iteration of the spiral begins with a new planning phase,
based on the results of the evaluation.
● The Spiral Model is often used for complex and large software development
projects, as it allows for a more flexible and adaptable approach to software
development. It is also well-suited to projects with significant uncertainty or high
levels of risk.
The Radius of the spiral at any point represents the expenses(cost) of the project so far,
and the angular dimension represents the progress made so far in the current phase.
Spiral Model
Each phase of the Spiral Model is divided into four quadrants as shown in the above
figure. The functions of these four quadrants are discussed below-
● Risk Handling: The projects with many unknown risks that occur as the
development proceeds, in that case, Spiral Model is the best development model
to follow due to the risk analysis and risk handling at every phase.
● Good for large projects: It is recommended to use the Spiral Model in large and
complex projects.
● Flexibility in Requirements: Change requests in the Requirements at a later
phase can be incorporated accurately by using this model.
● Customer Satisfaction: Customers can see the development of the product at
the early phase of the software development and thus, they habituated with the
system by using it before completion of the total product.
● Iterative and Incremental Approach: The Spiral Model provides an iterative
and incremental approach to software development, allowing for flexibility and
adaptability in response to changing requirements or unexpected events.
● Emphasis on Risk Management: The Spiral Model places a strong emphasis
on risk management, which helps to minimize the impact of uncertainty and risk
on the software development process.
● Improved Communication: The Spiral Model provides for regular evaluations
and reviews, which can improve communication between the customer and the
development team.
● Improved Quality: The Spiral Model allows for multiple iterations of the software
development process, which can result in improved software quality and
reliability.
● Complex: The Spiral Model is much more complex than other SDLC models.
● Expensive: Spiral Model is not suitable for small projects as it is expensive.
● Too much dependability on Risk Analysis: The successful completion of the
project is very much dependent on Risk Analysis. Without very highly
experienced experts, it is going to be a failure to develop a project using this
model.
● Difficulty in time management: As the number of phases is unknown at the
start of the project, time estimation is very difficult.
● Complexity: The Spiral Model can be complex, as it involves multiple iterations
of the software development process.
● Time-Consuming: The Spiral Model can be time-consuming, as it requires
multiple evaluations and reviews.
● Resource Intensive: The Spiral Model can be resource-intensive, as it requires
a significant investment in planning, risk analysis, and evaluations.
The most serious issue we face in the cascade model is that taking a long length to
finish the item, and the product became obsolete. To tackle this issue, we have another
methodology, which is known as the Winding model or spiral model. The winding model
is otherwise called the cyclic model.
When To Use the Spiral Model?
Q.2: What are the places where the Spiral Model is commonly used?
Answer:
Spiral Model is commonly used in industries where risk management is critical like
software development medical device manufacturing, etc.
The following illustration depicts the different phases in a V-Model of the SDLC.
Verification Phases:
It involves static analysis technique (review) done without executing code. It is the
process of evaluation of the product development phase to find whether specified
requirements meet.
There are several Varification phases in the V-Model:
Architectural Design:
In this stage, architectural specifications are comprehended and designed. Usually, a
number of technical approaches are put out, and the ultimate choice is made after
considering both the technical and financial viability. The system architecture is further
divided into modules that each handle a distinct function. Another name for this is High
Level Design (HLD).
At this point, the exchange of data and communication between the internal modules
and external systems are well understood and defined. During this phase, integration
tests can be created and documented using the information provided.
Module Design:
This phase, known as Low Level Design (LLD), specifies the comprehensive internal
design for each and every system module. Compatibility between the design and other
external systems as well as other modules in the system architecture is crucial. Unit
tests are a crucial component of any development process since they assist identify and
eradicate the majority of mistakes and flaws at an early stage. Based on the internal
module designs, these unit tests may now be created.
Coding Phase:
The Coding step involves actually writing the code for the system modules that were
created during the Design phase. The system and architectural requirements are used
to determine which programming language is most appropriate.
The coding standards and principles are followed when performing the coding. Before
the final build is checked into the repository, the code undergoes many code reviews
and is optimised for optimal performance.
Validation Phases:
It involves dynamic analysis technique (functional, non-functional), testing done by
executing code. Validation is the process to evaluate the software after the completion
of the development phase to determine whether software meets the customer
expectations and requirements.
So, V-Model contains Verification phases on one side of the Validation phases on the
other side. Verification and Validation phases are joined by coding phase in V-shape.
Thus, it is called V-Model.
There are several Validation phases in the V-Model:
Unit Testing:
Unit Test Plans are developed during module design phase. These Unit Test Plans are
executed to eliminate bugs at code or unit level.
Integration testing:
After completion of unit testing Integration testing is performed. In integration testing,
the modules are integrated and the system is tested. Integration testing is performed on
the Architecture design phase. This test verifies the communication of modules among
themselves.
System Testing:
System testing test the complete application with its functionality, inter dependency, and
communication. It tests the functional and non-functional requirements of the developed
application.
Design Phase:
● Requirement Analysis: This phase contains detailed communication with
the customer to understand their requirements and expectations. This stage is
known as Requirement Gathering.
● System Design: This phase contains the system design and the complete
hardware and communication setup for developing product.
● Architectural Design: System design is broken down further into modules
taking up different functionalities. The data transfer and communication between
the internal modules and with the outside world (other systems) is clearly
understood.
● Module Design: In this phase the system breaks down into small modules.
The detailed design of modules is specified, also known as Low-Level Design
(LLD).
Testing Phases:
● Unit Testing: Unit Test Plans are developed during module design phase.
These Unit Test Plans are executed to eliminate bugs at code or unit level.
● Integration testing: After completion of unit testing Integration testing is
performed. In integration testing, the modules are integrated, and the system is
tested. Integration testing is performed on the Architecture design phase. This
test verifies the communication of modules among themselves.
● System Testing: System testing test the complete application with its
functionality, inter dependency, and communication. It tests the functional and
non-functional requirements of the developed application.
● User Acceptance Testing (UAT): UAT is performed in a user environment
that resembles the production environment. UAT verifies that the delivered
system meets user’s requirement and system is ready for use in real world.
Industrial Challenge:
As the industry has evolved, the technologies have become more complex, increasingly
faster, and forever changing, however, there remains a set of basic principles and
concepts that are as applicable today as when IT was in its infancy.
Principles of V-Model:
● It is easy to manage due to the rigidity of the model. Each phase of V-Model has
specific deliverables and a review process.
● Proactive defect tracking – that is defects are found at early stage.
When to use?
Advantages:
● This is a highly disciplined model and Phases are completed one at a time.
● V-Model is used for small projects where project requirements are clear.
● Simple and easy to understand and use.
● This model focuses on verification and validation activities early in the life cycle
thereby enhancing the probability of building an error-free and good quality
product.
● It enables project management to track progress accurately.
● Clear and Structured Process: The V-Model provides a clear and structured
process for software development, making it easier to understand and follow.
● Emphasis on Testing: The V-Model places a strong emphasis on testing, which
helps to ensure the quality and reliability of the software.
● Improved Traceability: The V-Model provides a clear link between the
requirements and the final product, making it easier to trace and manage
changes to the software.
● Better Communication: The clear structure of the V-Model helps to improve
communication between the customer and the development team.
Disadvantages: