Module-3AGILE
Module-3AGILE
WHAT IS AGILITY?
Agility refers to the ability of a software team to quickly and
effectively respond to changes.
Software engineers need to be agile to accommodate rapid changes in
various aspects of the project.
Agility also includes adopting the philosophy of the Agile Manifesto,
which emphasizes:
Improved communication among team members, technologists,
business people, and managers.
Rapid delivery of functional software.
WHAT IS AGILITY?
Agility can be incorporated into any software process by:
Allowing project teams to adapt and streamline tasks.
Conducting planning that accommodates the fluid nature of
agile development.
Eliminating non-essential work products and keeping necessary
ones lean.
Emphasizing incremental delivery to get working software to
customers quickly, suited to the product type and operational
environment. (These points highlight the essence of agility in software
engineering as described
by Ivar Jacobson)
AGILITY AND THE COST OF
CHANGE
The conventional wisdom in software development is that the cost
of change increases nonlinearly as a project progresses (Figure).
It is relatively easy to accommodate a change when a software
team is gathering requirements (early in a project).
A usage scenario might have to be modified, a list of functions
may be extended, or a written specification can be edited.
The costs of doing this work are minimal, and the time required
will not adversely affect the outcome of the project.
Proponents of agility argue that a well-designed agile process
“flattens” the cost of change curve (Figure), allowing a software
team to accommodate changes late in a software project without
dramatic cost and time impact.
WHAT IS AN AGILE
PROCESS?
Any agile software process is characterized in a manner that addresses a
number of key assumptions about the majority of software projects:
1. It is difficult to predict in advance which software requirements will persist
and which will change.
2.It is equally difficult to predict how customer priorities will change as the
project proceeds.
3. For many types of software, design and construction are interleaved. That is,
both activities should be performed in tandem so that design models are proven
as they are created.
4.It is difficult to predict how much design is necessary before construction is
used to prove the design.
5. Analysis, design, construction, and testing are not as predictable (from a
planning point of view) as we might like.
1.AGILITY PRINCIPLES
The Agile Alliance defines 12 agility principles for those who want to
achieve 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
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
2.THE POLITICS OF AGILE
DEVELOPMENT
There is considerable debate about the benefits and applicability of agile
software development versus traditional software engineering processes.
Key points include:
1. Pro-Agility View: Agilists view traditional methodologies as overly rigid
and
documentation-heavy, hindering the delivery of working systems.
2. Traditional View: Traditionalists view agile methodologies as undisciplined
and risky, especially when scaling up to enterprise-wide software.
3. Rational Thought vs. Beliefs: The debate often risks becoming a
"religious war," with beliefs rather than facts guiding decision-making.
4. Balanced Approach: There is value in considering the best aspects of
both agile and traditional approaches rather than denigrating either.
3 HUMAN FACTORS
Proponents of agile software development take great pains to
emphasize the importance of “people factors.”
Cockburn and Highsmith state, “Agile development focuses on the
talents and skills of individuals, molding the process to specific
people and teams.”
The key point in this statement is that the process molds to the
needs of the people and team, not the other way around.
Competence. In an agile development context, “competence”
encompasses innate talent, specific software-related skills, and
overall knowledge of the process that the team has chosen to
apply.
Skill and knowledge of process can and should be taught to all
people who serve as agile team member.
Common focus. Although members of the agile team may perform
different tasks and bring different skills to the project, all should be
focused on one goal—to deliver a working software increment to
the customer within the time promised.
To achieve this goal, the team will also focus on continual
adaptations (small and large) that will make the process fit the
needs of the team.
Collaboration. Software engineering (regardless of process) is
about assessing, analyzing, and using information that is
communicated to the software team;
creating information that will help all stakeholders understand the
work of the team; and building information (computer software and
relevant databases) that provides business value for the customer.
To accomplish these tasks, team members must collaborate—with
one another and all other stakeholders.
Decision-making ability. Any good software team (including agile
teams) must be allowed the freedom to control its own destiny. This
implies that the team is given autonomy—decision-making
authority for both technical and project issues.
Fuzzy problem-solving ability. Software managers must
recognize that the agile team will continually have to deal with
ambiguity and will continually be buffeted by change.
In some cases, the team must accept the fact that the problem
they are solving today may not be the problem that needs to be
solved tomorrow.
Mutual trust and respect. The agile team must become what
DeMarco and Lister call a “jelled” team.
A jelled team exhibits the trust and respect that are necessary to
make them “so strongly knit that the whole is greater than the sum
of the parts.”
Self-organization. In the context of agile development, self-
organization implies three things:
(1) the agile team organizes itself for the work to be done,
2) the team organizes the process to best accommodate its local
environment,
(3) the team organizes the work schedule to best achieve delivery
of the software increment.
Self-organization has a number of technical benefits, but more
importantly, it serves to improve collaboration and boost team
morale.
EXTREME PROGRAMMING
(XP)
oThe most widely used approach to agile software development.
oDeveloped by Kent Beck, XP focuses on improving software quality
and
responsiveness to changing customer requirements.
oIXP(industrial XP) refines XP and targets the agile process
specifically for use within large organizations.
1. XP Values
Beck defines a set of five values that establish a foundation for all
work performed as part of XP—communication, simplicity,
feedback, courage, and respect.
Each of these values is used as a driver for specific XP activities,
COMMUNICATION
To achieve simplicity,
1.XP restricts developers to design only for immediate needs, rather than consider
future needs.
2.If the design must be improved, it can be refactored at a later time.
Feedback is derived from three sources: the implemented software itself, the
customer, and other software team members.
1. XP makes use of the unit test as its primary testing tactic. As each class is
developed, the team develops a unit test to exercise each operation according
to its specified functionality.
2. As an increment is delivered to a customer, the user stories or use cases that
are implemented by the increment are used as a basis for acceptance tests.
3. Finally, as new requirements are derived as part of iterative planning, the team
provides the customer with rapid feedback regarding cost and schedule impact.
COURAGE&RESPECT
After stories are developed and preliminary design work is done, the
team does not move to code, but rather develops a series of unit
tests that will exercise each of the stories that is to be included in
the current release.
Once the unit test has been created, the developer is better able to
focus on what must be implemented to pass the test.
Once the code is complete, it can be unit-tested immediately,
thereby providing instantaneous feedback to the developers.
A key concept during the coding activity is pair programming.
CODING
As pair programmers complete their work, the code they develop is
integrated with the work of others.
In some cases this is performed on a daily basis by an integration
team.
In other cases, the pair programmers have integration
responsibility.
This “continuous integration” strategy helps to avoid compatibility
and interfacing problems and provides a “smoke testing”
environment that helps to uncover errors early.
TESTING