Most of my tester friends say that one important part of quality assurance position is "prevention". I´ve read a lot in the university about costs of quality and cost of poor quality and prevention but in my daily work I´ve never seen this activity performed by QA teams. I mean, there are a lot of tools and practices for development which help us to avoid some kind of problems as code reviews, static and dynamic code analysis, unit testing, and others but which are the most important "prevention" activities that QA guys should execute?
"More than the act of testing, the act of designing tests is one of the best bug preventers known. The thinking that must be done to create a useful test can discover and eliminate bugs before they are coded..." - Boris Beizer, Software Testing Techniques 2nd ed.
D. Gelperin and B. Hetzel also first suggested the idea of "Test, then code" in 1987.
The concept of TDD is the reintroduction of these basic tenets that are intended to prevent bugs from getting into code. I would say that ATDD is a bug preventative approach which some testers participate in.
In my team, we also perform code reviews prior to check-ins which are one bug prevention activity.
Some other things that testers (and others on the team) can do to help prevent bugs might include:
- Specification reviews
- Dev design reviews
- Scenario planning
- Design/architectural modeling
Gregory Pope lists a number of prevention techniques in "No Silver Bullet? Silver Buckshot May Work" (and his key note presentation). Some of them Phil already has mentioned. Other that testers and test managers can actively work on would be:
- right mix of testers to developers, e.g., QA manager may hire more testers
- introducing configuration management not only for source code, but also for whole system setup
- introducing requirements tracking tool
Some techniques might be easier in Agile teams, where testers are not in different silos than developers.
There are also detection techniques that do not prevent bugs but could help detect them earlier. For instance, testers can write integration tests that can be included in continuous integration along with developers' unit tests.