I've been writing a lot recently about software quality and testing thoroughness and how to improve quality via process improvement. Today I want to look at things from the other side, from the software developer's point of view. I've been a developer for 30+ years and still write code every day. I enjoy designing something new, and I like the challenge of debugging a problem. Debugging is pretty satisfying for me, and I'm positive that most developers feel the same way. We like mental challenges and problem solving; it's what brought us into this industry. So I don't mind QA finding bugs in my stuff. They're almost always the result of some dependency or workflow that I didn't consider. What drives me nuts though is when it takes me an hour to figure out the right setup to recreate a problem that I can debug and fix in 2 minutes. I'm not talking about the hard to duplicate intermittent problems and race conditions, just regular logic bugs. The actual debugging is satisfying, figuring out the setup is not. It's a waste of time, and I hate wasting time.
The reason that so much time gets wasted is that human language is a really bad way to describe bugs. There will always be ambiguities, and this is why so many bugs bounce back and forth between Active and Cannot Duplicate. I promise that we're not being lazy by marking bugs Cannot Duplicate. We want to fix the real bugs, really!
How can we make things better for developers and create a better relationship between development and QA? The key is to get everyone on the team "Speaking the Language of Test". Speaking the Language of Test means that we communicate with test cases, not with written problem and new feature descriptions.
- Every bug created by QA should have an automated test that reproduces the problem
- Every feature added by a developer should have an automated test that shows the correct behavior of the feature
It is critical that the tests be automated. We already have too many tests with 20 setup steps! Those tests are the problem. It is also critical that the developers be able to run tests under control of a debugger. If you give your developers an automated test and a debugger, I'm positive that you'll get quick fixes and have happier developers.