In any business, production line or development process, the importance of quality assurance (QA) cannot be underestimated. In simple terms, QA is the process of preventing mistakes and avoiding defects in a product or service; it comprises procedural and administrative activities within an overall systemic approach so that the requirements and goals for a product, service or activity will be fulfilled.
Let’s take a simplified analogy that we’ll all know and remember.
Imagine you’ve been writing an essay or paper for school or university. You’ve worked on it on multiple occasions, at varying times of day, with different levels of focus, fueled by diverse amounts of coffee. You finish the paper and send it in. Job done. You then read the same essay the next day, spot typos in the first sentence, find a half-paragraph that was never completed and so on. We’ve all done it. This is a process without any QA. It’s also a process that usually results in lots comments in red pen from the professor or teacher!
Ensuring that any product or service is both fit-for-purpose and error-free is essential for each and every business. Any business that goes about producing its services or products in a manner that leaves errors throughout them will probably have a brief and unsuccessful life. Software development is no different, whether it’s a mass software program that will be run on millions of laptops or a bespoke software development that will be used by five people in one company, or whether it’s something being produced by a multi-national firm or a smaller custom software solutions company.
The QA process
There are many ways of visualizing the software QA process. One useful image (from ST3PP) makes clear the length of involvement that QA has within the software development process. While the Software Testing part of the software development lifecycle often gets more focus and is QA is sometimes used analogously to mean ‘software testing’, QA’s actual involvement is much wider and broader. It is there at the beginning of the software development lifecycle to examine the requirements; within design and development to ensure that the product will meet the need; in testing and deployment so that it works in reality; and in maintenance to make sure that it continues to do so.
As mentioned, the software testing part of the QA process is the part that tends to get the most attention. The complexity of the software testing process is extensive, involving considerable planning, coordination and attention to detail. The image below, from Software Testing Help, breaks the process down into multiple stages while making overall the feedback mechanism nature of the cycle clear. Software testing can take place within a company or there are custom software services companies that also focus specifically on the testing element of the QA process.
There are some long-standing myths about QA in general and software testing in particular. One is that anyone can do it. Clearly this is not the case. Aside from needing to know a wide range of IT skills, testing protocols and tools, and having a good knowledge regarding the systems and software design, QA requires a strong attention to detail and focus that can be constantly maintained.
A second myth is that software developers can do all the QA that is needed. To use the university paper analogy – we’ve all read over our own work before and missed errors within it or the fact that arguments that we think are well explained are actually as clear as mud. An external perspective on QA and software testing is critical. Aside from the different skillset-focus and ensuring that the appropriate time and attention can be given to the QA process, which a developer – keen to move on to the next challenging project – may not do themselves, it is also well recognized that finding errors in others’ work is much easier than finding them in your own.
And the third myth is that of automated testing. Put a program into an automated QA process and see if it all goes okay. To a degree, yes, automation can detect errors, but anything that involves human interaction needs manual checking to ensure that it does actual work for people as well as just function. The user interface design is a clear example of this, with many high-profile examples of what happens when this goes wrong.
The importance of the QA process is clear. Without a systemic approach to QA that allows feedback throughout the entire production chain and lifecycle, there is the strong chance that companies will develop software: that fails to meet the requirements of the customer or user; that has errors or bugs within it; that is of reduced user friendliness; and that is ultimately a sub-optimal product of lesser competitiveness and quality in the market place.