The Principles of Agile Methods
The Principles of Agile Methods
The Principles of 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.
Diagram
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.
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 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.
Dia
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
Dia
Extreme programming practices (a)
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.
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