Exploratory Testing is an important activity in an agile environment as it can help software testers to keep up with the rapid development pace of agile software projects.
First, a brief intro on agile methodology and exploratory testing:
In agile methodology, software is released in small iterations. Each iteration goes through planning, estimation, development, integration, testing and release. Because of frequent releases, test automation becomes ever so important as developers need to get quick feedback on the status of the application. The automated checks serve as regression tests to ensure that with each release the software has not regressed.
Exploratory Testing is defined as simultaneous learning, test design and test execution. It is an approach to testing that values the tester as an integral part of the test process and shares the same values as the Agile Manifesto:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
Exploratory Testing is also complementary to test automation; that is while automated checks are checking for regression issues, Exploratory Testing focuses on new features which have been developed. This is important because each sprint typically lasts only couple of weeks, which doesn’t allow sufficient time for scripting tests cases and executing them later against the application. On the other hand, exploratory testing in agile environment allows testers to get familiar with the domain and the application and on each iteration, that understanding is enhanced and hence testers become more efficient.
According to Brian Marick’s testing quadrant, there are two sides to testing, ones which support programming, i.e. support writing code (unit tests) or provide an indication of when the programmer might be finished (acceptance tests) and the ones which critique the product, i.e. “look at a finished product with the intent of discovering inadequacies.” It’s here, in the area of critiquing the product, where exploratory testing can play a major role in agile project.
In agile projects, the tests that support programming are mostly done by developers and are almost always automated and is an indication of done from a programmer’s point of view, whereas exploratory tests aim to find possible issues which are beyond automated programmer tests. The exploratory testers focus on areas where existing automated tests might come up short.
Effective exploratory testers working on agile projects use the tactics of exploratory testing to help inform the project team about possible issues with the product. Their testing can be unstructured and freestyle or be managed using charters and test sessions. Also due to the short intervals of development, testing inherently becomes risk based, and exploratory testing can focus on high risk areas to find potential problems.
Agile methodologies and exploratory testing are complimentary methods which, when employed together, can create excellent synergy within the testing experience.