Software Engg SDLCBrief
Software Engg SDLCBrief
Goals:
To develop software that is of high quality, meaning it is reliable, efficient, maintainable, and
meets the needs of the users.
To manage the complexity and size of software systems.
To ensure that software is developed on time, within budget, and meets the requirements of
the users.
Importance of Software
Historical Context: Software development has evolved significantly since the early
days of computing. Initially, software was created using assembly language and
simple programming languages, and it was often tied directly to the hardware on
which it ran. Over time, as computers became more powerful and capable, software
grew in complexity, leading to the development of more sophisticated programming
languages, tools, and methodologies.
First Generation (1950s-1960s): Focused on assembly language and simple machine code.
Second Generation (1960s-1970s): Introduction of higher-level programming languages like
Fortran and COBOL.
Third Generation (1970s-1980s): Emergence of structured programming and the
development of databases.
Fourth Generation (1980s-1990s): The rise of object-oriented programming and the use of
integrated development environments (IDEs).
Fifth Generation (1990s-present): Focus on component-based development, service-
oriented architecture, and the use of agile methodologies.
Software Characteristics
Intangibility: Unlike physical products, software is intangible and does not have a
physical form. This makes it difficult to measure and manage, as its quality cannot be
assessed by visual inspection alone.
Software Applications
Web and Mobile Applications: The proliferation of the internet and mobile devices
has led to the widespread use of web and mobile applications. These applications are
used for a variety of purposes, including social networking, online shopping, and
mobile banking.
Definition: The term "software crisis" was coined in the 1960s to describe the
difficulties faced by the software industry in developing large, complex software
systems. The crisis was characterized by projects that were delivered late, over
budget, and with poor quality, leading to systems that were unreliable, difficult to
maintain, and often failed to meet user requirements.
Problems:
Project Overruns: Many software projects exceeded their budgets and timelines, leading to
cost overruns and delayed deliveries.
Poor Quality: Software systems often contained numerous bugs and defects, leading to
frequent failures and the need for extensive maintenance.
Inadequate Documentation: Poor documentation made it difficult for developers to
understand and maintain software systems.
User Dissatisfaction: Software systems often failed to meet user expectations, either
because the requirements were not properly understood or because the systems were not
designed with the user's needs in mind.
Causes:
Lack of Proper Methodologies: Early software development practices were often ad hoc and
lacked the rigor of formal engineering disciplines. This led to inconsistent and unreliable
results.
Inadequate Tools and Techniques: The tools and techniques available for software
development in the early days were primitive, making it difficult to manage the complexity of
large systems.
Communication Gaps: Poor communication between stakeholders, including users,
developers, and managers, often led to misunderstandings and misaligned expectations.
Rapid Technological Change: The fast pace of technological change in the computing
industry meant that software systems were often outdated by the time they were
completed.
Resolution Efforts:
Development of Software Engineering as a Discipline: The software crisis led to the
recognition of the need for formal engineering principles in software development, giving
rise to the field of software engineering.
Introduction of Structured Programming and Design Techniques: Structured programming
and design techniques helped to reduce complexity and improve the reliability of software
systems.
Adoption of Software Development Methodologies: Methodologies such as the Waterfall
model, Agile, and DevOps have been developed to improve the planning, execution, and
delivery of software projects.
Activities:
Deliverables:
System Design:
Deliverables:
Implementation (Coding):
Activities:
Deliverables:
Testing:
Objective: The testing phase is critical for identifying and fixing bugs
or defects in the software. It ensures that the software meets the quality
standards and requirements specified in the SRS.
Activities:
Deliverables:
Deployment:
Activities:
Deliverables:
Activities:
1. Monitoring the software for any issues or bugs that arise after deployment.
2. Providing technical support and resolving issues reported by users.
3. Releasing updates, patches, and enhancements to improve functionality or
address security vulnerabilities.
4. Planning for eventual upgrades or migration to new platforms if necessary.
Deliverables:
1. Waterfall Model
Sequential Phases: The Waterfall model is strictly linear, meaning each phase of the development
process must be completed before the next one begins. This makes the model easy to manage but
less flexible to changes.
Documentation: Each phase produces comprehensive documentation, ensuring that the system
requirements, design, and implementation are fully documented before proceeding. This is
particularly useful in projects where compliance and traceability are critical.
Use Cases: Best suited for projects where requirements are well-understood and unlikely to change,
such as government projects, construction, and industrial systems.
Further Example:
Defense System Development: In defense contracts, the Waterfall model is often used due to its
emphasis on documentation, which is required for regulatory compliance. The rigid structure ensures
that all aspects are thoroughly reviewed and approved before moving forward, reducing the risk of
failure in these high-stakes projects.
Use Cases: Ideal for projects with high reliability and safety requirements, such as medical devices,
automotive software, and financial systems.
Further Example:
Aerospace Software: The V-Model is often used in the development of software for aerospace
systems, where each function of the software is rigorously tested against corresponding
requirements. This ensures that the software is not only built according to specifications but also that
it will function correctly under all expected conditions.
3. Iterative Model
Incremental Refinement: In the Iterative model, the software is developed and refined through
repeated cycles. Each cycle (or iteration) produces a working version of the software, which is then
improved upon in subsequent iterations.
Flexibility: This model allows for changes to be made after each iteration, making it easier to adapt to
evolving requirements or user feedback.
Use Cases: Suitable for large-scale projects where requirements are not fully understood from the
start, such as enterprise systems, e-commerce platforms, and content management systems.
Further Example:
CRM Software: A company developing a customer relationship management (CRM) system might use
the Iterative model. They start with a basic version that handles customer data storage. After getting
feedback from users, they iterate on the system to add features like email integration, sales tracking,
and customer support management, refining the software in each cycle.
4. Spiral Model
Risk Management: The Spiral model focuses heavily on risk assessment and reduction. Each spiral
involves a phase of risk analysis, followed by efforts to mitigate identified risks, before proceeding to
the next phase of development.
Iterative Approach: Like the Iterative model, the Spiral model is iterative, with each cycle producing a
prototype or version of the software that is then evaluated and improved upon in subsequent cycles.
Use Cases: Ideal for large, complex, and high-risk projects where frequent reassessment and risk
management are necessary, such as in large-scale enterprise systems, defense projects, and critical
infrastructure systems.
Further Example:
Nuclear Power Plant Control System: Developing software to control nuclear power plants involves
significant risks, including the potential for catastrophic failure. The Spiral model allows the
development team to assess risks at each stage and create prototypes to address those risks before
moving forward, ensuring the software is reliable and safe.
5.Agile Model
Iterative and Incremental: Agile focuses on delivering small, functional increments of the software in
short cycles called sprints. Each sprint typically lasts 1-4 weeks and results in a working product
increment.
Customer Collaboration: Agile emphasizes close collaboration with stakeholders and customers
throughout the development process, allowing for rapid adjustments based on feedback.
Use Cases: Agile is particularly well-suited for projects with dynamic or evolving requirements, such as
startups, mobile apps, and web development projects.
Further Example:
Online Marketplace Platform: A startup building an online marketplace for freelance services might
use Agile methodologies. The team works in sprints to deliver features such as user registration,
service listings, and payment processing. After each sprint, the team gathers feedback from early
users and stakeholders to prioritize the next set of features, allowing the platform to evolve based on
actual user needs.
6. DevOps Model
Streaming Service: A company like Netflix or Spotify that provides a streaming service would use
DevOps to manage continuous updates to their platform. New features, bug fixes, and performance
improvements are constantly integrated, tested, and deployed to ensure that users always have
access to the latest version without experiencing downtime.
Description: The Big Bang model is an informal approach where development starts without much
planning or specification. The project is driven by coding and development with little focus on
requirements, design, or testing until late in the process. The software is delivered in one "big bang"
at the end.
Advantages: This model requires minimal planning and is highly flexible, making it easy to
accommodate changes during development.
Disadvantages: High risk due to the lack of structure, planning, and formal testing. It often leads to
projects going over time and budget, and the final product may not meet user expectations.
Use Cases: Suitable for small projects or proof-of-concept prototypes where requirements are not
well understood and flexibility is more important than structure.
Example:
Proof of Concept for a New App Idea: A startup might use the Big Bang model to quickly develop a
proof-of-concept for a new app idea. They focus on coding a basic version of the app to demonstrate
its potential to investors, without spending much time on planning or documentation.
Description: The RAD model emphasizes rapid prototyping and iterative delivery. It focuses on quickly
building functional prototypes and refining them through user feedback and iteration. This model is
often used when time-to-market is a priority.
Phases:
Requirements Planning: Initial gathering of requirements.
User Design: Developing user interfaces and prototypes.
Construction: Building and refining the prototype.
Cutover: Finalizing the system and moving to production.
Advantages: Rapid delivery of prototypes and final product, flexibility in accommodating changes, and
close involvement of users throughout the development process.
Disadvantages: Requires strong collaboration with users, may be less suitable for large, complex
systems due to the lack of detailed documentation and planning.
Use Cases: Ideal for projects with tight deadlines or where user feedback is crucial, such as web
applications, mobile apps, and customer-facing portals.
Example:
Custom CRM Tool: A marketing company needs a custom CRM tool to manage its clients. Using RAD,
the development team quickly creates a series of prototypes, allowing the marketing team to provide
feedback at each stage. The final product is delivered in a fraction of the time it would take with
traditional models, fully tailored to the company's needs.
9. Incremental Model
Description: The Incremental model is similar to the Iterative model but focuses more on delivering
small, usable parts of the software at each stage. Each increment adds functionality until the
complete system is delivered.
Phases: The project is divided into smaller parts (increments), with each part going through the
requirements, design, implementation, and testing phases. After the first increment is delivered, the
next increment builds on it, adding new features and functionality.
Advantages: Provides working software early in the process, easier to test and debug, allows for
gradual improvements.
Disadvantages: Requires careful planning and coordination, and the final system may be less cohesive
if increments are not well-integrated.
Use Cases: Suitable for projects where requirements are known but are expected to evolve over time,
such as business information systems, large-scale software implementations, and enterprise
applications.
Example:
Payroll System: A company implementing a new payroll system might use the Incremental model. The
first increment could include basic salary calculation, the second increment could add tax calculations,
and the third could introduce benefits management. Each increment is fully functional and tested
before moving on to the next, allowing the company to start using parts of the system while the rest
is still under development.
Description: The Prototyping model involves creating a prototype (an early, approximate version) of
the software to explore ideas and gather user feedback. The prototype is refined based on feedback
until it evolves into the final product.
Phases:
Requirements Gathering: Initial gathering of requirements.
Quick Design: Create a quick design to develop the prototype.
Prototyping: Develop the prototype with limited functionality.
User Evaluation: Gather feedback from users.
Refinement: Refine the prototype based on feedback and iterate as necessary.
Advantages: Helps clarify requirements, involves users early in the process, reduces risks associated
with unclear requirements.
Disadvantages: Can lead to "scope creep" if not managed well, may require more resources due to
repeated iterations.
Use Cases: Suitable for projects where requirements are not clear from the outset, such as new
product development, experimental projects, and user-centric applications.
Example:
New Mobile Game Development: A game development company is working on a new mobile game.
They use the Prototyping model to quickly build a basic version of the game, allowing testers to try it
out and provide feedback on gameplay mechanics, design, and user experience. The development
team then refines the prototype, adding more features and improving the game based on user input
until the final version is ready for release.