Over the last few years, the practice of agile testing has spread and is now a widely used approach across the software development landscape. How familiar are you with the concepts and what it entails beyond a software testing practice that follows the principles of agile software development? This article will consider the background of agile, as well as highlights how agile testing and the processes that come with it can help testers.
A little bit of history…
“In the beginning, there was testing. No one distinguished between exploratory and scripted testing. Jerry Weinberg’s 1961 chapter about testing in his book, Computer Programming Fundamentals, depicted testing as inherently exploratory and expressed caution about formalising it”, James Bach. The formalisation started in 1972 and eventually the waterfall method was adopted.
By the 1990’s software development was facing a problem that many in the industry named the ‘application development crisis’. Jon Kern, a famous aerospace engineer described how people “were looking for something that was more timely and responsive”. As the number of changes within the typical SDLC grew, so did the need for a shorter feedback loop. Iterative development methodologies emerged and the modern agile methodology arose. Today this is a well-established practice based upon the Agile Manifesto, the key principle of which is that requirements evolve through collaboration between the customer and self-organizing teams, aligning development with customer needs.
The agile methodology has transformed the role of a tester considerably, and its principles endorse being collaborative, adaptive and flexible. Just like the world is evolving today, agile testing is a great business transformer, as continuous changes to software and requirements can be accommodated effectively and efficiently. Testers may start with exploratory techniques, such as heuristics, to understand the requirements or find defects that may be overlooked otherwise. Furthermore, together they can pair test with developers and get a better understanding of a solution. Various types of functional and non-functional tests are performed at an earlier stage, making it possible to improve the design and the code. This then leads to a better-quality product, and a faster route to market.
Agile testing principles and how they apply
There are some principles that should be followed:
- Focus on continuous improvement, it is within the nature of the role to find new and improved ways to solve problems by exploring new tools, skills or practices that could add value
- Test continuously and work towards the feedback received from the end users. The main aim is to deliver value to the customer
- With an iterative SDLC having a flexible and adaptive mindset is vital, as there may be a need to revisit a task in response to changes made from feedback
- Any defects raised within an iteration are fixed and can be re-tested as soon as possible, keeping the code error-free
- Everyone is responsible for quality
- Use an aide memoire or checklist for execution, rather than creating lengthy documentation
- Enable testers to engage early during software development
- Teams should self-organise. Remember, any problem is the whole team’s problem
- Communication is key, as this leads to a team’s success, always involve team members and keep them informed.
Roles of testers in an agile team
James Bach, software tester, author, trainer and consultant explains, “software development didn’t start with a separate profession of tester”, and today there is often a difference in opinion as to whether one is really necessary within a team when using an agile approach. Practices vary from writing unit tests, to performing complete end to end testing. Product quality can suffer with the incorrect application of testing, but there is added value by influencing development teams to take a quality-based approach. Testing in an agile environment means dealing with risks and collaborating with the team to understand effort required for specific stories. Testers can work with the product owners to test requirements. Furthermore, they are able to write and execute manual and automated checks and perform data-driven tests prior to and after fixes. Having them in an agile team empowers agile testing!
Challenges and risks involved?
Although agile testing can have a positive impact, it can also present some challenges – incomplete or missing requirements are often a problem that testing notices. In fact, it’s a facet of agile that this is picked up early and fixed. Ambiguous requirements can also cause issues. When there aren’t shared models of understanding that are gained through close collaboration, developed features can often be at odds with the true requirement. Feature creep is an added problem that needs to be reigned in, with testers pushing back on stories that extend the original requirement.
Frequent builds and continuous improvement are an important part of delivery, but can also be a source of frequent failure. Adding automation to this process can catch regression and reduce the need for manual verification, allowing for more efficient, deeper and meaningful testing.
Benefits of agile testing
There are many benefits to be realised through effective agile delivery. Whilst testers can achieve the same coverage of checks, often in much less time through judicious use of automation, they can increase the amount of exploratory testing with more problems found in a shorter space of time. They can also reduce the number of resources required. Both of these actions can reduce cost.
Additionally, the reduction in onerous and often wasteful documentation further frees up time for more effective testing to happen. Taking Scrum as an example, the ceremonies reduce miscommunication, provide timely and regular updates, identify problems to be shared and solved and keep the focus on the right goals. Retrospectives are another way to improve delivery. Thoughtful and shared retrospection can spark creative output or just remove wasteful or unneeded process.
It’s a well-known fact that the later in the development life-cycle defects are found the more expensive they are to fix, so let’s find them early. Agile testing allows us to do this.
Automation of checks is an important part of providing speed and reliability to the development process. It’s important for testers to understand and harness these skills so they can be liberated to focus their creativity on finding problems and challenging assumptions with the goal of providing as much information about the state of development as possible.
Everyone on the team should collaborate, take shared responsibility in quality and it’s vital for testers to upskill to work alongside developers, being an asset to the team and providing the right contribution to deliver value.
The future of agile testing looks very interesting. Testers gain expertise and skills for testing including communication and team collaboration which will allow for a smooth process within an SDLC. It is a mindset that may help a business achieve faster delivery of higher quality software, which should result in greater client satisfaction. It can aid in improving enterprises leverage; test execution; planning; user feedback response and testing strategies. Aspects like active involvement of team members and flexibility when adapting to unexpected changes in the requirements, both contribute to building the foundations of a strong test team. In other words, agile testing can be powerful if you have the right discipline for it and follow the principles as discussed in this article.
Written by Laveena Ramchandani, Test Engineer, Scott Logic