Software testing remains a very important and integral part of software development. Before the advent of Agile practices, software testing was, an afterthought; it’s something that we do right after coding finishes. We’ve come a long way from that. Some teams even write the tests first, before writing the actual codes. The tests not only serve as a gatekeeper for releases, but more importantly, they also serve as an important documentation for the code.
It has been two decades since the Agile manifesto was published, and we spent the good part of it trying to figure out how testers fit into this new paradigm; we are still figuring it out, but we have gotten better. Part of the reason we got better is because the tools have gotten better. The proliferation of automated testing techniques has immensely helped us transition from waterfall to the highly iterative Agile practice.
A key reason why high-performing teams have succeeded in adopting Agile practices is because the roles within the development team have shifted. Nowadays, everyone tests.
A typical Agile team is composed of 3-6 developers, a product owner, a SCRUM master and a QA engineer. We no longer use an army of testers to bookend the development process. As the team matures, everyone becomes more and more cross-functional. Everybody becomes a tester. Functional testing is no longer the exclusive province the QA engineer; this has become the task of the developer. The advancement of testing frameworks and the team being more cross-functional, makes it possible for functional testing to occur at a point very close to requirements definition.
The role of the QA engineer also has shifted. Now that QA is no longer saddled with functional testing, they can focus on more value-added testing like looking for edge cases, exploratory and integration testing. Together with the shift of responsibilities, is the shift on core skills of the QA; now, they can also code. The ability to speak the same language with the development team is a big time saver.
The traditional QA task of manual testing has not gone away. It is still as important today as it was then. While we took great strides in automated testing, it cannot tell us the whole story. Automated testing cannot tell us if we built the right thing; it can only tell us that we built the thing right; this is why we still bookend the sprints with manual and usability testing.
It is good to include Product Owners in the manual testing phase, in fact, it should be part of their responsibilities. This phase of testing is an excellent time to focus on what matters most to the biggest stakeholders (the users). In the absence of a Product Owner, the QA engineer can step into this role.
The Agile practices has resulted to tremendous benefits in code delivery. It made the development team nimbler and more responsive to changing business needs. The QA and development teams will continually evolve, up until the point where their responsibilities are combined; clearly, that is where we are headed now.