Software Engineering
Software Engineering
2. Software Processes:
• Communication (Communicate with Stakeholders)
• Planning (creating a software project plan)
• Modelling (Creating a Model or Sketch before starting the project)
• Construction (combines code generation and the testing)
• Deployment (S/w is delivered and it’s tested and feedback is given)
3. Waterfall Model:
The Waterfall Model, also called the classic life cycle, is a systematic, sequential approach to software development.
It begins with the customer specifying requirements and progresses through the following stages:
1. Communication: Understanding and gathering customer requirements.
2. Planning: Creating a project plan and defining resources, timelines, and objectives.
3. Modeling: Refining requirements into detailed technical representations.
4. Construction: Coding and implementing the software.
5. Deployment: Delivering the software and providing ongoing support.
Key Characteristics:
• It is the oldest paradigm for software engineering.
• The process flows linearly, resembling a waterfall, from one phase to the next.
• A variation called the V-model includes quality assurance activities aligned with the development phases.
Verification and validation actions are performed after each phase to ensure quality.
Advantages:
• Works well when requirements are well-defined and stable.
• Suitable for projects with clear objectives, like adaptations or enhancements to existing systems.
Disadvantages:
1. Real projects rarely follow a strictly linear flow, and indirect iteration can cause confusion.
2. Difficult to accommodate incomplete or uncertain requirements.
3. Customers must wait until late in the process to see a working version, increasing the risk of undetected
major errors.
4. Blocking states may occur, where some team members wait for others to complete dependent tasks, leading
to inefficiencies.
Use Case:
The Waterfall Model is appropriate for projects with fixed requirements and where work can proceed linearly to
completion. It is less suitable for fast-paced environments with frequent changes.
5. V - Model
The V-Model is a variation of the waterfall model that emphasizes the relationship between quality assurance actions
and the steps associated with communication, modeling, and early construction activities in software development.
It visualizes the process as a "V" shape, with the following characteristics:
• Left Side of the V: Represents the refinement of problem requirements into progressively more detailed and
technical representations of the problem and its solution.
• Right Side of the V: Represents the validation and verification activities performed after code generation.
This includes a series of tests to validate each of the models created during the left-side activities.
The V-Model provides a structured way to link verification and validation activities to earlier engineering steps. While
it is similar to the classic waterfall model, the V-Model explicitly visualizes the integration of quality assurance actions
at every stage.
Key Features:
1. Progression Downward (Left Side): Detailed understanding and specification of the problem and solution.
2. Progression Upward (Right Side): Validation and testing of the software against the requirements and
design.
3. Focus on Quality Assurance: Emphasizes systematic validation of each step to ensure alignment with initial
requirements.
Although there is no fundamental difference between the classic life cycle and the V-Model, the latter highlights the
role of quality assurance in the development process.
The Incremental Process Model is a software development approach that combines linear and parallel process flows
to produce the software in increments. It is particularly useful when initial requirements are well-defined, but the full
scope of development is too large for a purely linear process, or when there is a need to deliver functionality quickly
and refine it over time.
Key Features:
1. Delivery in Increments:
a. The software is built and delivered in smaller, manageable increments, each representing a subset of the
overall functionality.
b. Early increments provide basic, operational versions of the product, while later increments add additional
features and refinements.
2. Core Product First:
a. The first increment often includes a core product with basic requirements addressed.
b. Subsequent increments modify and enhance the core product based on user feedback and evaluation.
3. User Evaluation:
a. After each increment is delivered, users evaluate the product. This feedback helps refine future
increments.
4. Risk Management:
a. Early increments can be planned to address technical risks or dependencies, such as delays in new
hardware availability.
5. Flexible Staffing:
a. Initial increments can be implemented with fewer staff, and additional team members can be added for
later increments if needed.
Example:
In developing a word processor:
• The first increment might include file management, basic editing, and document production.
• The second increment adds advanced editing and document production features.
• The third increment introduces spelling and grammar checking.
• The fourth increment provides advanced page layout capabilities.
Advantages:
• Delivers a working product early, even if incomplete.
• Provides a platform for user evaluation and feedback.
• Supports gradual development, enabling flexibility and risk mitigation.
• Useful when complete implementation cannot be achieved by the initial deadline.
Use Case:
The Incremental Process Model is ideal when quick delivery of functionality is required, when resources are limited
initially, or when technical risks need to be managed systematically.7
Example:
In developing a word-processing software:
1. First Increment:
a. Delivers basic functionality such as file management, basic editing, and simple document production.
2. Second Increment:
a. Adds more sophisticated editing capabilities and enhanced document production features.
3. Third Increment:
a. Introduces spelling and grammar checking functionality.
4. Fourth Increment:
a. Provides advanced page layout capabilities, such as headers, footers, and multiple-column layouts.
Each increment builds upon the previous one, with the core product delivered first and enhanced features added in
subsequent releases based on user feedback and evolving requirements.
The Spiral Model, proposed by Barry Boehm, is an evolutionary software process model that combines the iterative
nature of prototyping with the structured and systematic approach of the Waterfall Model. It is particularly suited for
large-scale, complex systems and projects with significant risks.
Key Features:
1. Cyclic and Iterative Approach:
a. The software is developed through a series of evolutionary releases.
b. Early iterations may produce prototypes or models, while later iterations yield progressively more
complete and functional versions of the software.
2. Risk-Driven Model:
a. The Spiral Model focuses on identifying and managing risks at every stage of development.
b. Each revolution around the spiral involves assessing and reducing risks before progressing further.
3. Anchor Point Milestones:
a. These are defined checkpoints that ensure stakeholder commitment to feasible and mutually satisfactory
solutions.
4. Framework Activities:
a. The spiral is divided into segments representing generic software engineering activities such as planning,
risk analysis, development, and evaluation.
b. Each cycle around the spiral consists of these activities and moves clockwise, starting from the centre.
5. Continuous Evolution:
a. The model allows the process to adapt throughout the software’s lifecycle, even after initial development
is complete.
b. It can represent concept development, new product development, or product enhancement.
Example Process:
1. First Circuit:
a. Develop a product specification or initial concept.
2. Subsequent Circuits:
a. Create prototypes and progressively more sophisticated versions of the system.
3. Later Circuits:
a. Develop the complete system, and later iterations may focus on product enhancements or adaptations.
Advantages:
• Facilitates better understanding of customer needs and technical risks.
• Provides flexibility to incorporate changes at any stage.
• Suitable for large and complex projects.
• Encourages continuous feedback and iterative improvement.
• Helps in managing risks effectively through prototyping and iterative analysis.
Disadvantages:
• Requires significant expertise in risk assessment.
• May be challenging to convince stakeholders of its controllability, especially in contract-based projects.
• Unmanaged risks can lead to project issues.
Use Case:
The Spiral Model is ideal for projects with evolving requirements, high risks, and large-scale systems where iterative
refinement and risk management are crucial. It remains active throughout the software lifecycle, adapting to changes
such as product enhancements or updates.
8. Software Challenges:
• Open-world Computing:
o What it is: This is about making software that helps different machines (like phones, computers, or servers)
communicate over large networks, such as the internet or wireless systems.
o Challenge: Making sure these machines can work together smoothly, even if they’re different types and
located far apart.
• Net Sourcing:
o What it is: This involves creating software that works over the internet and can be used by people all over
the world.
o Challenge: Building apps that are easy to use globally and can handle a lot of users, while making sure they
work well in different countries and on different devices.
• Open Source:
o What it is: This is when the code of a software is shared for free, so others can modify and improve it.
o Challenge: Keeping the software reliable and secure while allowing anyone to contribute to it. Plus,
figuring out how to make money from free software.
9. Software Myths
Management Myths:
1. (Book of Standards is enough to build software)
Myth: We already have a book full of standards and procedures for building software. Won’t that provide my
people with everything they need to know?
Reality: A book of standards may exist, but it may not be used, might not reflect modern practices, be
complete, adaptable, or streamlined for quality and time-to-delivery.
2. (If project behind schedule then hire more programmers)
Myth: If we get behind schedule, we can add more programmers and catch up.
Reality: Adding people to a late project makes it later because existing team members must spend time
training new people, reducing productive work time.
3. (If I want to outsource a project, I will let them do it and me relax)
Myth: If I decide to outsource the software project to a third party, I can just relax and let that firm build it.
Reality: If the organization doesn't understand how to manage and control software projects internally,
outsourcing will lead to struggles and poor results.
Customer Myths:
1. (General Statement of objectives is enough to write code)
Myth: A general statement of objectives is sufficient to begin writing programs—we can fill in the details
later.
Reality: An ambiguous statement of objectives can lead to disaster. Clear, unambiguous requirements must
be developed through continuous communication.
2. (Software is flexible and can accommodate changes easily)
Myth: Software requirements continually change, but change can be easily accommodated because software
is flexible.
Reality: While software can accommodate change, the cost of change increases dramatically as the project
progresses, especially once design and code are underway.
Practitioner’s Myths:
1. (Once program is written then job is considered done)
Myth: Once we write the program and get it to work, our job is done.
Reality: Most effort in software development is spent after the program is delivered to the customer for the
first time, not during the initial development.
2. (Quality is not important only running code is enough)
Myth: Until I get the program "running" I have no way of assessing its quality.
Reality: Quality can be assessed early through technical reviews, which are more effective than testing in
finding certain defects.
3. (For delivery of project only the working program is enough)
Myth: The only deliverable work product for a successful project is the working program.
Reality: A working program is only one part of the project. Models, documents, and plans are also crucial for
successful engineering and support.
4. (Thinking that documentation will slow down the process)
Myth: Software engineering will make us create voluminous and unnecessary documentation and will
invariably slow us down.
Reality: Software engineering isn't about creating excessive documentation; it's about delivering a quality
product. Higher quality leads to reduced rework and faster delivery times.
Validating requirements
Validating requirements is the process of ensuring that the requirements are complete, consistent, and clear, and
that they align with the goals of the system. Each part of the requirements model is reviewed carefully to identify and
resolve any issues before moving forward in the development process.
Key Questions for Validation:
• Consistency with Objectives:
o Does each requirement align with the overall goals of the product or system?
• Appropriate Detail:
o Are the requirements at the right level of detail?
o Some requirements may include too much technical detail that isn’t needed at this stage.
• Necessity:
o Is the requirement truly needed, or is it an extra feature that doesn’t add significant value?
• Clarity and Boundaries:
o Are the requirements clear, well-defined, and free of ambiguity?
• Attribution:
o Is the source of each requirement documented (e.g., a specific person or group)?
• Conflict-Free:
o Do any requirements contradict or overlap with each other?
• Feasibility:
o Can each requirement be realistically implemented given the current technical environment and
constraints?
• Testability:
o Once implemented, can the requirement be tested to verify that it works as expected?
• Model Accuracy:
o Does the requirements model correctly represent the necessary information, functions, and behavior of
the system?
• Partitioning:
o Is the model divided into sections that progressively reveal more detailed information?
• Patterns:
o Have reusable requirements patterns been used?
o Are these patterns validated and aligned with customer needs?
Outcome:
The goal of these steps is to ensure that the requirements model:
• Reflects stakeholder needs accurately.
• Provides a reliable foundation for the design phase.
By asking and addressing these questions, you can reduce errors, avoid rework later, and ensure a smoother
development process.
Key Steps in Establishing the Groundwork for a Successful Software Engineering Project
1. Identifying Stakeholders
Sommerville and Sawyer define a stakeholder as “anyone who benefits in a direct or indirect way from the
system which is being developed.” Stakeholders may include business operations managers, product
managers, marketing personnel, internal and external customers, end users, consultants, product engineers,
software engineers, and support and maintenance engineers.
• Each stakeholder has a different view of the system, benefits differently from its success, and faces
different risks in case of failure.
• At inception, create a list of people who will contribute input as requirements are elicited. This list will
grow as stakeholders are contacted.
2. Recognizing Multiple Viewpoints
o Requirements will be explored from multiple perspectives, such as:
▪ Marketing focusing on marketable functions and features.
▪ Business managers interested in budgets and timelines.
▪ End users preferring ease of use and familiarity.
▪ Engineers concerned with infrastructure and maintainability.
o Stakeholder information (including inconsistent and conflicting requirements) should be categorized to
allow decision-makers to choose an internally consistent set of requirements.
3. Working Toward Collaboration
• Stakeholders may have conflicting opinions about requirements.
• The requirements engineer identifies commonalities and resolves conflicts or inconsistencies.
• A strong project champion (e.g., a business manager or senior technologist) may make final decisions
about requirements.
4. Asking the First Questions
Questions at project inception should be context-free and fall into three categories:
• Questions about stakeholders, goals, and benefits:
▪ Who is behind the request for this work?
▪ Who will use the solution?
▪ What will be the economic benefit of a successful solution?
• Questions to understand the problem and solution environment:
▪ How would you characterize “good” output from the solution?
▪ What problem(s) will the solution address?
▪ Will performance issues or constraints affect the solution approach?
• Meta-questions to ensure effective communication:
▪ Are you the right person to answer these questions?
▪ Are my questions relevant?
▪ Should I be asking anything else?
These steps help “break the ice,” initiate essential communication, and prepare for more detailed elicitation and
specification.
Requirements Engineering
Requirements engineering is the structured process of understanding, defining, and managing the requirements for a
software system. It builds a bridge between the initial customer needs and the design and construction of the
software. The process involves the following tasks:
1. Inception
o Projects begin with a business need or an opportunity in a new market or service.
o Stakeholders define a business case, conduct feasibility analysis, and describe the project scope.
o The focus is on establishing a basic understanding of the problem, the desired solution, and the
stakeholders involved.
2. Elicitation
o The objective is to gather requirements by understanding customer and user objectives.
o Challenges include problems of scope (ill-defined system boundaries), understanding (stakeholders'
incomplete knowledge or communication difficulties), and volatility (changing requirements over time).
o Requirements gathering must be approached in an organized manner to address these issues.
3. Elaboration
o Information from inception and elicitation is refined to create a detailed requirements model.
o User scenarios drive the identification of analysis classes, their attributes, and required services.
o Relationships and collaborations between classes are identified, often supported by supplementary
diagrams.
4. Negotiation
o Conflicts among requirements, often due to limited resources or differing stakeholder priorities, are
reconciled.
o Stakeholders rank requirements, and iterative discussions prioritize them based on cost, risk, and
importance.
o The goal is a compromise that provides satisfaction to all parties.
5. Specification
o Requirements are documented in various formats, such as written documents, graphical models,
mathematical models, usage scenarios, or prototypes.
o For large systems, a combination of natural language descriptions and graphical models is used, while
smaller systems may rely solely on scenarios.
o Flexibility is important, but consistency in presentation can enhance understanding.
6. Validation
o Ensures requirements are unambiguous, consistent, complete, and aligned with standards.
o The primary mechanism is technical reviews involving software engineers, customers, users, and other
stakeholders.
o The review identifies errors, clarifies ambiguities, and resolves inconsistencies or conflicts.
7. Requirements Management
o As requirements change throughout the system's lifecycle, this task helps the team identify, control, and
track these changes.
o Activities align with software configuration management practices to ensure consistency and traceability.
Requirements engineering provides a structured approach to understanding customer needs, analyzing feasibility,
specifying solutions, and managing changes, creating a strong foundation for successful software development.
Summary:
In this example, the restaurant owner and the app developers go through the requirements engineering process to
make sure they build an app that meets customer needs and can evolve over time. The process includes:
• Inception: Clarifying the business need.
• Elicitation: Gathering input from users and stakeholders.
• Elaboration: Creating a detailed plan and design.
• Negotiation: Resolving conflicts and prioritizing features.
• Specification: Writing down the requirements clearly.
• Validation: Ensuring the requirements are correct and complete.
• Requirements Management: Handling changes as the project moves forward.
This structured approach helps avoid confusion, ensures the right features are built, and makes sure the app is
successfully delivered to meet everyone’s expectations.
Camera surveillance via Internet – display camera views function (Activity and Swimlane diagram)
Activity Diagram
The activity diagram illustrates the process flow for accessing and viewing camera surveillance via the Internet. It
follows the steps below:
1. Enter Password and User ID:
o The user begins by entering their user ID and password credentials.
2. Validation of Credentials:
o If the entered user ID and password are valid, the system proceeds to the next step.
o If the credentials are invalid, the system prompts the user for reentry. If the user exhausts all attempts,
access is denied.
3. Selecting Major Functionality:
o Once logged in, the user is presented with major functional options. In this case, the user selects the
"Surveillance" functionality.
4. Choosing a Camera:
o The user has two options to view cameras:
▪ Thumbnail Views: Select this to see snapshots from all cameras at once.
▪ Specific Camera Icon: Select a specific camera by choosing its icon from a displayed floor plan.
5. Viewing the Camera Output:
o After selecting a camera, the system displays a labeled window showing the camera's video output at a
frame rate of one frame per second.
6. Prompt for Another View:
o Once the user views the selected camera feed, they are prompted if they want to view another camera. If
yes, the process loops back to camera selection.
o If the user opts not to view another camera, the function exits.
Swimlane Diagram
The swimlane diagram depicts the same functionality as the activity diagram but organizes the process flow into
distinct lanes that represent different actors or components involved in the system. These lanes clarify the
responsibilities of each entity—Homeowner, Camera, and Interface—in the process.
Swimlanes and Process Flow
1. Homeowner:
o The homeowner initiates the process by entering their user ID and password in the system.
o After successful authentication, they select the desired major function (in this case, "Surveillance").
o They then decide between viewing all cameras as thumbnails or selecting a specific camera icon from the
house's floor plan.
o Once the desired camera is chosen, they view the camera output in a labeled window.
o Finally, they are prompted to either view another camera or exit the function.
2. Interface:
o The system validates the user ID and password:
▪ If the credentials are valid, it allows access to the major functions.
▪ If the credentials are invalid, the system prompts for reentry. If all input attempts are exhausted,
access is denied.
o The interface displays available major functions to the user.
o It also manages the interaction by presenting either the thumbnails of all cameras or the house's floor
plan with selectable camera icons.
o The interface handles the output, displaying the video feed in a labeled window and presenting prompts
for further actions (e.g., viewing another camera or exiting).
3. Camera:
o The camera component comes into play when a specific camera is selected. It generates the video
output, which is displayed in the labeled window.
Key Features of the Swimlane Diagram
• Role-based Responsibilities: The swimlanes clearly delineate the roles of the homeowner (user interactions),
interface (system validation, interaction management), and camera (data generation).
• Sequential Flow: The flow of actions from the homeowner to the system and back ensures clarity in the
interaction between user actions and system responses.
• Decision Points: The diagram incorporates decision points for validation (valid/invalid credentials), viewing
options (thumbnails or specific camera), and continuation (view another camera or exit).
MODULE - 3
Agile Process and its principles
An Agile Process is a software development approach designed to handle unpredictability in project requirements,
customer priorities, and technical needs. It emphasizes adaptability and collaboration, enabling teams to respond to
changes effectively while maintaining progress.
Agile processes acknowledge the following challenges in software projects:
1. It is hard to predict which software requirements will stay the same and which will change. Customer
priorities also evolve during the project.
2. Design and construction activities are often interwoven and should be done together to validate the design as
it is created.
3. Planning for analysis, design, construction, and testing is less predictable than desired.
To address these challenges, agile processes focus on adaptability. However, adapting without progressing is
unproductive, so agile development uses incremental adaptation—delivering small, executable portions of the
software (prototypes or operational parts) within short timeframes.
This approach ensures regular feedback from customers, allowing teams to refine the software to meet evolving
requirements. Through frequent deliveries and iterations, agile methods enable continuous evaluation,
improvement, and alignment with customer needs.
The Agile Alliance has outlined 12 principles for achieving agility:
1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
2. Welcome changing requirements, even late in development. Agile processes harness change for the
customer’s competitive advantage.
3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the
shorter timescale.
4. Business people and developers must work together daily throughout the project.
5. Build projects around motivated individuals. Give them the environment and support they need, and trust
them to get the job done.
6. The most efficient and effective method of conveying information to and within a development team is face-
to-face conversation.
7. Working software is the primary measure of progress.
8. Agile processes promote sustainable development. The sponsors, developers, and users should be able to
maintain a constant pace indefinitely.
9. Continuous attention to technical excellence and good design enhances agility.
10. Simplicity—the art of maximizing the amount of work not done—is essential.
11. The best architectures, requirements, and designs emerge from self–organizing teams.
12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior
accordingly.
The Extreme Programming Process
Extreme Programming (XP) is one of the most widely used agile software development approaches. While the ideas
and methods associated with XP emerged in the late 1980s, the seminal work on XP was written by Kent Beck in the
1990s. A variant of XP, called Industrial XP (IXP), has been developed for large organizations, refining XP to better suit
the needs of such environments.
XP Values
1. Communication
o Effective communication is essential in XP. To ensure that developers and stakeholders (e.g., customers) are
aligned, XP promotes close, informal (verbal) collaboration.
o A key communication tool in XP is the use of metaphors. In this context, a metaphor is a simple, shared
story that everyone—customers, programmers, and managers—can use to understand how the system
works. This helps ensure everyone is on the same page regarding the system’s design and functionality.
o XP also emphasizes continuous feedback over extensive documentation as a means of communication.
2. Simplicity
o In XP, the focus is on designing for immediate needs rather than anticipating future requirements. The
goal is to create the simplest design that can be easily implemented.
o If future needs arise, the design can be refactored later. The emphasis on simplicity helps keep the
codebase clean and manageable, reducing the complexity of the system and avoiding unnecessary
features that may never be needed.
3. Feedback
o XP encourages continuous feedback from multiple sources:
o The software itself: Feedback is gathered through testing (unit tests for code functionality) to
ensure the software behaves as expected.
o The customer: Feedback is collected from the customer on delivered increments, using user stories
or use cases as the basis for acceptance tests. This helps gauge the software’s alignment with
customer needs and expectations.
o The development team: Feedback is provided by team members to each other to improve the
overall software quality and team collaboration.
o Regular feedback helps the team make adjustments early, ensuring the software stays on track and
aligned with customer needs.
4. Courage
o XP requires courage to stick to certain practices, even when faced with challenges. For example, there is
often pressure to design for future requirements. Many teams might argue that designing for tomorrow’s
needs will save time in the long run. However, XP advocates for designing only for today’s needs,
understanding that future requirements will likely change.
o By adhering to this principle, teams avoid the risk of overcomplicating the design and creating
unnecessary code that may never be used. This courage to stick to the immediate needs allows for
flexibility and adaptability as requirements evolve.
5. Respect
o Respect is integral to the XP process. It fosters a positive environment within the team and between
stakeholders. Respect is developed through the team's interactions, such as giving constructive feedback
and acknowledging each other's contributions.
o As the team successfully delivers software increments and sees the value of their collaboration, mutual
respect grows, which strengthens the process and team cohesion.
XP Process
Extreme Programming (XP) follows an object-oriented approach and organizes development into four key activities:
planning, design, coding, and testing. Here’s a summary of each activity:
• Planning: The planning phase begins with listening to gather requirements and create "user stories" that
describe software features. Each story is assigned a business value and estimated cost (in development
weeks). If a story is too large, it’s split into smaller ones. The customer and developers prioritize stories for
the next release, focusing on value, risk, or immediate implementation. After each release, the XP team
computes project velocity to guide future estimations. Customers can modify stories throughout the project.
• Design: XP prioritizes simplicity in design. The design is minimal, supporting only what’s necessary for the
current stories. CRC (Class-Responsibility-Collaborator) cards help organize the object-oriented classes
relevant to the release. If a design issue arises, an operational prototype (spike solution) is created to validate
the design. Refactoring plays a key role in improving internal code structure without altering external
behavior. Design is iterative and evolves as the code is written.
• Coding: Before coding, unit tests are developed for each story to guide the implementation. Coding is done
using pair programming, where two developers work together at one workstation—one focuses on coding,
while the other ensures adherence to standards and tests. Code is integrated regularly, often daily, to avoid
compatibility issues.
• Testing: Unit tests are created before coding begins, and they are automated for continuous regression
testing. The entire system undergoes daily integration and validation testing, providing early feedback on
progress and issues. Customer-defined acceptance tests verify that the software meets the required
functionality.
• Social Tools: These tools aid in team-building activities, starting from the hiring stage. For example, a
prospective team member might pair program with an existing member to assess their compatibility and
skills immediately.
• Collaborative and Communication Tools: Generally low-tech, these tools support active and passive
communication among team members. Examples include physical tools like whiteboards, sticky notes, and
poster sheets for team interaction, as well as information radiators (e.g., flat panel displays) that passively
show project statuses.
• Project Management Tools: Agile teams use tools that de-emphasize traditional Gantt charts and instead
employ earned value charts, test progress graphs, and other visual aids that track development and testing
progress effectively.
• Environment Optimization Tools: Tools that improve team culture and working environments are crucial.
Examples include optimized meeting spaces, collocated teams, and devices like electronic whiteboards to
enhance collaboration.
• Process Enhancement Tools: Tools that promote core Agile practices like pair programming and time-boxing
are integral to maintaining agility and efficiency in development processes.
In essence, tools in Agile are not limited to technology; they include any mechanisms that facilitate teamwork,
enhance productivity, and improve the quality of the final product.
Testing Principles
1. Trace to Requirements:
a. All tests should be designed to ensure software meets customer requirements.
2. Plan Early:
a. Begin planning tests as soon as the requirements model is completed.
b. Design detailed test cases after solidifying the design model.
3. Pareto Principle:
a. Focus on the critical 20% of components that likely contain 80% of the errors.
4. Progressive Testing:
a. Start testing with small, individual components and gradually test larger integrated systems.
5. Exhaustive Testing is Impossible:
a. Aim for adequate path coverage rather than attempting every possible path combination.
v. Deployment Principles
Overview of Deployment Activities
Deployment involves delivery, support, and feedback. It is an ongoing process due to the incremental nature of
modern software development models. Each deployment provides operational increments, ensuring iterative
refinement and responsiveness to user needs.
1. Manage Customer Expectations:
a. Clearly communicate what will be delivered in each increment.
b. Avoid overpromising or underdelivering, as this leads to dissatisfaction and morale issues.
c. Align deliverables with customer expectations through careful communication.
2. Assemble and Test a Complete Delivery Package:
a. Include executable software, support files, documentation, and installation scripts in the delivery
package.
b. Conduct comprehensive beta testing with real users and configurations to ensure compatibility and
reliability.
3. Establish a Support Regime:
a. Plan and organize support in advance.
b. Provide accurate responses to user queries or issues through prepared materials and structured record-
keeping.
c. Analyze support trends to improve future increments.
4. Provide Instructional Materials:
a. Deliver user-friendly training aids and troubleshooting guides.
b. Include documentation on updates and changes in new increments for clarity.
5. Fix Bugs Before Delivery:
a. Ensure software is high quality by addressing bugs before release.
b. Avoid relying on post-delivery fixes, as poor quality erodes user trust and satisfaction.
Core Principles
Software engineering knowledge encompasses the principles, methods, tools, and practices used to design, develop,
test, and maintain high
Principles That Guide Process
1. Be agile: Emphasize simplicity, concise work products, and local decision-making, regardless of the process
model you choose.
2. Focus on quality at every step: Ensure that every process activity results in high-quality work products.
3. Be ready to adapt: Adapt your process approach as needed based on the project's constraints, people, and
problems.
4. Build an effective team: Create a self-organizing team built on mutual trust and respect.
5. Establish mechanisms for communication and coordination: Address management issues to prevent
information gaps and ensure successful collaboration.
6. Manage change: Implement processes to manage how changes are requested, assessed, approved, and
implemented.
7. Assess risk: Identify potential issues in software development and establish contingency plans.
8. Create work products that provide value for others: Produce work products that deliver clear, useful
information for the next stage in the process.
Principles That Guide Practice
1. Divide and conquer: Break down large problems into smaller, manageable concerns that can be developed
and validated independently.
2. Understand the use of abstraction: Use simplified representations of complex elements to communicate
meaning and gradually refine these models during analysis and design.
3. Strive for consistency: Maintain consistency in elements like design, user interfaces, and code to make
software easier to use and understand.
4. Focus on the transfer of information: Pay close attention to interfaces, ensuring that information transfer is
clear and accurate, minimizing errors or ambiguities.
5. Build software that exhibits effective modularity: Design software in modules that focus on one specific
aspect and ensure they interact simply with low coupling to other modules.
6. Look for patterns: Identify recurring problems in software development and use patterns to provide proven
solutions and create a shared understanding within the development community.
7. Represent the problem and its solution from different perspectives: Examine problems and solutions from
multiple viewpoints to gain deeper insight and uncover errors.
8. Remember that someone will maintain the software: Consider long-term maintenance when designing
software, ensuring it is easy to correct, adapt, and enhance over time.
SCUM
• Scrum is an agile software development method created by Jeff Sutherland in the 1990s, with further
development by Schwaber and Beedle.
• Principles align with the agile manifesto, guiding activities like requirements, analysis, design, evolution, and
delivery.
• Work tasks are organized into sprints, which are defined and adapted in real-time by the Scrum team.
• Backlog: A prioritized list of project requirements that provide business value and can be updated at any time.
• Sprints: Short-term, stable work units aimed at achieving backlog requirements within a predefined time-box
(typically 30 days).
• Scrum meetings: Daily 15-minute meetings where team members answer three key questions about their
progress, obstacles, and plans.
• A Scrum master leads the meetings, helping uncover problems and promoting a self-organizing team.
• Demos: Deliver software increments to customers for evaluation, with available functionality within the time-
box.
• Scrum assumes chaos and uses process patterns to work effectively in uncertain environments.
Crystal
• Crystal is a family of agile methods created by Alistair Cockburn and Jim Highsmith, focused on
"maneuverability" in software development.
• It treats software development as a cooperative game, aiming to deliver useful, working software and
prepare for the next project phase.
• The Crystal family offers different methodologies, each with common core elements but unique roles,
processes, work products, and practices tailored to specific project needs.
• Teams can select the most appropriate Crystal methodology based on their project type and environment.
What is Agility?
Agility is the ability to respond quickly and effectively to changes while maintaining focus on delivering value. In
software development, it refers to the capability of teams to adapt to evolving requirements, feedback, and
technological advancements, ensuring high-quality, customer-centric outcomes. Agility emphasizes flexibility,
iterative progress, and collaboration to meet the demands of dynamic environments.
1. Project Initiation
Definition
This is the foundational phase where the project’s feasibility, objectives, and scope are determined. It involves
conceptualizing the project and assessing its viability.
Key Activities
1. Concept Development: Identify the software’s characteristics, scope, constraints, and expected benefits.
2. Feasibility Study: Evaluate the technical and financial feasibility of the project.
3. Business Case Development: Create a business case outlining the benefits and justifications for undertaking
the project.
4. Charter and Team Formation: Prepare a project charter, appoint a project manager, and form the project
team.
5. W5HH Principle: Answer the following questions to define key project characteristics:
o Why is the software being built?
o What will be done?
o When will it be done?
o Who is responsible?
o Where are the resources located?
o How will it be done technically and managerially?
o How much effort or cost is required?
2. Project Planning
Definition
In this phase, detailed plans are developed to guide project execution. This includes timelines, budgets, resources,
and risk management strategies.
Key Activities
1. Define tasks, milestones, and deliverables.
2. Develop a project schedule with timelines and dependencies.
3. Allocate resources and estimate costs.
4. Create risk management and quality assurance plans.
5. Plan for communication and stakeholder engagement.
3. Project Execution
Definition
This phase involves implementing the project plan to achieve the project objectives. Resources are utilized, and
deliverables are created during this phase.
Key Activities
1. Coordinate team activities and manage workflows.
2. Ensure quality through testing and reviews.
3. Resolve conflicts and issues that arise during execution.
4. Communicate progress to stakeholders regularly.
4. Project Monitoring and Controlling
Definition
This phase ensures that the project stays on track by continuously monitoring progress and addressing deviations.
Key Activities
1. Track performance against the project plan.
2. Implement corrective measures for variances.
3. Update stakeholders about progress and changes.
4. Perform quality control to ensure deliverables meet requirements.
5. Project Closure
Definition
This is the final phase where the project is completed, and deliverables are handed over to the client or stakeholders.
It includes evaluating project performance and extracting lessons for future projects.
Key Activities
1. Finalize all project deliverables.
2. Conduct post-project evaluation and gather feedback.
3. Release project resources, including team members and equipment.
4. Document lessons learned and best practices.
Project Bidding (Within the Initiation Phase)
Definition
Project bidding is the process of inviting external vendors or contractors to propose solutions based on cost and
performance criteria. It is used when the project requires external expertise or services.
Types of Bidding Techniques
1. Request for Quotation (RFQ)
o Issued when the scope and requirements are clear.
o Example: A company purchasing specific IT hardware may issue an RFQ with detailed specifications.
2. Request for Proposal (RFP)
o Used when the organization understands the problem but needs vendors’ expertise for solutions.
o Example: A business looking to implement a CRM system may issue an RFP for vendor proposals.
3. Request for Information (RFI)
o Used to gather preliminary information about vendors' capabilities.
o Example: A government agency seeking to shortlist vendors for a new transportation system may issue
an RFI.
1. Feasibility Study
o Assesses if the project has a valid business case and is worth starting.
o Gathers information on requirements, costs, and benefits.
o Handles complexities in requirements elicitation and aligns with stakeholders' goals.
o May be a standalone project or part of a broader strategic planning exercise.
2. Planning
o Begins after a positive feasibility study outcome.
o For large projects, involves an outline plan for the whole project and detailed plans for the first stage.
o Later stages are planned incrementally as more information becomes available.
3. Project Execution
o Involves sub-phases such as design and implementation.
o Design focuses on decisions about product form (e.g., user interface and internal architecture).
o Planning specifies activities to create products and is influenced by design decisions.
o For instance, a product with five major components requires activities tailored to each component.
Risk Evaluation
Every project involves risks. Here, we focus on business risk, which relates to the potential for the project’s outcomes
to be unprofitable, distinct from project risks, which prevent the project from being completed.
Risk Identification and Ranking:
To evaluate risks, it's important to identify them and assess their impacts. One way to do this is by creating a project
risk matrix, where risks are ranked based on their importance and likelihood. For instance, some risks may be severe
but unlikely, while others are less severe but highly likely. This helps prioritize risks that are most important. A sample
risk matrix for an e-commerce project is shown, categorizing risks as high (H), medium (M), low (L), or exceedingly
unlikely (-).
The matrix helps evaluate projects by comparing risks, where projects with higher risks might be less favoured.
Risk and Net Present Value (NPV):
When evaluating risky projects, it’s common to apply a higher discount rate for calculating NPV. For example, a safer
project might have an additional 2% rate, while a riskier one may have 5%. This creates a consistent way to
incorporate risk into the decision-making process.
Cost-Benefit Analysis:
A more advanced method involves estimating the probability of different outcomes and their potential value. Instead
of using a single cash flow forecast, this approach considers multiple possible outcomes, each with a corresponding
probability. By summing the weighted costs or benefits, you get a clearer picture of the project’s value. This method
works well for large projects, like building highways, where certain variables (e.g., traffic volume) are uncertain.
However, this approach might not fully account for worst-case scenarios. It’s better suited for evaluating a portfolio
of projects, where profitable projects balance out the less successful ones.
Risk Profile Analysis:
To address concerns with cost-benefit averaging, sensitivity analysis can be used to understand how sensitive the
project’s profitability is to different factors. By changing key assumptions (e.g., cost estimates) and recalculating the
expected results, you can identify the most critical factors affecting the project. This allows you to manage or mitigate
risks more effectively.
Using Decision Trees:
Unlike previous methods, decision trees allow active decision-making. They help evaluate the potential outcomes of
different choices and the impact on future project profitability. For example, a company may be deciding when to
replace its sales system. The decision depends on market growth, which is uncertain. If the market grows, replacing
the system now could lead to a higher benefit, but if the market doesn't grow, it might cause a loss. By assigning
probabilities to these outcomes, a decision tree helps calculate the expected value of each choice, guiding the
company in making the most profitable decision.
In the example, the expected value of extending the system is £40,000, while replacing it now has an expected value
of £10,000. Therefore, the company should choose to extend the existing system.
Complexity High complexity for the cost, with many Less complexity for the cost, governed by
interdependent components. physical laws.
Nature of Intangible deliverables like code, Tangible deliverables like buildings, products,
Deliverables applications, and systems. or events.
Flexibility Highly flexible; requirements can evolve Less flexible; requirements are usually well-
during the development lifecycle. defined and fixed upfront.
Requirements Often ambiguous or incomplete; requires Typically well-defined and measurable
Definition iterative clarification and validation. before the project begins.
Development Iterative and incremental; Agile, Scrum, or Linear or sequential; follows fixed phases like
Process Waterfall methods are common. planning, execution, and closure.
Measurement of Progress is harder to measure; depends on Progress is easily measurable (e.g.,
Progress completed functionality and quality. percentage of physical construction
completed).
Resource Relies heavily on skilled human resources Requires both skilled and unskilled labor,
Requirements (developers, designers, testers). along with physical resources and materials.
Risk and High due to intangible deliverables, evolving Moderate to low; risks are more predictable
Uncertainty requirements, and technology challenges. and based on physical constraints.
Quality Control Includes code reviews, testing, and Includes inspections, physical testing, or
debugging; heavily relies on automation adherence to standards like ISO.
tools.
Change Changes are frequent and expected; Changes are costly and disruptive; require
Management managed through version control and agile formal approvals and redesign efforts.
practices.
Customer Requires ongoing customer involvement for Limited customer involvement after initial
Involvement feedback and requirement adjustments. requirements are finalized.
Tools and Specialized tools like IDEs, CI/CD pipelines, Tools and machinery specific to the domain,
Techniques version control, and testing frameworks. such as construction equipment or event
software.
Cost Estimation Challenging; subject to variability due to Easier to estimate due to standardized
uncertain requirements and technology processes and materials.
changes.
Delivery Deadlines are flexible; scope adjustments Deadlines are stricter; often tied to external
Timeframe may extend timelines. events or physical constraints.
Lifecycle Ongoing maintenance and updates after Minimal post-delivery involvement except
delivery (e.g., bug fixes, feature for repairs or warranties.
enhancements).
3. Dromey’s Model
Dromey said software quality depends on four big ideas:
• Correctness: Does it do what it’s supposed to?
• Internal Characteristics: How well-built is it on the inside (e.g., is it simple and clean)?
• Contextual Characteristics: Does it fit well in the environment it’s used in?
• Descriptive Properties: Are the instructions and design documents clear?
These ideas are broken down into smaller, measurable features.
4. Boehm’s Model
Boehm focused on how useful software is to users and developers. He looked at three main things:
• As-Is Utility: Is it easy, reliable, and efficient to use?
• Maintainability: Can it be easily understood, updated, or fixed?
• Portability: How hard is it to use on different systems?
Boehm’s model digs deeper into these areas, focusing on how maintainable the software is.
Differentiate between Product and Process Quality Management.
Aspect Product Quality Management Process Quality Management
Definition Focuses on ensuring the final deliverable Focuses on ensuring the processes used to
(product) meets quality standards and user create the product are efficient and adhere to
expectations. quality standards.
Objective Deliver a high-quality product that satisfies Establish and maintain efficient, consistent, and
customer requirements. repeatable processes.
Scope Concerned with the outcomes or results of Concerned with the methods and workflows
the process (the product). used to produce the outcomes.
Measurement Quality is measured through functional Quality is measured through compliance with
Criteria testing, usability, performance, and process standards, efficiency, and defect
reliability of the product. prevention.
Techniques Used - Testing (unit, integration, system, - Process audits and evaluations
acceptance) - Statistical process control (SPC)
- Customer feedback - Process performance metrics (e.g., cycle time,
- Inspections and audits defect rate)
Standards Adheres to product-specific standards (e.g., Adheres to process standards (e.g., ISO 9001
ISO/IEC 25010 for software product quality). for quality management systems, CMMI for
software processes).
Focus Area The end deliverable and its features. The methods and procedures used to produce
the deliverable.
Responsibility Primarily the responsibility of product Primarily the responsibility of process
teams, testers, and quality assurance managers, process engineers, and quality
specialists. control teams.
Impact on Directly impacts customer satisfaction and Indirectly impacts product quality by improving
Quality market acceptance of the product. the efficiency and reliability of production
processes.
Examples - Ensuring software meets performance - Standardizing coding practices.
benchmarks. - Establishing a consistent testing protocol.
- Validating a product against customer
requirements.