Agile Software Development
Agile Software Development
Plan-driven development
A plan-driven approach to software engineering is based around separate development
stages with the outputs to be produced at each of these stages planned in advance. Not
necessarily waterfall model: plan-driven, incremental development is possible. Iteration
occurs within activities.
Agile development
Specification, design, implementation and testing are inter-leaved and the outputs from
the development process are decided through a process of negotiation during the
software development process.
Most projects include elements of plan-driven and agile processes. Deciding on the balance
depends on many technical, human, and organizational issues.
Agile methods
Dissatisfaction with the overheads involved in software design methods of the 1980s and 1990s
led to the creation of agile methods. These methods:
The aim of agile methods is to reduce overheads in the software process (e.g. by limiting
documentation) and to be able to respond quickly to changing requirements without excessive
rework.
Manifesto for Agile Software Development:
We are uncovering better ways of developing software by doing it and helping others do it.
Through this work we have come to value:
That is, while there is value in the items on the right, we value the items on the left more.
The principles of agile methods:
Customer involvement
Customers should be closely involved throughout the development process. Their role is
provide and prioritize new system requirements and to evaluate the iterations of the
system.
Incremental delivery
The software is developed in increments with the customer specifying the requirements
to be included in each increment.
People not process
The skills of the development team should be recognized and exploited. Team members
should be left to develop their own ways of working without prescriptive processes.
Embrace change
Expect the system requirements to change and so design the system to accommodate
these changes.
Maintain simplicity
Focus on simplicity in both the software being developed and in the development process.
Wherever possible, actively work to eliminate complexity from the system.
Agile method applicability:
Product development where a software company is developing a small or medium-
sized product.
Custom system development within an organization, where there is a
clear commitment from the customer to become involved in the development
process and where there are not a lot of external rules and regulations that affect the
software.
Because of their focus on small, tightly-integrated teams, there are problems in
scaling agile methods to large systems.
It can be difficult to keep the interest of customers who are involved in the process.
Team members may be unsuited to the intense involvement that characterizes agile
methods.
Prioritizing changes can be difficult where there are multiple stakeholders.
Maintaining simplicity requires extra work.
Contracts may be a problem as with other approaches to iterative development.
Extreme programming
Perhaps the best-known and a very influential agile method, Extreme Programming (XP) takes an
'extreme' approach to iterative development:
Sprints are fixed length, normally 2-4 weeks. They correspond to the development of a release of
the system in XP. The starting point for planning is the product backlog, which is the list of
work to be done on the project. The selection phase involves all of the project team who work
with the customer (product owner) to select the features and functionality to be developed
during the sprint. Once these are agreed, the team organize themselves to develop the software.
During this stage the team is relatively isolated from the product owner and the organization,
with all communications channelled through the ScrumMaster. The role of the ScrumMaster is
to protect the development team from external distractions. At the end of the sprint the work
done is reviewed and presented to stakeholders (including the product owner). Velocity is
calculated during the sprint review; it provides an estimate of how much product backlog the
team can cover in a single sprint. Understanding the team's velocity helps them estimate what
can be covered in a sprint and provides a basis for measuring and improving performance. The
next sprint cycle then begins.
The ScrumMaster is a facilitator who arranges short daily meetings (daily scrums), tracks the
backlog of work to be done, records decisions, measures progress against the backlog and
communicates with the product owner and management outside of the team. The whole team
attends daily scrums where all team members share information, describe their progress since
the last meeting, problems that have arisen and what is planned for the following day.
Advantages of scrum include: