The Principles of Agile Methods

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 6

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:
Focus on the code rather than the design
Are based on an iterative approach to software development
Are intended to deliver working software quickly and evolve this quickly to meet
changing requirements.
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.

Agile manifesto

We are uncovering better ways of developing software by doing it and helping others do
it. Through this work we have come to value:
Individuals and interactions over processes and tools
Working software over comprehensive documentation.
Customer collaboration over contract negotiation
Responding to change over following a plan
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

Diagram

Agile method applicability

Product development where a software company is developing a small or medium-sized product


for sale.
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.

Problems with agile methods

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 characterises agile
methods.
Prioritising 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.

Agile methods and software maintenance

Most organizations spend more on maintaining existing software than they do on new
software development. So, if agile methods are to be successful, they have to support
maintenance as well as original development.
Two key issues:
Are systems that are developed using an agile approach maintainable, given the
emphasis in the development process of minimizing formal documentation?
Can agile methods be used effectively for evolving a system in response to
customer change requests?
Problems may arise if original development team cannot be maintained.

Plan-driven and agile 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.

Plan-driven and agile specification

Dia

Technical, human, organizational issues

Most projects include elements of plan-driven and agile processes. Deciding on the
balance depends on:
Is it important to have a very detailed specification and design before moving to
implementation? If so, you probably need to use a plan-driven approach.
Is an incremental delivery strategy, where you deliver the software to customers
and get rapid feedback from them, realistic? If so, consider using agile methods.
How large is the system that is being developed? Agile methods are most effective
when the system can be developed with a small co-located team who can
communicate informally. This may not be possible for large systems that require
larger development teams so a plan-driven approach may have to be used.
What type of system is being developed?
Plan-driven approaches may be required for systems that require a lot of
analysis before implementation (e.g. real-time system with complex timing
requirements).
What is the expected system lifetime?
Long-lifetime systems may require more design documentation to
communicate the original intentions of the system developers to the
support team.
What technologies are available to support system development?
Agile methods rely on good tools to keep track of an evolving design
How is the development team organized?
If the development team is distributed or if part of the development is being
outsourced, then you may need to develop design documents to
communicate across the development teams.

Are there cultural or organizational issues that may affect the system
development?
Traditional engineering organizations have a culture of plan-based
development, as this is the norm in engineering.
How good are the designers and programmers in the development team?
It is sometimes argued that agile methods require higher skill levels than
plan-based approaches in which programmers simply translate a detailed
design into code
Is the system subject to external regulation?
If a system has to be approved by an external regulator (e.g. the FAA
approve software that is critical to the operation of an aircraft) then you will
probably be required to produce detailed documentation as part of the
system safety case.

Extreme programming

Perhaps the best-known and most widely used agile method.


Extreme Programming (XP) takes an extreme approach to iterative development.
New versions may be built several times per day;
Increments are delivered to customers every 2 weeks;
All tests must be run for every build and the build is only accepted if tests run
successfully.

XP and agile principles

Incremental development is supported through small, frequent system releases.


Customer involvement means full-time customer engagement with the team.
People not process through pair programming, collective ownership and a process that
avoids long working hours.
Change supported through regular system releases.
Maintaining simplicity through constant refactoring of code.

The extreme programming release cycle

Dia
Extreme programming practices (a)

Principle or practice Description

Incremental planning Requirements are recorded on story cards and the stories to be
included in a release are determined by the time available and their
relative priority. The developers break these stories into development
Tasks. See Figures 3.5 and 3.6.

Small releases The minimal useful set of functionality that provides business value
is developed first. Releases of the system are frequent and
incrementally add functionality to the first release.

Simple design Enough design is carried out to meet the current requirements and no
more.

Test-first development An automated unit test framework is used to write tests for a new
piece of functionality before that functionality itself is implemented.

Refactoring All developers are expected to refactor the code continuously as


soon as possible code improvements are found. This keeps the code
simple and maintainable.

assurance, the use of analysis and design methods supported by CASE tools, and
controlled and rigorous software development processes. This view came from the
software engineering community that was responsible for developing large, longlived
software systems such as aerospace and government systems.
This software was developed by large teams working for different companies. Teams
were often geographically dispersed and worked on the software for long periods of
time. An example of this type of software is the control systems for a modern aircraft,
which might take up to 10 years from initial specification to deployment. These plandriven
approaches involve a significant overhead in planning, designing, and documenting
the system. This overhead is justified when the work of multiple development teams
has to be coordinated, when the system is a critical system, and when many different
people will be involved in maintaining the software over its lifetime.
However, when this heavyweight, plan-driven development approach is applied
to small and medium-sized business systems, the overhead involved is so large that it
dominates the software development process. More time is spent on how the system
should be developed than on program development and testing. As the system
requirements change, rework is essential and, in principle at least, the specification
and design has to change with the program.
Dissatisfaction with these heavyweight approaches to software engineering led a
number of software developers in the 1990s to propose new agile methods. These
allowed the development team to focus on the software itself rather than on its design

and documentation. Agile methods universally rely on an incremental approach to software


specification, development, and delivery. They are best suited to application development
where the system requirements usually change rapidly during the development
process. They are intended to deliver working software quickly to customers, who can
then propose new and changed requirements to be included in later iterations of the system.
They aim to cut down on process bureaucracy by avoiding work that has dubious
long-term value and eliminating documentation that will probably never be used.
The philosophy behind agile methods is reflected in the agile manifesto that was
agreed on by many of the leading developers of these methods. This manifesto states:
We are uncovering better ways of developing software by doing it and helping
others do it. Through this work we have come to value:
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the
left more.
Probably the best-known agile method is extreme programming (Beck, 1999;
Beck, 2000), which I describe later in this chapter. Other agile approaches include
Scrum (Cohn, 2009; Schwaber, 2004; Schwaber and Beedle, 2001), Crystal
(Cockburn, 2001; Cockburn, 2004), Adaptive Software Development (Highsmith,
2000), DSDM (Stapleton, 1997; Stapleton, 2003), and Feature Driven Development
(Palmer and Felsing, 2002). The success of these methods has led to some integration
with more traditional development methods based on system modelling, resulting in
the notion of agile modelling (Ambler and Jeffries, 2002) and agile instantiations of
the Rational Unified Process (Larman, 2002).
Although these agile methods are all based around the notion of incremental development
and delivery, they propose different processes to achieve this. However, they
share a set of principles, based on the agile manifesto, and so have much in common.
These principles are shown in Figure 3.1. Different agile methods instantiate these principles
in different ways and I dont have space to discuss all agile methods. Instead, I
focus on two of the most widely used methods: extreme programming (Section 3.3) and
Scrum (Section 3.4).
Agile methods have been very successful for some types of system development:
1. Product development where a software company is developing a small or
medium-sized product for sale.
2. 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.