MODULE 3
MODULE 3
Agility in software engineering refers to being quick and flexible in responding to changes
during the development process.
Traditionally, the cost of making changes in software projects increases rapidly as the project
progresses. This is because:
Advocates of agile methods argue that agility helps reduce the steep rise in change costs by
introducing practices that support flexibility:
1. Incremental Delivery: Delivering software in small, usable portions allows changes to
be addressed incrementally without overhauling the entire system.
2. Continuous Testing: Frequent testing ensures that issues are identified and
addressed early, preventing costly errors later.
5. Incremental Delivery: Delivering working software incrementally allows for early use
and evaluation by the customer.
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.
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.
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 behaviour accordingly.
1. Competence: Team members should have the necessary talent, skills, and knowledge
about the process. Training can help improve these skills.
2. Common Focus: Everyone on the team, despite their different roles, should work
towards the shared goal of delivering functional software on time and making
necessary adjustments along the way.
3. Collaboration: Team members must work together and communicate effectively with
each other and stakeholders to share, create, and use information to deliver value.
4. Decision-Making Ability: The team should have the freedom to make its own
decisions about technical and project matters, giving them control over their work.
5. Fuzzy Problem-Solving Ability: The team must handle uncertainty and adapt to
changing requirements, even if today’s problem isn’t tomorrow’s. Lessons learned
help in the long run.
6. Mutual Trust and Respect: The team should function as a cohesive unit, trusting and
respecting each other to the point where their combined efforts are greater than
what they could achieve individually.
3.4.1 XP Values
1. Communication:
XP fosters clear and constant communication between developers and stakeholders.
This includes:
3. Feedback:
Feedback in XP comes from multiple sources:
o Software: Regular testing (especially unit tests) ensures the software works as
intended.
o Designing only for today and being ready to refactor later if requirements
change.
5. Respect:
By following these values, XP fosters mutual respect among team members and
stakeholders. Successful deliveries reinforce respect for both the process and the
team.
Prioritization: The customer assigns a priority to each story. The team estimates how
long each story will take. If a story takes more than three weeks, it is split into smaller
stories.
Release Planning: Stories are grouped into releases, based on priority and risk. New
stories can be added or changed at any time during development.
Project Velocity: After the first release, the number of stories completed is measured
(velocity). This helps estimate future release dates and adjust for overcommitments.
2. Design:
Simplicity (KIS - Keep It Simple): Focus on designing only for immediate needs.
Complex features are avoided unless absolutely necessary.
CRC Cards: These are used to organize and identify object-oriented classes relevant
to the current software increment.
3. Coding:
Unit Tests First: Before coding, unit tests are written for each user story. This helps
the developers focus on passing the test and implementing the required
functionality.
Pair Programming: Two developers work together at the same workstation. One
writes the code, while the other reviews and ensures quality. This improves problem-
solving and quality assurance in real-time.
Continuous Integration: The code is integrated and tested frequently, often daily, to
ensure everything works together and to catch errors early.
4. Testing:
Automated Unit Tests: Unit tests are automated to allow for quick and repeated
testing. This helps catch bugs as the code is updated.
Acceptance Tests: The customer specifies tests that focus on overall system
functionality. These tests are reviewed by the customer to confirm that the software
meets their requirements.
3.4.3 Industrial XP
1. Readiness Assessment:
The team has the right stakeholders with necessary skills and training.
The organization has a quality program and a culture that supports continuous
improvement.
The project community is well-populated with key individuals and stakeholders.
2. Project Community:
In traditional XP, the focus is on the development team. In IXP, the "team" expands to a
"community" that includes:
Peripheral roles like legal staff, quality auditors, and others who support the project.
The roles of these community members must be defined clearly, and effective
communication channels between them must be established.
3. Project Chartering:
How the project aligns with and supports the organization's goals.
4. Test-Driven Management:
In IXP, progress is tracked using measurable criteria. The team defines "destinations" (goals)
and determines how to measure if these goals have been achieved.
5. Retrospectives:
After delivering a software increment, IXP teams conduct a retrospective. This review looks
at issues, events, and lessons learned during the software release. The goal is to reflect and
improve the process for future increments.
6. Continuous Learning:
IXP emphasizes continuous improvement. Team members are encouraged to learn new
methods and techniques that enhance the quality of the product.
Extreme Programming (XP) has both supporters and critics, with key issues raised as follows:
1. Requirements Volatility:
Criticism: Informal customer requests can lead to constant scope changes and
rework.
Criticism: Multiple customers with different needs can overwhelm the team.
3. Informal Requirements:
Criticism: Relying on user stories and acceptance tests may miss errors.
Criticism: XP’s minimal design approach may not work for complex systems.
o The project begins with initial planning, which includes understanding the
customer’s mission, constraints (like deadlines), and basic requirements.
o An adaptive cycle plan is created based on this information, which defines the
software increments (releases) required.
o The plan is flexible and reviewed after each cycle to adjust for any changes in
the project’s reality.
2. Collaboration:
o Team members must trust each other to provide constructive feedback, assist
each other, and take ownership of their roles.
3. Learning:
o Learning is a key aspect throughout the process. ASD teams focus on learning
both individually and as a team.
o Learning is achieved through methods like focus groups, technical reviews,
and postmortems.
3.5.2 Scrum
Scrum is an agile development method created by Jeff Sutherland and his team in the early
1990s. The method is named after a rugby term, symbolizing teamwork and collaboration.
Scrum activities are divided into cycles called sprints, which are short, time-boxed periods of
work.
1. Backlog:
2. Sprints:
o A sprint is a unit of work aimed at fulfilling a backlog requirement.
o Changes to the backlog are not allowed during the sprint, ensuring focus and
stability.
3. Scrum Meetings:
o Daily, short (15 minutes) meetings where each team member answers three
questions:
o The Scrum Master leads these meetings, helping to identify and resolve
problems early.
4. Demos:
o The demo may not contain all planned features but will focus on those that
were completed within the sprint.
DSDM follows the 80/20 rule, meaning 80% of an application can be delivered in 20% of the
time it would take to build the full application. More details can be added later as
requirements evolve.
DSDM is flexible and can be combined with other agile methods like Extreme Programming
(XP) for better results.
1. Feasibility Study:
o Establishes the basic business needs and checks whether the project is a good
fit for DSDM.
2. Business Study:
o Revisits the prototypes from the previous phase to ensure they are
technically sound and meet business needs.
5. Implementation:
o Deploys the latest version of the software into the real-world environment.
Changes may still be requested after deployment, leading back to the
Functional Model Iteration.
3.5.4 Crystal
The Crystal family of agile methods was created by Alistair Cockburn and Jim Highsmith to
emphasize manoeuvrability in software development. Their goal is to approach
development as a cooperative, resource-limited process that focuses on delivering useful,
working software and setting the foundation for the next phase of development.
The Crystal family includes different agile methodologies, each designed to suit different
project types and environments. These methodologies share core elements such as:
Roles: Defines the key roles in a team.
Work products: The outputs or artifacts produced during the development process.
The key idea behind Crystal is to let agile teams choose the method that best suits their
project’s size, complexity, and environment.
Feature Driven Development (FDD) is an agile process model created by Peter Coad and
extended by Stephen Palmer and John Felsing. It is designed for object-oriented software
engineering, particularly for moderately sized to large projects.
Feature Definition:
For example:
FDD Process:
FDD includes five main framework activities, called processes, for delivering software
incrementally
FDD defines six milestones during the design and implementation of a feature:
2. Build Quality In: Ensure the software is high quality from the start, not just tested at
the end.
3. Create Knowledge: Focus on continuous learning to improve the product and adapt
to changes.
5. Deliver Fast: Release software quickly to get feedback sooner and improve faster.
6. Respect People: Trust and empower team members, giving them the resources they
need to succeed.
7. Optimize the Whole: Improve the whole process, not just individual parts, to get the
best results.
Agile Modeling (AM) offers a simpler, more flexible approach for building large, complex
software systems. It focuses on modeling software in a lightweight, practical way that’s
effective for agile projects. The core principles of Agile Modeling:
1. Model with a Purpose: Before creating a model, have a clear goal in mind, like
communicating information or understanding a part of the software.
2. Use Multiple Models: Different models can be used to represent different aspects of
the system. Only use the ones that are valuable and relevant to the project.
3. Travel Light: Keep only the models that provide long-term value. Avoid unnecessary
models to prevent slowing down the team with maintenance.
5. Know Your Models and Tools: Understand the strengths and limitations of the
models and tools you’re using to create them.
6. Adapt Locally: The modeling approach should be tailored to the specific needs of the
agile team and project.
The Agile Unified Process (AUP) is a software development approach that combines a
structured, linear flow with agile, iterative development within each phase.
1. Serial in the Large, Iterative in the Small: AUP follows a classic sequence of phases
(inception, elaboration, construction, and transition) to visualize the overall project
flow. However, within each phase, the team works in iterative cycles, developing and
improving software incrementally.
o Modeling: The team creates UML models to represent the business and
problem domains. These models should be "just barely good enough" to
move forward, rather than perfect.
o Testing: The team designs and runs tests to find bugs and verify the code
works as intended.
Social Tools: These tools help in team formation and collaboration. For example,
having a potential team member spend time pair programming with an existing team
member can help assess their fit within the team.
Collaborative Tools: These are low-tech and physical tools, like whiteboards, sticky
notes, and index cards, that help organize information and coordinate work. Tools
like these allow developers to actively collaborate and communicate.
Communication Tools: These tools can be both active (e.g., pair programming) and
passive (e.g., information radiators like a display showing project progress).
Project Management Tools: Instead of traditional tools like Gantt charts, agile teams
use tools like earned value charts or test tracking graphs to measure progress.
Environment-Optimizing Tools: These tools enhance the working environment (e.g.,
efficient meeting spaces, collocated teams) and improve team culture and processes
(e.g., pair programming, time-boxing).
Testing Principles:
1. Trace tests to customer requirements: All tests should be linked to the customer's
requirements to focus on the most critical defects.
2. Plan tests ahead of time: Plan and design tests well before starting to code, based
on requirements and design models.
3. Apply the Pareto principle: 80% of errors come from 20% of components. Identify
and test these critical components thoroughly.
4. Test from small to large: Begin testing individual components, then integrate them
and test larger systems as development progresses.
5. Exhaustive testing is not possible: Due to the vast number of possible path
permutations, exhaustive testing is impractical. Focus on covering all critical paths
and conditions.
4.3.5 Deployment Principles
Avoid delivering software with known bugs, even under time pressure.