In most development organizations, Quality Assurance is treated as an under-appreciated necessity. In organizations that develop software while not considering themselves "development organizations", it's quite possible that you won't even find a QA group. QA, it seems, just can't get no respect.
Yet QA, if it's executed well, can give your organization the confidence to move boldly and quickly without fear, because QA done right is all about controlling the fear of the unknown.
Too often, QA is viewed as a mechanical exercise. It's all about writing test plans and clicking through applications. But this view is short-sighted, and it misses the context that makes a great QA team a strategic partner in a development shop. In order to really create an effective QA organization, I believe it's crucial to keep an eye on the big picture. Software is inherently unreliable, and your job is to reduce uncertainty.
I know - this is blasphemy - especially from a software developer, and yes, there once was a time when software was entirely predictable and deterministic. When I began programming, it could fairly be said that doing the same thing twice in a row would yield the same results. This is no longer the case. The incredible list of factors that contribute to variations in outcome ("it works on my machine") grows longer every day. If you weren't already twitching, multi-core CPU's are working hard to make each trip through the execution pipeline a new and exciting journey (CPU performance is no longer exactly deterministic).
Testing, once the cornerstone of QA, is now only anecdotally interesting. My only advice on testing is to try to understand the enormity of the total space of possible testing scenarios so that you come to realize that you can't possibly test every combination of function point, hardware, and software. This will help you focus on picking the scenarios you test strategically. Automate where you can, and use your brightest testers to look for weakness in the product.
Beyond traditional testing, true QA requires that you find ways to make the product better. Obviously, you can write feature requests, but think bigger than that, too. Build testability into the application so that your team is better equipped to reduce uncertainty. Use active verification, logging crosschecks, and so on to provide tangible evidence that your system is really doing what you think it's supposed to do.
Testing is passive, and it's becoming less effective all the time. Quality Assurance is active, so get involved early and make sure that the testing you do actually means something.
Related articles by Zemanta
- What Do Testers Hate About Testing (slideshare.net)
- Advantages of Agile Software Development for Testers (agile-software-development.com)
- Sponsor Love: Should QA Testers be Certified? (vccafe.com)