While collaboration has measurable benefits—faster issue resolution, better understanding of the product and its features,load sharing of team responsibilities (in systems such as kanban)—it also introduces ambiguity around the team members' roles and responsibilities. Of specific interest to us here is the boundary around a tester’s role and its delineation from a developer's role.
Collaboration amongst disciplines such as product development, testing, business, marketing is increasingly encouraged in companies, especially with the advent of the agile development models. While collaboration has measurable benefits—faster issue resolution, better understanding of the product and its features, load sharing of team responsibilities (in systems such as kanban)—it also introduces ambiguity around the team members’ roles and responsibilities. Of specific interest to us here is the boundary around a tester’s role and its delineation from a developer’s role.
Quality is becoming a collective responsibility, again, largely due to the agile way of operations. Every discipline—be it business, marketing, design, development, testing, project management, or operations—has its own quality goals both in its execution efforts and in the product that is being built. In enabling these disciplines to meet their quality goals, the test team is collaborating even more with them through various empowerment strategies, such as providing inputs on unit tests, sharing build verification and sanity tests both manual and automated, and helping them with debugging and troubleshooting issues to name a few. While all of these collaboration efforts and group empowerment of quality mean more time for the testers to focus on their core quality goals and an increased product understanding, testers need to understand and mitigate the practical core challenges that collaboration entails
The independence factor around quality assurance is very important in ensuring an unbiased test effort. A decade ago, there was so much emphasis around independent validation, verification, and black box testing—especially during the days of the waterfall methodology—that the test team was slowly alienating itself from the rest of the product team. This isolation was creating problems around product understanding; disjointed test efforts, which did not completely map into the required test coverage; and lack of respect for the test team—creating some product quality and team morale issues.
This situation has changed quite a bit in recent years; again, thanks to collaboration and agile project execution. However, in understanding the bounds of a tester’s role in a product team, it’s important to retain the independence factor. What this translates into is that when testers collaborate and share some responsibilities with the rest of the product team, they have to be very cautious not to assume work that conflicts with their core goals or independence. For example, when testers file defects, the increasing trend is toward asking them to fix some of the lower priority issues that don’t need a lot of troubleshooting.
Say, for instance, that testers are being asked to fix content issues or translation errors, where the fix does not touch the source code, but is purely on the content file level to save time for the developers. The appropriateness of this arrangement is arguable at best. Since these fixes don’t involve any code-level changes and don’t call for any code compilation and build generation, there is one school of thought that says it is very logical to have the testers themselves fix the reported issues and verify them by pushing the updated content files into the testing environment.
The other school of thought is that even such small fixes interfere with the test team’s current work and these tasks don’t really align with their quality goals and, hence, should not be taken up. In an ideal world, this second school of thought is what would make sense, but in the current constraints that we operate within, where everyone shares each other’s work with the goal of releasing a product at the agreed time, cost, and quality, it is worth looking at individual scenarios and evaluating whether or not it makes sense for testers to take them on, as long as the tester does not lose his independent view on product quality.
An even stronger example of where such conflict of interest shows up is testers’ working with developers in creating unit test suites. Clearly, developing and using unit tests are the development team’s responsibilities. It is perfectly fine for testers to provide input to the developers on designing unit test cases, help them with any tool issues they face, and define parameters around exit criteria for a build to be released to test. These are scenarios where the tester is empowering the developer to focus on quality without losing his own independence factor in the test effort. If a tester were to extend this help to creating the unit tests himself, he may soon be tempted to touch the source code to fix any defects or bugs that the unit tests report. This is a clear case of trespassing into the developer’s boundary of operations.
Another classic example where sometimes bounds can be crossed is that of static code reviews. While these reviews have great benefits, e.g., helping the tester better understand the system, catching certain bugs—especially architectural and security—early on, this is an area where the tester is so close to the source code that it is important to intentionally watch and avoid any role trespassing that may result not just in bias in the testing effort but also conflicts with the developer, adversely impacting team morale.
Giving a tester access to the source code has benefits, including better understanding of the system he will be testing, enhanced test coverage, potentially finding bugs sooner than run time, and providing a holistic view into the system. However, it is important to consider the possible encroachment into another person’s role, potential loss of testing independence, and randomization in one’s core tasks. By randomization, I mean the tester will gradually be pulled into non-test tasks, and so he will lose focus on his core tasks. He will be randomized with things that he should not be spending time on. Understanding both sides of the coin will help maintain a healthy balance between the roles of developer and tester with the two collaborating on the right set of areas to ship a product of exceptional quality.