updated
updated
Explanation
Key Takeaways
Software Engineering is the process of building software in a planned and organized way
so that it works well, is easy to use, and can be maintained over time.
Why is it Important?
A partially completed increment refers to a part of the software that is functional but not
fully finished. It contains some features that are ready for use while others are still in
development. This is common in incremental and agile software development approaches
Example:
Imagine you're developing a mobile banking app. Instead of waiting until the entire app is
finished, you first release:
✅ Login & Account Balance Feature (Increment 1)
✅ Fund Transfer Feature (Increment 2)
🚧 Bill Payments Feature (Still in development)
Each of these increments is deployed partially completed, allowing users to benefit from
the available features while the rest is being built.
Simple Explanation of the Waterfall Model
1 When is it Used?
3 Key Idea
The Waterfall Model is like a one-way street—each step must be finished before moving to
the next. It works well only when requirements are clear and stable.
The V-Model is a variation of the Waterfall Model that focuses on quality assurance
(testing) at every stage of software development. It ensures that for every development
phase, there is a corresponding testing phase.
The Waterfall Model works best in situations where the project is well-defined, stable, and
predictable. Here are the key conditions where it is most suitable:
• The tools, programming languages, and frameworks are already known and tested.
• There’s no need to experiment with new or emerging technologies.
• Example: Developing a desktop application using well-known programming
languages like Java or C++.
✅ 4. No Ambiguous Requirements
• All features and functionalities are clearly defined from the start.
• No confusion about how the software should work.
• Example: A library management system where book records, member details, and
lending rules are straightforward.
• Skilled developers, testers, and designers are ready to work on the project.
• There’s enough time and budget to follow each step of the Waterfall model
properly.
• Example: A government project where funding and manpower are fully allocated.
✅ 6. The Project is Short
• Waterfall is not ideal for long, complex projects because changes are hard to make
later.
• It works best for small, well-defined projects with clear goals.
• Example: A simple online survey system that collects responses and generates
reports.
Advantages:
1. Easy to manage due to the rigidity of the model: The Waterfall model is structured
and follows a strict sequence, making it easier to manage because you know what
comes next.
2. Each phase has specific deliverables and a review: Every stage of the project has
clear goals and tasks, making it easy to track progress.
3. Phases are processed and completed one at a time: Each phase is finished before
the next one starts, preventing overlap or confusion.
4. Works well for smaller projects where requirements are well understood: If the
project is small and the requirements are clear from the beginning, this model works
effectively.
5. Clearly defined stages: The project is divided into distinct phases like design,
development, testing, etc., making it easy to follow.
6. Well-understood milestones: The milestones or key goals of the project are clearly
defined, helping to measure progress.
7. Easy to arrange tasks: Since the model is sequential, tasks are organized in a simple
way.
8. Process and results are well documented: Everything is documented, so it's easier
to track progress and refer back to earlier stages if needed.
9. Simple and easy to understand and use: The model is straightforward, so it's easy
for teams to follow and understand.
Disadvantages:
1. No working software is produced until late during the life cycle: The software is
only ready towards the end of the project, which can be frustrating if early feedback is
needed.
2. High amounts of risk and uncertainty: Because you don’t know how well the
project will turn out until later, there’s a lot of uncertainty in this model.
3. Not a good model for complex and object-oriented projects: If the project is
complex or involves many moving parts, the rigid structure of Waterfall can be
limiting.
4. Poor model for long and ongoing projects: Waterfall is not ideal for projects that
evolve over time or that need constant updates.
5. It is difficult to measure progress within stages: Since each phase is only
completed after the previous one, tracking small progress throughout stages can be
challenging.
6. Cannot accommodate changing requirements: If the project needs changes midway
through, it's hard to adapt because the model is very rigid.
7. Adjusting scope during the life cycle can end a project: If the project's scope
changes, it may cause the whole project to fail or be delayed significantly.
The Incremental Model is a software development approach that builds a system step by
step by delivering small, usable parts of the system in increments. Each increment adds
functionality to the previous ones, eventually leading to a complete system.
• Incremental Model: Imagine building a house one room at a time. First, you build
the living room, then the kitchen, then the bedrooms, etc. Each room is fully finished
before moving to the next one.
• Iterative Model: Imagine building the entire house first, but with only basic walls
and a roof. Then, in each iteration, you improve the walls, add windows, install
flooring, etc., until the house is complete.
The incremental model of software development breaks down the project into smaller,
manageable phases, with each phase delivering a portion of the product. Here’s a simplified
breakdown of its phases:
1. Requirement Analysis:
o In this phase, the product's requirements are gathered. A team of experts
identifies the system's needs, and these functional requirements are clearly
understood by the team. The main goal is to know exactly what the system
must do.
2. Design & Development:
o During this phase, the system's design and functionality are planned out. The
development team works on creating the system's architecture and core
functions. This is where the first part of the software is designed and built,
with a focus on meeting the requirements identified earlier.
3. Testing:
o After each part of the system is developed, it undergoes testing. The testing
phase checks whether the existing features are working properly, and also
ensures that any new functionality is correctly integrated. Different testing
methods are used to ensure the system behaves as expected and any issues are
fixed.
o
4. Implementation:
o This is where the actual coding is completed based on the design from the
earlier phase. After coding, the system is tested again to make sure it works as
intended. With each new increment, the software's functionality improves and
new features are added, gradually building up to the final product.
RAD is a software development model that focuses on speeding up the development process
while maintaining high-quality results. It emphasizes creating systems quickly using a
construction approach based on existing elements or components, instead of starting from
scratch every time. It’s essentially about developing software faster by using tools and
techniques that allow for quick creation and iteration.
RAD (Rapid Application Development) is all about building software quickly and with high
quality by using a few key strategies:
• Business Modeling:
In this phase, you figure out how information flows in the business. You answer questions
like: What data drives the business process? Who generates this data? Where does the data
go? Who processes it?
• Data Modeling:
The data from business modeling is refined into a set of data objects needed for the business.
You identify the important attributes of these data objects and define how they relate to each
other.
• Process Modeling:
The data objects defined in the previous phase are used to create the flow of information
needed to perform business functions. You describe how data will be added, modified,
deleted, or retrieved as part of the process.
• Application Generation:
Automated tools are used to speed up the construction of the software. These tools help
generate code quickly, often using 4th generation programming languages (4GL), which are
easier and faster to work with.
1. Flexible to Changes:
RAD is flexible and can quickly adapt to changes in requirements or features. Since
development is broken down into smaller parts, it’s easier to modify or adjust one
piece without disrupting the whole system.
2. Changes are easily adoptable:
As the product is built incrementally, it’s easier to incorporate changes based on
feedback or evolving requirements. The user can suggest improvements at each stage,
and the team can quickly implement them.
3. Brings highest priority functionality to the customer:
In RAD, the most important features are developed and delivered first. This ensures
that the customer receives the most valuable parts of the system early, even while
other parts are still being worked on.
4. Reduced development time:
RAD speeds up development by focusing on rapid prototyping and using reusable
components. This significantly reduces the time it takes to build the system compared
to traditional models.
5. Increases reusability of features:
By reusing existing software components and tools, RAD encourages the creation of
systems with more reusable parts. This makes future projects faster to develop, as
components can be reused in new systems.
In software development, the evolutionary process models are designed to handle projects
that change and develop over time. These models are particularly useful when the full scope
of the project isn’t clear at the start, or when requirements change as the project progresses.
Key Points:
The Prototype Model is a way of developing software by quickly building a working version
(prototype) of the system. This model focuses on gathering feedback early and refining the
software in multiple iterations.
The Spiral Model, proposed by Barry Boehm, is a software development approach that
combines the iterative nature of prototyping with the structured approach of the
waterfall model. This model focuses on risk assessment and helps in systematically refining
the software through repeated cycles. It allows for rapid development of increasingly
complete versions of the software.
• The spiral path consists of multiple framework activities that the software team
performs in a clockwise direction, starting from the center.
• Each loop in the spiral represents a development phase, such as planning, design,
prototyping, testing, and implementation.
• Risk analysis is done at every phase to identify and address potential problems
before moving forward.
The Spiral Model is a software development process that combines prototyping (building a
model of the software) with the structured approach of the waterfall model.
Key Features:
• Quick Development: It helps create new versions of the software quickly, allowing
for regular updates.
• Incremental Releases: The software is developed in parts. Each new version builds
on the previous one.
• Early Stages: Early versions might just be basic models or prototypes to test ideas.
• Later Stages: As development continues, the software becomes more complete and
fully functional.
• "It allows for rapid development of increasingly complete versions of the software"
means that the software is built quickly, and with each new version, it becomes more
complete and refined. At the beginning, the software might only have basic features
or functions, but with each iteration (or cycle), new features are added, existing ones
are improved, and the overall software gets closer to the final version. This process
continues until the software is fully developed, with each version being better than the
last one.
Each cycle in the Spiral Model is divided into four main parts:
1. Objective Setting:
o Define the goal for the current cycle.
o Identify different ways to achieve the goal.
o Consider any limitations or constraints.
2. Risk Assessment and Reduction:
o Evaluate different options based on risks and constraints.
o Identify potential risks that could affect the project.
3. Development and Validation:
o Develop solutions to reduce risks and uncertainties.
o Activities like testing, prototyping, and simulations may be used.
4. Planning:
o Review the progress of the current cycle.
o Decide whether to continue with the next cycle.
o If continuing, create a plan for the next phase.
When to use Spiral Model:
Advantages:
• High amount of risk analysis: The Spiral Model focuses heavily on identifying and
managing risks early in the project. This helps in addressing potential issues before
they become bigger problems, ensuring a smoother development process.
• Useful for large and mission-critical projects: It’s ideal for projects that are large,
complex, or have high stakes (e.g., systems with safety concerns). The model's focus
on iterative development and risk management makes it perfect for ensuring that these
projects succeed.
Disadvantages:
• Can be a costly model to use: The Spiral Model involves multiple phases of
planning, development, and risk analysis, which can make it more expensive
compared to other models. The repeated iterations add up in terms of resources and
time.
• Risk analysis needs highly particular expertise: Performing risk analysis
effectively requires specialized knowledge. Teams need to have experts who can
accurately identify and assess risks, which can be a challenge if such expertise is
lacking.
• Doesn't work well for smaller projects: Due to its complex nature and the focus on
risk management, the Spiral Model is not well-suited for smaller projects. Smaller
projects may not justify the resources needed for detailed planning and iterations.
Concurrent Model
Each software engineering activity, like modeling, design, or prototyping, can exist in one of
several possible states at any given time. Some common states include:
• Iterative and Concurrent: In this model, software engineering activities are done
simultaneously, but they are also iterative. For instance, activities like modeling,
design, and prototyping can be carried out at the same time.
• Example of How It Works: In a project, the "modeling activity" might involve
analysis and design tasks. These tasks can happen concurrently, so while one part of
the project is being designed, another part might be analyzed or prototyped.
• State Transitions: The software engineering activities are considered to be in
different states. For example:
o Modeling Activity: In the early stages, modeling may be in an "inactive" state
until the communication phase is done. Later, it may move into an "under
development" state when the team starts working on it.
o If there are changes in requirements, the modeling activity may shift back into
the "awaiting changes" state.
• Events Triggering State Changes: Specific events trigger transitions between states.
For example:
o If a design phase reveals a problem, it might trigger a change in the
requirements, which could move the requirements analysis task from the
"done" state to "awaiting changes."
• Large Projects with Complex Tasks: If your project involves many tasks that can be
worked on in parallel, the Concurrent Model is ideal. It’s great for projects where
different aspects of development are interconnected and can be progressed
simultaneously.
• Projects Needing Flexibility and Fast Adaptation: This model is useful if you
expect frequent changes during development or if the project requires quick response
to customer feedback, as tasks can easily shift between states.
• Collaborative Teams: It works well when you have a large team that can handle
various tasks in parallel, enabling different groups to handle different components
simultaneously.
Advantages of the Concurrent Model:
1. Faster Delivery: Since multiple tasks are carried out in parallel, the overall time to
complete the project is often reduced.
2. Flexible and Adaptable: The model’s structure allows for easy handling of changes,
especially when new requirements arise or issues are discovered during development.
Activities can quickly transition between different states.
3. Continuous Progress: Even if one task is delayed or requires revision, other tasks
can continue, preventing the whole project from getting stalled. The project moves
forward through parallel development.
4. Early Detection of Issues: Since tasks happen in parallel, problems can be
discovered early when different tasks or models are compared and analyzed against
each other.
5. Better Coordination: Encourages better communication between teams because
everyone is working together in parallel, leading to smoother integration of different
components.
Agile is a method used in software development that emphasizes flexibility and speed. The
term "Agile" means being quick and adaptable.
In an Agile process, the development is divided into smaller chunks called iterations, which
are short development cycles, usually lasting one to four weeks. Unlike traditional methods,
Agile does not involve extensive long-term planning.
At the start of the project, the overall goals and requirements are defined. However, instead of
planning every detail in advance, the number of iterations, their duration, and the scope of
each are decided early on.
Each iteration follows a full development cycle, including planning, requirement analysis,
design, coding, and testing. By the end of each iteration, a working version of the product is
shown to the client.
Dividing the project into smaller parts helps reduce risks and ensures quicker delivery,
making it easier to adapt to changes during development.
• Requirements Gathering: In this phase, you identify and define what the project needs to
achieve. You discuss the business goals and estimate the time and effort needed to complete
the project. You also check if the project is technically and economically feasible. In this
phase, you must define the requirements.
• Design the Requirements: Once you understand the project, you work with stakeholders
(like clients or team members) to define what the project will include. You can use tools like
user flow diagrams or high-level diagrams (UML) to plan how new features will work and fit
into the existing system.
• Construction/Iteration: The actual work begins here. Designers and developers start
creating the product. The focus is on creating a working version of the product with basic
features that can be improved over time through iterations.
• Testing: In this phase, the Quality Assurance (QA) team tests the product to make sure it
works as expected and to find any bugs that need fixing.
• Deployment: Once the product is tested and ready, it’s deployed (released) to the user’s
environment, meaning it becomes available for use.
• Feedback: After the product is released, the team gathers feedback from users. This
feedback helps the team make improvements and address any issues that users experience.
The process of getting feedback and making improvements continues throughout the project.
Till page 73
Software requirements define what a software system must do. They can be broad and
abstract or very detailed and mathematical. These requirements describe what users expect
from the software and help developers create a functional and efficient system.
1. Business Requirements
Definition: Business requirements define the overall goals of a project from a business
perspective. These requirements ensure that the software aligns with the company's
objectives.
Business requirements are the goals of a business that the software must fulfill.
Key Points:
Example:
"The Online Shopping App software will allow customers to order products
online to increase sales."
2. User Requirements
Definition: User requirements focus on how customers will interact with the software. They
are typically detailed in a separate document when software has complex UI features.
User requirements describe what the users (customers) need from the software.
Key Points:
Example:
"The customer shall log in and place an order to buy a product online."
3. Software Requirements
Software requirements are the key instructions that define what a software system should
do. There are three main types of software requirements:
1. Functional Requirements
2. Non-Functional Requirements
3. Domain Requirements
1. Functional Requirements
Functional requirements describe the specific features and functions that a software system
must provide.
Key Points:
• Calculations
• Data processing
• User interactions
• Business processes
Key Points:
✅ These requirements focus on how well the system should perform, rather than what it
does.
✅ The level of importance of NFRs may vary between projects.
✅ They are also called non-behavioral or quality attributes.
3. Domain Requirements
Domain requirements are specific to an industry or field. They ensure that the software
meets the standards and expectations of that domain.
Key Points:
1. Medical Software
o Medical equipment software must follow the IEC 60601 standard for safety
and performance.
o Even if the software works well, it cannot be used if it does not meet this
standard.
2. Academic Software
o A school management system must have features to track students and
teachers.
o The ability to access faculty and student lists is a domain-
specific requirement.
1. Feasibility Study: This step checks whether it’s possible to develop the software
based on factors like technology, business needs, and costs.
o Technical Feasibility: Looks at the current technology to see if it can meet
the customer’s requirements within the project’s budget and timeline.
o Operational Feasibility: Examines whether the software can solve the
business problems and meet customer needs at various levels.
o Economic Feasibility: Evaluates if the software can provide financial benefits
to the organization, justifying the investment.
2. Requirement Elicitation and Analysis: This is the process of gathering and
analyzing the requirements from customers and existing systems.
o Requirement Elicitation: This involves collecting all the needs and
expectations from stakeholders (the people involved in the project, like clients,
users, and developers).
o Requirement Analysis: After gathering the requirements, they are analyzed to
check for any issues, like missing details or inconsistencies.
o The goal is to clearly define what the software must do and resolve any
conflicts or unclear points.
• Customers usually describe their needs in simple language, while the analyst
translates them into technical terms that the development team can understand.
• This document helps ensure that everyone involved in the project has a clear
understanding of what the software should do.
• Several models are used to represent these requirements visually, such as:
o Data Flow Diagrams (DFDs)
o Entity-Relationship (E-R) Diagrams
o Function Decomposition Diagrams (FDDs)
o Data Dictionaries
• Sometimes, users may ask for features that are unrealistic or too complex to
implement.
• Validation ensures that all requirements:
o Can be practically implemented
o Are correct and match the expected software functionality
o Are clear and free of ambiguities
o Are complete and cover all necessary aspects
o Are properly described for developers to follow
1. Requirement Reviews/Inspections
o A manual process where experts carefully analyze requirements to check for
errors or missing details.
2. Prototyping
o A small working model of the system is created to demonstrate and verify
requirements.
o Helps users visualize how the final product will function.
3. Test-Case Generation
o Test cases are created to check whether the requirements are testable.
o Ensures that each requirement can be verified through testing.
4. Automated Consistency Analysis
o Software tools are used to check whether the requirements are consistent and
free of contradictions.
Requirement elicitation is the process of gathering and defining what a software system
should do. The goal is to ensure a clear understanding of the customer's needs before
development starts.
1. Aligns with Business Goals: Ensures the software meets the company's objectives.
2. Improves User Satisfaction: Engaging users in the process helps create software that
meets their expectations.
3. Saves Time and Cost: Clear requirements reduce misunderstandings, preventing
costly rework.
4. Ensures Compliance: Essential for industries like healthcare, finance, and aerospace
to meet legal requirements.
5. Provides Traceability: Links each requirement to specific parts of the software for
testing, validation, and maintenance.
Key Activities in Requirement Elicitation
2. Brainstorming Sessions
• Bridges the gap between what developers think they need to build and what customers
expect.
• Participants list system-related objects:
o Objects in the system’s environment
o Objects produced by the system
o Objects used by the system
• Lists are combined, redundancies removed, and small teams develop detailed
specifications.