Acceptance Test Driven Development represents another step in the pragmatic, cooperative style that was described 10 years ago when a group of 17 software developers gathered at Utah’s Snowbird ski resort in February 2001 and issued the Manifesto for Agile Software Development, with its guiding principle of: “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
The Agile Manifesto also includes the principle of: “Business people and developers must work together daily throughout the project.” Perhaps the developers spent the evening hours around a big fireplace at Snowbird – feeding the flames with the kind of instantly outdated software specifications that once bogged down development.
Acceptance Test Driven Development is an agile approach that involves application design through conversing . . . and testing. The conversation of course should be with those who will be using the application and other stakeholders. And the conversation should be ongoing.
For the Agile developer, the conversation begins: Tell me a story.
What social graces this generation of developers must be developing: So interested in the lives of others. For they spend their days conversing along the lines of: Tell me another story, and another. And another.
In days of old, development of a supply chain management application might begin with months of meetings and specification drafting, reviewing, and rewriting. In the Agile world, it begins by asking the warehouse manager for his stories, the forklift driver her stories, and the sales team their stories, and purchasing theirs.
The application grows from the user stories - - one story at a time. That’s the beauty of Agile development. With more structured approaches stories were collected, compiled, analyzed, and compromised during the creation of a master plan. With an Agile approach, each story can become part of the application, at any point along the way. Of course the trick is to keep the stories brief, which is why they are often recorded on 3x5 cards. One user can have many stories, each one representing something they need the application to do.
Collecting user stories provides a humanistic – as well as an efficient – development pathway. The stories can do a better job than more structured approaches of uncovering the real-world needs of all stakeholders. User stories bring clarity and focus. You learn not just what your application needs to do, but why, and for whom.
Test Driven Development, an agile method credited to Kent Beck, one of the original 17 manifesto signatories, provides a way of reacting to user stories. If a forklift driver’s story is that they don’t like it when their handheld device routes them inefficiently through the warehouse, one response would be for the developer to create application code to ensure each pick order was efficiently routed. However, with Test Driven Development, the first step is to create an executable unit test and then create the code to be tested. Once the code works, it is refactored, and retested, for performance.
Acceptance Test Driven Development ensures that acceptance testing criteria is clearly pulled from the story, and agreed upon by user, developer and tester in real time, so that it becomes a constant part of the agile development process.
Of course developers have their stories, too. Extreme Programming guru Ron Jeffries, who gave birth to YAGNI (You Ain’t Gonna Need It), advises: “Always implement things when you actually need them, never when you just foresee that you need them.”
Well-told – and well listened to – user stories can go a long way toward helping teams determine which features are YAGNI, and which are YGNI. When each new feature is inspired by a user story, and validated through Acceptance Test Driven Development, time to market is reduced while customer satisfaction is enhanced.
About the author
Grant Fjermedal is a long-time writer to Microsoft
and owner of Creative Logic Incorporated.
Subscribe to the TeamPulse blog if you would like to receive similar articles in the future