Agile Testing: A Practical Guide for Testers and Agile Teams
One of the interesting impacts of the agile movement is the elevation of testers from their second-class status to being strategic participants in delivery. Under traditional models, testing often gets compromised in order to maintain delivery dates and testers are often treated as the poor cousins of the developers. In the agile model, however, testing takes on a more strategic importance.
Under the agile methodologies, testing does not just happen at the end of the project; rather, testing takes place during each iteration of the project. The result: more time to find defects and more time to fix defects resulting in a higher-quality solution. Add to that the opportunity to regression test earlier work to ensure that it hasn't been negatively impacted by the newer additions, and you have a recipe for impressive quality improvements over traditional techniques. Testers can capture metrics about the quality of the solution and the development practices and present those back to the development team at the end of each iteration as input into a "lessons learned" (retrospective) activity. In such a manner, testing becomes a key driver to project efficiency, quality, and attainment of business value. Testers are no longer the poor cousins -- they are now strategic partners.
In "Agile Testing," Crispin and Gregory give a very good description of agile testing principles and practices. They start with an overview of what agile testing means and some philosophical principles underlying the practices. Once they have addressed the necessary introductory "fluff," they dive right in to the heart of the matter, addressing how to overcome cultural challenges to taking an agile testing approach, how to select and integrate agile testers into the delivery team, and how to transition a team into using agile testing practices. For many, that alone would make a good read, but there is more -- much more.
Next, the authors address how agile teams perform four different types of testing: technology-facing and business-facing tests that critique the product and/or support the team. They seem to cover the gamut from how agile teams test non-functional requirements, testing web services and APIs, writing test cases, dealing with test data, and managing defects. This portion of the book is a good crash course in software development testing practices but with an agile spin.
A section on test automation deals with the pros and cons of this practice, as well as strategies for automation, what one should and should not automate, how to choose the right automation tool, and managing automated testing.
Finally, the authors pull things all together by walking through the daily activities of an agile tester, from estimating user stories and planning testing during the early days of the iteration, through defect prioritization and interacting with customers and developers in the middle of an iteration, to participating in demons and retrospectives at the end of the iteration. There is even discussions about what happens after the last development iteration: supporting user acceptance and final end-to-end integration testing, verifying production readiness, and more.
I have recommended this book to many others as it provides a solid background on software development testing practices in general, and a good description of agile testing practices in particular. If you have any interest in agile software development testing practices, buy this book. You won't be disappointed.