Testing in an agile environment
Increasingly people are talking and asking questions about testing on agile projects -- what does it take to be a successful tester in agile? To answer this question, we need to know how agile projects are different from "traditional" software projects. They're faster (short iterations, working software sooner, and a sense of urgency in the entire team from the first day), but they still have many of the same problems as some traditional project lifecycles: bad requirements, communications issues, lack of documentation.
For testers, the biggest challenge of being on an agile project team is that the software is always changing. With new code being pushed into the test environment daily or even hourly, the system you're testing becomes a moving target. Dealing with that kind of change can require different approaches to testing, with different skills, tactics and tools. There are certain aspects of testing software that don't change just because the project team is using an agile approach to implement software, particularly in the mechanics of test execution, but some testers may need to make significant changes to their testing approach if they are going to add value on an agile software project. Agile testers will need to become versed in techniques like chartering (making decisions about what work you will do next, how you will do it, and how you will make it meaningful to your client) and touring (exercising the application in different ways to improve your understanding about how things work and where risk might be).
Your test development can be agile, too. According to Hans Buwalda, CTO at LogiGear Corp., testing in an agile environment is different than agile test development. With agile test development, similar to agile system development, face-to-face communication and frequent communication among team members is important, as is breaking down testing into smaller chunks with more frequent iterations, he said. With agile test development, tests are developed in small units, independent from the system and each other. Test development needs to be sensitive to the overall planning, and it needs to be flexible. In addition, it requires management buy-in to allow testers to be creative. Buwalda claims that tests are a natural means of communication with users and stakeholders to capture agreement and meaning on the specs, as well as the business and functional requirements.
Where does quality assurance fit in agile development and how are QA goals reached? According to David Christiansen, agile software development projects typically don't use a formal "quality assurance" process. That's not to say that agile projects produce inferior products, although QA proponents in your organization will probably use that argument to resist agile project management techniques. Instead, agile methodologies such as Scrum and XP rely on less formal approaches for ensuring that the application does what it is supposed to do and doesn't have bugs. These include letting users see the application as early and often as possible; using automated tests; and employing motivated generalists (i.e., developers who are competent not just at coding, but also at analysis, testing, communication, etc.) rather than specialists to eliminate "hand-offs" in the development process. The net effect of these agile approaches is a high-quality application.
There are also clear benefits to using exploratory testing in agile environments. According to Michael Kelly, testing expert and director of application development for Interactions Inc., the real-time nature of exploratory testing can help software testers deal with the constant changes on an agile project, as well as the time pressures of agile projects. Exploratory testers need to work to make the testing relevant and coherent to their project team. That means they need to understand which risks are important to the team. They need to understand where they should focus test coverage and work with the team to make daily decisions about what they will work on and how they will structure that work.
Exploratory testers are also skilled at controlling how they interact with the world. They know that collaboration can be more productive than working in isolation. They are good at obtaining the tools and information needed to support their testing efforts. Above all, they are continually focused on improving their ability to interact with the software they test: understanding its business purpose, the technology and how it's configured, and establishing procedures for better control of experimental conditions. They collect different kinds of data and look at different aspects of the software than the programming staff might.
There are a few more things you'll need to consider when you fully embrace agile software development. For example, what is the role of architecture in agile development? Coming up with an agile architecture is not about making fixed predictions of the future, said independent consultant and trainer Kevlin Henney; a lot of considerations that make working in the here and now easier also have long-term benefits. Much of what makes an architecture agile is the ability to isolate dependencies and change, following the time-honored (but often breached) qualities of low coupling and high cohesion. Code that is sufficient rather than speculative, that communicates clearly, and that has low technical debt contributes to the habitability and ease of working within an architecture. An integral part of what makes an architecture agile is the process surrounding it.
What about cloud computing and agile? For information on how the emerging wave of cloud computing will affect agile development practices and testing, listen to this podcast interview with Craig Balding, a security practitioner at a Fortune 500 company and operator of the Cloud Security blog.
Also check out this book excerpt from The Software Project Manager's Bridge to Agility on the agile approach to scope creep, which is quite different from waterfall scope management.
If you still have questions about agile software development, write to us at firstname.lastname@example.org and we'll do our best to address your concerns.