Quite often I hear phrases along the lines of "We need a QA on the team".
I find this incredibly annoying. I could just suggest that the behaviour is a sure sign of lack of education but perhaps it would be more useful to examine why I have a problem with the phrase.
- It confuses a broad activity, Quality Assurance, with a role, tester.
- It confuses Quality Assurance and Quality Control.
- It confuses a role with a person.
- It perpetuates the myth that quality is all about testing.
- It perpetuates the myth that testing is all about quality.
- It perpetuates the dysfunction of quality as someone else's problem.
Let me take a stab at defining Quality Assurance versus Quality Control.
Quality Assurance (QA): The design and implementation of processes (roles + activities) to
ensure quality in a system/product/service.
Quality Control (QC): The design and implementation of processes (roles + activities) to
verify the quality of a system/product/service.
QA = prevent defects; QC = detect defects.
There's a concept called mistake-proofing which has several levels in order of preference:
- Eliminate unnecessary steps or components
- Replace with more reliable processes or components
- Prevent by product or process design
- Facilitate to make work easier
- Detect errors quickly
- Mitigate to minimise effects
QA is about the
design of the product/service and the processes that create that product/service.
QC is about
inspection at various stages during the processes that create the product/service to ensure that defects are not leaked to the next stage.
Simple questions: Is it important to distinguish efforts to prevent defects versus detecting defects? Are they somewhat different in design and execution?
An important part of Quality Assurance is the mindset that the next step of the process is your customer and that you don't leak defects to your customer. So for example, I as a developer assure quality in my step and the external testing team is verifying that my efforts were successful.
Any defects that are leaked to the next step should be triggering root cause analysis and changes in our approach.
To emphasise the point again, another important part of Quality Assurance is the acknowledgment that you cannot "inspect quality in". Quality comes from the design of the product/service and the design and execution of the process used to create the product/service.
Because Quality Assurance is part of the overall process of creation, it's associated with everyone involved. Everyone has a responsibility for quality.
There's
a book you may want to look at. It's by this guy named Shigeo Shingo. Of course, it's about manufacturing not software development, so feel free to ignore it and keep trying to inspect quality in.
There's an important concept in product development:
The specification is the output, not the input.
Assuming that software
development is a particular form of product development more so than a form of manufacturing, this idea that specifications are not inputs should also apply. Testing is used to understand the boundaries of a solution space. When will this component break? How much load can it take? What happens when it encounters certain kinds of input or environments? This type of testing is not Quality Control; this type of testing is about understanding and creating a specification.
There's
a blog post I wrote in June last year which I also consider relevant:
What's a role? How likely is it that the artificial and arbitrary boundaries of a role will match the natural boundaries of a real person?
You are not a tester. You are a person who has capability to do testing. I'm assuming that you have capability to do more than just testing. I don't buy the unsubstantiated claim that testing is some kind of mystical innate talent that is mutually exclusive from all other capabilities. Someone who has a job title that doesn't have "test" in it, may also have the capability to do testing. Getting better at the activity of testing is
a matter of practice, not talent.
That's it. I'm done now.