Quality product delivery is the goal for every company, so naturally there is a lot of talk about quality assurance, quality control and software testing. Most people think these terms represent the same thing. More precisely, they think that quality assurance and quality control are equivalent to testing, which we would define as exploring the software in order to find bugs.
Even though to a small extent this can be correct (in a way that they have the same objective), there is a lot more to it. All the mentioned terms are connected to each other and they actually build on top of each other.
In simple terms, Software Testing is a part of Quality Control, and Quality Control is a part of Quality Assurance. So, is it correct to say all of it represents the same thing? No, because Quality Control is more than just testing, just as Quality Assurance is much more than just Quality Control.
Let us explore some definitions and explanations on each of them so that we can see the differences and similarities and decide if only one of them is enough to provide a quality product.
Testing is one of the most important parts of quality assurance and the most known and executed QA activity.
As per ISTQB, testing is "the process consisting of all life cycle activities, both static and dynamic, concerned with planning, preparation and evaluation of software products and related work products to determine that they satisfy specified requirements, to demonstrate that they are fit for purpose and to detect defects."
Basically, testing is a process focused on finding bugs, but also involving the execution of tests.
There are different testing types that are performed in order to find as many bugs as possible and execute as many different tests as possible in a definite time period defined by the project timeline, in order to cover all aspects of the software under test.
Some of those types include:
- Functional testing,
- Performance testing,
- Security testing,
- Database testing,
- API testing,
- Usability testing,
- Accessibility testing
Tester performs testing manually or automatically (using different automation tools), depending on many factors, including, but not limited to size of the project, complexity of the project, available resources, etc.
Testing helps to measure the quality of software and is interested in the improvement of the quality. We can say that finding and fixing bugs increases quality and if fewer bugs are found, it gives more confidence in said quality.
Quality control (QC) is defined as “a set of activities whose purpose is to ensure that all requirements are met in the final product.”
In order to control quality, we have to measure it and compare it with standards. We do that by using software quality metrics.
Also, in order to determine the level of the quality delivered by the final product, we use different quality control activities. Those are deliverable peer reviews (where deliverables are Requirements, Design, Code, Deployment, Test Plan, Test Cases) and testing.
Quality control focuses on the quality of the software by:
- Adopting and implementing activities mentioned above (which include testing);
- Ensuring that all the processes, procedures, etc. designed by Quality assurance are followed correctly;
- Making sure that the deliverables are defect free, acceptable and based on the quality requirements.
Quality Assurance (QA) is “a set of activities for ensuring quality in software engineering processes that ultimately results, or at least gives confidence, in the quality of software products.”
Those Quality Assurance activities are: Process definition, Process training, Process implementation and Process audit.
Quality assurance focuses on designing processes, procedures, standards, methodologies and making sure they are implemented correctly and continuously improved. Resources, processes and procedures keep the organization focused on goals.
In practice, Quality Assurance is usually in charge of:
- Creating Test Strategy,
- Creating Templates for test documentation (test plans, test cases and bug reports);
- Defining Quality metrics;
- Identifying testing risks and controls;
- Choosing and implementing tools to be used as a support for testing;
- Creating guidelines to be followed for different testing types.
Quality Assurance is done throughout the software development process using set resources and processes to help guide the development process in the right direction. In different phases of the process, quality control activities are also performed as a part of Quality Assurance.
The goal of quality assurance is to prevent defects, help ensure consistency across different projects in the organisation and to satisfy the customers. Except reaching the goal, QA includes additional advantages like cost reduction (less reworking since guidelines are followed), improvement of employee motivation (more ownership regarding processes is given to the employees), better communication (peer reviews remove some of the hierarchy). Quality Assurance also empowers employees to give feedback and care about quality.
Customer satisfaction is the goal of every company and a way to reach it is through the delivery of a quality product. Quality can be reached only through a combination of proactive and reactive process and introducing QA team into the company ensures exactly that. Quality Assurance team uses procedures and methodologies to prevent defects (QA) and implements procedures during testing in order to discover defects (QC).
QA includes QC, but it is also dependent on it because good QA uses QC inputs to correct implemented procedures.
Without one of them, we are missing a key ingredient to build Quality as a company’s core value. Use your Quality Assurance team as a stepping stone to promote an approach where “Quality is everyone’s responsibility”.