Quality assurance (QA), quality control (QC), and testing are three words you’ve likely heard. It’s just as likely you’ve heard them used incorrectly. At some point, we’ve all been guilty of using the terms QA, QC, and testing interchangeably to refer to ways of ensuring quality, but it’s not our fault! The confusion surrounding these phrases has its roots in the term’s origins, and the way in which the implementation (but not processes!) of each overlap in software development.
The Origins of Quality Assurance and Quality Control
Both ‘quality assurance’ and ‘quality control’ originated in manufacturing. In fact, both of the ideas (if not the specific terms) were in use as early as the Middle Ages. Back then, craft Guilds were responsible for ensuring the quality of services and products. The Guilds set the product quality standards a cobbler or blacksmith would adhere to in order to be a Guild member. Since Guild membership drove business to their doors, craftsman were proud to advertise that they met Guild standards.
Fast forward to WW1 and the Industrial Revolution. We can trace the concept development to this time as industrialization replaced hand-crafted goods. Instead of the cobbler or blacksmith inspecting their own creations, manufacturers needed the ability to verify large numbers of machine crafted goods, and a way to develop the criteria these goods would be judged by. Still, manufacturing is a linear process. A widget builder will do QA pre-and-during production, then do QC after production.
In the manufacturing model, QA deals with manufacturing processes by laying out the “plan-of-attack”. The plan-of-attack might include product design and specs, manufacturing processes, and all the other details that go into creating a widget for consumer use. QC, on the other hand, would be responsible for inspecting the product to verify it met specs. Essentially, in the linear manufacturing environment, QA specified the processes used to design and manufacture a product, and QC specified how products would be checked to verify specified criteria were met.
What is Software Quality Assurance?
But as we all know, manufacturing is very different from software development. The software development life cycle (SDLC) is iterative; analysis, design, and implementation aren’t always linear. It’s not unusual to see an app go through QC for regression or exploratory testing then be sent back to development for code fixes. This iterative build process is one of the reasons understanding the true nature of Software Quality Assurance (SQA) is crucial to product success.
Software quality assurance is the big-picture umbrella guiding your build to an end product that meets both business and user needs. In the software world, QA encompasses the entire development process, including: requirements definition, software design, coding, source code control, code reviews, configuration management, testing, release management, and product integration. SQA determines the goals, commitments, abilities, activities, measurements, and verifications of the software development process.
To eliminate confusion, and the potential for costly miscommunication, it helps to think of QA, QC, and testing as a hierarchy of processes. QA establishes the processes by which product are built and quality is evaluated. QC ensures QA is implemented properly, and testing is a part of the QC process.
What is Quality Assurance?
Quality assurance is a preventative and proactive process. It emphasizes planning, documenting, and finalizing the guidelines necessary to assure the software’s quality. This process starts at the beginning of the SDLC to understand the product’s requirements and expectations from both the business and user perspectives. Once requirements and expectations are identified, a test plan is developed to meet identified criteria. Quality assurance is about making sure the right steps are taken at the right time throughout the SDLC.
What is Quality Control?
Quality control focuses on applying the processes determined by quality assurance to the product itself. A QC team implements aspects determined by QA, such as running test cases, then compares results to QA specifications. Here is where we start to see QA and QC with overlap that leads to confusion in the software arena. Still, building and guiding the process is not the same as doing the individual steps.
In software development QC may run a test, generate a bug-report, then return the code to the dev team to fix. Essentially, this is very different than testing the widget for spec at the end of assembly. In manufacturing, a defective widget wouldn’t get placed back into the middle of the assembly line for reworking — it would simply get discarded or recycled.
Now that you know a bit of the history of QA and QC, you can see how translation from a linear to iterative model gives rise to confusion. It can help to think of the differences like this:
Quality Control vs. Quality Assurance
|Quality Assurance||Quality Control|
|A proactive process||A reactive process|
|Focuses on defect preventions||Focuses on defect identification|
|Plans to avoid anticipated defects||Finds and reports defects|
|A process bases approach||A product based approach|
|Manages quality||Verifies quality|
[clickToTweet tweet=”The agile methodology has made the distinction between quality assurance and quality control more important because you need QA to develop the quality processes early on so that QC can be better equipped to respond to agile demands. ” quote=”The agile methodology has made the distinction between quality assurance and quality control more important because you need QA to develop the quality processes early on so that QC can be better equipped to respond to agile demands. “]
Quality Assurance in the Agile Ecosystem
Now that we’ve looked at history’s influence on our understanding of the quality assurance and quality control processes, it’s easy to see how their initial use in a linear manufacturing environment caused confusion in an iterative software development ecosystem. You also might be thinking ecosystem a strange word to use when talking about software development, but if you consider the concept for a moment, it’s extremely apt.
Agile development demands rapid and flexible response to change. The ‘ecosystem’ of the Agile software dev process is rapidly iterative, and advocates for adaptive planning, evolutionary development, early delivery, and continual improvement. These processes — the structuring of requirements and solutions — evolves through collaboration of self-organizing and cross-functional teams.
Today’s lucrative digital offerings have one thing in common. They no longer take months or years to develop and deploy, let alone rely on user feedback as a means of QC. Today, web and mobile apps are updated weekly and monthly. Large corporations push fixes to their websites daily. From business requirements to user stories to test cases, development and maintenance in the iterative Agile ecosystem requires a solid QA strategy to shepard the processes.