After so many years of managing both software development groups and testing groups, I can say without a doubt that most software defects are a result of stupid mistakes by developers.
I truly believe that if a developer were to carefully check the implications of his coding (for the whole software/application), he would be able to find and correct the vast majority of defects before forwarding his work to the QA team.
However, this is not how it plays out in the real world. Your average developer isn’t typically a control freak who obsesses about quality. Even the best of us will occasionally leave in crappy code full of easily preventable defects. It’s simpler and less time-consuming this way.
No offense to you developers out there. I lay the blame everywhere – including at my own feet. I too am guilty of this trend. :-)
So, we end up relying on testers who must find these defects and send them back to the developers for fixing. These testers must then re-check the software to ensure the original issues are fixed and that no new defects have snuck in during the developers’ most recent updates.
Honestly, how do testers do it?
Good Testers Are Disciplined
A good tester is someone who can do rigorous and methodical work. Solid testing requires running the same processes repeatedly (in the same order) for whatever A to Z tests were created for that software.
After meticulously checking the input values, results, and application flows, good testers must also validate each of the requirements relevant to the code, feature, and screen they are testing.
Great Testers Are Creative
Rigor and discipline are what separate good testers from average ones. But what distinguishes the truly remarkable tester? How do you go from good to Great?
Most of the time devoted to testing and fixing defects goes to understanding where those defects originated. And thus, a truly great tester is someone who can reduce the time needed to source defects and their underlying causes.
Let’s take a standard procedure in software development:
- We have a requirement
- Developers do their trick
- Testers check (it can be during development or after, according to the methodology)
- For each defect found:
- Testers describe it
- Developers try to understand the description, find the problem, and fix it
- Testers verify that the fix solved the reported problem and did not cause any new ones
As stated earlier, most time spent (or wasted) is on stage #4.
We all know how difficult this step of the process can be given the inevitable disconnects that arise between testers and developers:
- Do developers understand the testers’ defect reports?
- Can developers articulate their requirements clearly?
- Are testers responsive to the developers’ needs?
Although rigor and discipline are crucial for detecting defects, truly great testers bring creativity to the equation.
A creative tester can better understand the exact causes of a given defect. I don’t mean just finding the defect (i.e. “this or that doesn’t work”). I mean actually isolating the defect and telling the developer “This doesn’t work, and I think the reason is because you added/removed….”
This kind of creativity requires knowledge, intuition, and involvement throughout the process. The great tester understands not only the problem itself, but also the potential impact the tested code has on the rest of the application.
Not Just Testing – Solving
The creative tester thinks outside-the-box, discovering ways to verify his insights regarding defects and their causes. He does this not only with pre-written tests, but also with new methodologies that he customizes for the situation.
Knowing the developer personally often helps as well. As a tester becomes more attuned to a developer’s blind spots over time, he knows exactly where to look for defects and how to isolate their causes.
Great, creative testers are also able to find defects outside the scope of standard testing – i.e. defects that would normally go unnoticed using traditional testing methods. Call it exploratory testing, call it rigorous intuition. The point is, great testers – creative testers – understand the bigger picture and view the application as a whole rather than as a disconnected checklist of pre-determined tests.
As Sony co-founder, Masaru Ibuka, once said, “Creativity comes from looking for the unexpected and stepping outside your own experience.”