Testers: The Hidden Resource
Date: Feb 11, 2009
Lisa Crispin and Janet Gregory point out the hidden asset on many development teams: the testers. By learning from agile teams, software teams using any type of development methodology can improve their use of testers and testing.
What do the words tester or QA engineer bring to mind? They're those people who think of ways to break the software, right? Isn't QA the team that comes in after the coding is done, to tell the programmers what they did wrong? It doesn't take all that much skill to be a tester; anyone could pound on a keyboard and check whether the software works, right?
Wrong. Think again.
In traditional projects, requirements are defined up front, usually by business analysts or product managers. Testers have learned to analyze each requirement—looking for completeness, ambiguity, correctness, and much more—so that they can write detailed test cases. However, development teams using this type of phased and gated methodology often tie the testers' hands, giving them no way to get requirements changed if they find contradictions or unclear specifications. By contrast, testers on agile teams get the opportunity to accommodate and embrace change. By observing how testers contribute value on agile projects, we can see how agile testing principles and practices may be applied, regardless of the development methodology being used. The key is making testers full partners with developers, giving them access to business experts, and involving them from the very beginning of each project.
Undervalued and Unappreciated
Testers often aren't used to their full potential. Their skill sets are underestimated and overlooked. Many testers have abilities, experience, and aptitude that make them useful throughout the software lifecycle. In agile projects, where testers have the opportunity to add value from the very beginning of the project, the many ways in which the testers contribute have become obvious. However, there's no reason that testers can't provide more value on any development team, regardless of the methodology used.
Testers have suffered a bad reputation over the years. Too many people fail to value testing, seeing testers as people who couldn't succeed as programmers, or unskilled workers who just bang away at the keyboard. As a result, testers are often paid less than programmers of equal experience and skill. What talented professional wants to work in an unappreciated job, for low pay? This attitude toward testers can become a self-fulfilling prophecy.
It's time for everyone to start seeing testers in a new light. By testing, we mean more than the traditional QA role. We don't mean just testing the end product. We also mean working closely with customers to clarify their needs, enhancing requirements with concrete examples of desired system behavior, challenging the status quo, acting as information providers to give feedback to the team throughout the development lifecycle, as well as helping the team with continual process improvement. Testers lead by example, focusing on business value. They encourage the team to adopt values and principles that promote quality.
The True Value of Testing
A skilled tester makes the effort to understand the customers' requirements fully; only then does he or she know how to work with the development team to make sure that those requirements are met. If your developers consistently delivered the right functionality at the right time, how much value would your business gain? If more software defects were found and fixed during development, rather than leaking out to production, how much money would your business save?
Testers can apply their strong analytical skills during planning sessions, asking questions about each piece of functionality. These questions often reveal hidden assumptions. Because testers work with the whole product and have a "big picture" view, they can look at impacts that a user story or feature might have on the rest of the system. Testers test the requirements—understanding what the business really wants, and looking for defects before they happen. Their questions prevent future misunderstandings and wasted resources. Their ability to clarify requirements helps the team make better implementation decisions. They help developers think about testability, focus on simplicity, and facilitate test automation with well-designed code.
At this point you might be thinking, "But we have analysts who write requirements." It's true that analysts make important contributions in understanding business needs. However, like the business experts themselves, your analysts may not know how to express those needs in a way that helps programmers to produce the right code. Because testers usually understand the technical aspects of implementing a new software feature, and know how to express business needs in terms of clear examples and tests, they're able to contribute better guidance for the developers than the analysts could provide.
Programmers know what code to write when they have examples illustrating the necessary functionality. These examples may start out as whiteboard drawings, spreadsheets, or paper prototypes. Testers know how to turn those examples into high-level acceptance tests. All of a sudden, we now know when a user story (or requirement) is done—at least for the happy path. Customers may know what they want, but too often they don't know how to express this information meaningfully. Testers can help customers to create acceptance tests that define the minimum quality criteria for each requirement.
Once testers take a user story or set of requirements and start to create more details around what they want to test, they can flesh out variations in time to identify changes or new requirements. A good exploratory tester challenges shared assumptions and finds issues that weren't even considered during planning or coding. When testers are treated as equal members of the team, they can bring up issues early, when it's still possible to make changes in the code.
Whole-Team Commitment
Technical skills for the tester are often mis-defined as programming skills. Understanding programming terminology and basic programming skills will help any tester to communicate with the programmers. However, it's not absolutely necessary to know how to code, as long as the whole team is committed to completing all testing activities for each new piece of functionality. An open-minded attitude and a willingness to learn are the main skills that testers need to be productive development team members. With some training, and with time and support from the entire development team, any tester with the right attitude will learn the necessary practices and principles to keep the project on track.
What do we mean by this "whole team" commitment? Testers work with programmers to turn their test ideas into automated tests that become part of the regression test suite. The whole team becomes responsible for keeping the test suite "running green"; that is, keeping the tests passing. The regression suite (including all unit and functional tests) allows the team to refactor continually to keep the code clean and to minimize technical debt. Testers contribute their specialized skills for developing robust test cases, but the entire team gets involved with designing testable code, automating and executing tests. A team commitment to principles, values, and practices that promote quality will result in well-designed code and keep maintenance costs low. Good test coverage means that changes are easier and faster to implement.
Multiple Roles
Testers on any project—not just agile projects—can work with programmers and test new pieces of functionality as soon as those pieces become available. Pair testing with a programmer can be a shared learning experience. Testers work closely with programmers to understand some of the risks and complexity of each feature. By reviewing unit tests and their functionality with testers, programmers learn to write more effective unit tests that support stronger code design. In turn, testers learn what has been already tested, allowing them to concentrate on higher-level business-facing tests. This approach prevents duplicated effort and increases the team's efficiency.
Another role in which testers excel is that of information provider. On traditional projects, testers have learned how to look at test results and present the information to the stakeholders in an understandable format. When testers are treated as equal partners in the software development team, the testers can expand this skill to give continual feedback to the whole team—not just the project manager.
Project managers are generally the folks who report team progress to the stakeholders outside the project team. They rely heavily on metrics in order to tell them the story. This is another area where testers provide useful information. They're expert at producing feedback that gives everyone on both the technical and business teams a full picture of project progress. For example, testers can produce charts showing how many tests are written, how many are being executed, and how many are passing.
Collaboration comes naturally to testers, as they've always worked together to make sure that the product has been tested end to end. Let the testers expand this skill to include collaboration with programmers, customers, and the rest of the team. Collaboration is a skill worth sharing, and testers are in a great position to help teams learn. Of course, the whole development team collaborates with customers, but testers often spend the most time with them, helping customers learn how to write acceptance tests and understand the possibilities.
Time for a Change
Are you utilizing testers at their full potential, taking advantage of all the resources they have to offer? Start thinking about the additional activities they could perform. Where are you feeling the most software-related pain? Are your stakeholders unhappy that they aren't getting the functionality they wanted? Are deadlines missed because of last-minute corrections? Software professionals with good testing skills can help to address problems like these.
If your testers or QA professionals aren't actively participating throughout each project lifecycle, it's time to get them involved. If your testers lack the skills we've discussed here, but they're passionate about their work, enjoy collaborating, and are eager to grow professionally, give them time to learn, and provide them with training support. Get testers and programmers together, so testers can help programmers learn to love testing, and programmers can help testers to enhance their technical abilities. Leveraging the skills of your testing professionals will maximize the potential of the entire software development team. Discover the many valuable resources hidden in your QA team.