Testing in Agile Projects: Where Things Stand Today Brian Marick

Testing in Agile Projects:
Where Things Stand Today
Brian Marick
[email protected]
Copyright © 02004 by Brian Marick. Permission granted to reproduce verbatim.
Some images copyright www.arttoday.com.
What Are Agile Projects?
• An attitude toward change
• An attitude toward software
• Some attitudes toward people
The Manifesto for Agile Software Development, www.agilemanifesto.org
Changing Requirements Are Swell
Oh! Let’s add this!
Now that I see my
feature, I don’t like it.
Sure!
How should we
change it?
Software Can Be Soft
• Programs can become better, cleaner,
and more capable
• They become changeable by being
successfully changed
– not mainly by planning for change
• Frequent new requirements “train”
the code and the coders
“Agile methods, the Emersonian worldview, and the dance of agency”
www.visibleworkings.com/papers/agile-methods-and-emerson.html
People
• Written documentation is a poor
substitute for continuous
conversation
• Generalists trump specialists
• Teams can self-organize
• Trust
– “… if you ask for help, someone has to
help you” - Lisa Crispin
Agile Methodologies
•
•
•
•
Extreme Programming
Scrum
DSDM
Evolutionary delivery and staged
delivery share many characteristics
See “Reading” slides at the end
The Import
These attitudes toward
change, software, and people are the
context for testing in Agile projects
Kaner, Bach, and Pettichord, Lessons Learned in Software Testing
www.context-driven-testing.com/wiki/scribble.cgi
Four Types of Testing
Geoffrey Moore, Crossing the Chasm, p. 19
Programmer Testing
I need an object that records each
time segment
Test-driven design
Unit testing
Programmer Testing
The test comes first
Programmer Testing
Code is written to
pass the test
Programmer Testing
Not done?
Write another test…
Programmer Testing
And the code to pass it.
All earlier tests continue to pass
Programmer Testing
Code awkward? Fix it now.
Tests continue to pass
(Refactoring)
Martin Fowler, Refactoring
Programmer Testing
Eventually, the jelly is cooked, nailed down,
and ready for further change
Status
I need an object that records each
time segment
Why was this
decision made?
Because of a Customer
Representative
…I want to scribble notes about
what I’m doing…
FIT Tests
Reminder,
not
requirement
Makes sense
to the
customer
representative
Easy to run
fit.c2.com
Test Results
BrowserFriendly
Tests
First
Tests Make Change Smooth
Has anything
broken?
Has anything
broken?
Has anything
broken?
small
change
small
change
small
change
Tests Inform Programmers
• There are no explicit requirements or
specifications
– so tests cannot check code against them
• Tests serve same goal as
requirements or specifications
– they provoke programmers to
write the right program
No way!
Requirements for Test Notation
• Provoking the right code
• Improving product conversation
– tests are something to talk about
– ground conversation in the concrete
– forging a common vocabulary
• Making possibilities more noticeable
– explaining to someone else supplements
trying out working software
– concreteness sparks ideas
The Tester As Participant
How can we best be concrete?
What “goes without saying”?
What should the product not do?
Who’s being overlooked?
What bugs seem likely?
“Tester” As Job Title
How can we best be concrete?
What “goes without saying”?
What should the product not do?
Who’s being overlooked?
What bugs seem likely?
Status
acceptance tests, customer tests,
whole-product tests, business-facing tests…
Mid-Course Observation
Business Facing
These tests primarily
support programming
(as well as the whole
team’s understanding)
Technology Facing
Is This Really Testing?
• Checked examples
– for discussion
– for confident implementation
– where are the bugs?
• Change detectors
– for confident implementation
– where are the bugs?
What About When the Examples
Are Bad Examples?
(incomplete, misleading)
Extending the Model
Support Programming
Business Facing
Examples that use
business
terminology
Examples that use
interior
terminology
Technology Facing
Extending the Model
Examples that use
business
terminology
?
Examples that use
interior
terminology
?
Technology Facing
Critique Product
Support Programming
Business Facing
Critiquing the Product
• What resource do we newly have?
– the working product, including new code
• Exploratory testing
– “simultaneous learning, test design, and
test execution” - James Bach
• Doing what?
– diverse users and their scenarios
– imaginative end-to-end testing
– some opportunistic feature testing
www.satisfice.com/articles.shtml
Exploratory Bug Finding
Business Facing
Examples that use
business
terminology
User-centered
bug reports
Examples that use
interior
terminology
?
Technology Facing
Critique Product
Support Programming
A Quadrant Entry
Status
Still Not Addressed
• What about security bugs,
configuration bugs, performance
problems, bugs revealed under load,
usability problems (like suitability for
color-blind people), etc. etc. etc.?
– difficult to specify by example
– whole-product, but not central to domain
These Are Technology Issues
Business Facing
Examples that use
business
terminology
User-centered
bug reports
Examples that use
interior
terminology
?
Technology Facing
Critique Product
Support Programming
• Understanding of implementation
more important than understanding
of a particular domain
The Good News
Business Facing
Examples that use
business
terminology
User-centered
bug reports
Examples that use
interior
terminology
“ility” bug
reports
Technology Facing
Critique Product
Support Programming
My Take on the State of the
Practice
Summary: Testing in Agile
Projects
Reading (1)
• Agile development in general
– www.agilealliance.org
– Agile Software Development, Alistair Cockburn
– “Agile methods, the Emersonian worldview, and the dance of
agency”, Brian Marick,
www.visibleworkings.com/papers/agile-methods-and-emerson.html
• Extreme Programming
– Extreme Programming Explained, Kent Beck
– www.xprogramming.com/xpmag/whatisxp.htm
• Scrum
– Agile Software Development with Scrum, Schwaber and Beedle
– www.mountaingoatsoftware.com/scrum
• DSDM
– DSDM: Business Focused Development, DSDM Consortium
– www.dsdm.org
Reading (2)
• Agile from a tester’s point of view
–
–
–
–
www.testing.com/agile
Testing eXtreme Programming, Lisa Crispin and Tip House
[email protected]
www.testing.com/cgi-bin/blog
• Programmer testing
–
–
–
–
Test-Driven Design by Example, Kent Beck
Test-Driven Development: A Practical Guide, Dave Astels
Pragmatic Unit Testing, Hunt and Thomas
[email protected]
Reading (3)
• Exploratory testing
– www.satisfice.com/articles.shtml
– www.testingcraft.com/exploratory.html
• Context-driven testing
– Lessons Learned in Software Testing, Kaner, Bach, and
Pettichord
– www.context-driven-testing.com/wiki/scribble.cgi
• Miscellaneous
– FIT: fit.c2.com (see also fitnesse.org)
– Crossing the Chasm, Geoffrey Moore
– Refactoring, Martin Fowler (et. al.)