Quality in An Agile World - Scott Ambler
Quality in An Agile World - Scott Ambler
Quality in An Agile World - Scott Ambler
SQP References
The Role of Testers in the Agile Methods
vol. 7, issue 3
Alan S. Koch
Extreme Programming Series
vol. 5, issue 1
Pieter Botman and Ray Schneider
Quality in an
Agile World
BY SCOTT AMBLER
Ambysoft, Inc.
INTRODUCTION
Modern software processes are evolutionary, iterative, and
incremental in nature. This includes processes such as Rational
Unified Process (RUP) (Kruchten 2004), Extreme Programming
(XP) (Beck 2000), Enterprise Unified Process (EUP) (Ambler,
Nalbone, and Vizdos 2005), and rapid application development
(RAD), to name a few. Furthermore, many modern processes
are agile, which for the sake of simplicity I will characterize as
both evolutionary and highly collaborative in nature. The fundamental nature of software development is changing, and quality professionals must change with it. In this article I introduce
readers to common agile software development techniques and
argue that they lead to software that proves in practice to be of
much higher quality than what traditional software teams usually deliver. It is common to say that agilists are quality
infected, and that the greater emphasis on quality implies a
changed and perhaps even smaller role for quality professionals
on agile software development projects.
Why are developers adopting evolutionary, and more often,
agile software processes? Over the years developers have discovered that traditional software development processes, in particular the well-defined prescriptive processes, work poorly in
practice (Larman 2004). First, the Chaos report, published by
the Standish Group (http://www.standishgroup.com), still shows
a significant failure rate within the industry, indicating that prescriptive processes simply arent fulfilling their promise.
Second, it appears that most developers do not want to adopt
prescriptive processes and will find ways to undermine efforts
to adopt them, either consciously or subconsciously. Third, the
big design up front (BDUF) approaches to software development, where significant modeling and documentation occurs
before a single line of code is written, are incredibly risky in
practice because they dont easily support change or feedback.
For example, one might build what was defined in the specifications, but if the specifications dont reflect what people actually
require then there is serious trouble. This risk is often ignored,
if it is recognized at all, by the people promoting these
approaches. Fourth, most prescriptive processes promote activities that are only slightly related to the actual development of
Refactoring
Test-driven development (TDD)
Tests replace traditional artifacts
Agile model driven development (AMDD)
Refactoring
Refactoring (Fowler 1999) is a disciplined way to
make small changes to source code to improve its
design, making it easier to work with. A critical aspect
of a refactoring is that it retains the behavioral semantics of the codedevelopers neither add nor remove
anything when they refactor, they merely improve its
quality. An example refactoring would be to rename
Some Definitions
This article uses the terms collaborative, incremental, and iterative development, and it is
important to understand how each term is
used:
1. Collaborative development. When a team
takes a collaborative approach they
actively strive to find ways to work
together effectively; teams should even try
to ensure that project stakeholders such as
business customers are active team members. They should strive to adopt the
hottest communication technique applicable to their situation: prefer face-toface conversation around a whiteboard to
a telephone call, prefer a telephone call to
sending an e-mail, and prefer an e-mail to
sending someone a detailed document.
The better the communication and collaboration within a software development
team, the greater its chance of success
(Cockburn 2002).
2. Incremental development. With an incremental approach a team organizes its system into a series of releases instead of one
big one.
3. Iterative development. Working iteratively, a team does a little bit of an activity
such as modeling, testing, coding, or
deployment at a time, and then does
another little bit, then another, and so on.
This is different than a serial approach
where they identify all of the requirements
they are going to implement, create a
detailed design, implement to that design,
test and, finally, deploy the system.
the getPersons() operation to getPeople(). To implement this refactoring they must change the operation
definition and then change every invocation of this
operation throughout the application code. A refactoring isnt complete until the code runs again as before.
Similarly, a database refactoring (Ambler 2003a)
is a simple change to a database schema that
improves its design while retaining both its behavioral and informational semantics. Developers could
refactor either structural aspects of the database
schema, such as table and view definitions, or funcwww.asq.org 35
FIGURE 1
Test-driven development
Add a test
[Pass]
[Fail]
[Development
continues]
2005, ASQ
There are several advantages of TDD for agile software development. First, TDD forces developers to
think about what new functional code should do
before they write it in other words, to do detailed
design just in time (JIT) before writing the code.
Second, it ensures that agile developers have testing
code available to validate their work, ensuring that
they test as often and early as possible. Third, it gives
them the courage to refactor their code to keep it the
highest quality possible, because they know there is a
test suite in place that will detect if they have broken anything as the result of refactoring.
2005, ASQ
www.asq.org 37
CONCLUSION
These ideas are not new, but their popularity is. Agile
software development is real, it works, and its here to
stay. Agilists are arguably taking to heart what quality
professionals have been saying for decades, and
because of that the role of quality professionals now
needs to evolve to reflect this new reality. The IT
industry is undergoing yet another paradigm shift. Are
you willing to shift with it?
REFERENCES
Ambler, S. W. 2002. Agile modeling: Effective practices for extreme programming and the unified process. New York: John Wiley and Sons.
Ambler, S. W. 2003a. Agile database techniques: Effective strategies for
the agile software developer. New York: John Wiley and Sons.
Ambler, S. W. 2003b. Agile model driven development. See URL:
http://www.agilemodeling.com/essays/amdd.htm.
www.asq.org 39
Ambler, S. W. 2004. The object primer, 3rd edition: Agile model driven
development with UML 2. New York: Cambridge University Press.
BIOGRAPHY