The Concept of Software Quality: Quality Assurance(QA), Quality Control (QC) and Testing
While to err is human, sometimes
the cost of a mistake might be just too high. History knows many examples of
situations when software flaws have caused billions of dollars in waste or even
lead to casualties: from Starbucks coffee shops being forced to give away free
drinks because of a register malfunction, to the F-35 military aircraft being
unable to detect the targets correctly because of a radar failure.
In order to make sure the released software is safe and functions as expected, the concept of software quality was introduced. It is often defined as “the degree of conformance to explicit or implicit requirements and expectations”. These so-called explicit and implicit expectations correspond to the two basic levels of software quality:
- Functional - The product’s compliance with functional (explicit) requirements and design specifications. This aspect focuses on the practical use of software, from the point of view of the user: its features, performance, ease of use, absence of defects.
- Non-Functional - System’s inner characteristics and architecture, i.e. structural (implicit) requirements. This includes the code maintainability, understandability, efficiency, and security.
The structural quality of the
software is usually hard to manage: It relies mostly on the expertise of the
engineering team and can be assured through code review, analysis and
refactoring. At the same time, functional aspect can be assured through a set
of dedicated quality management activities, which includes quality assurance,
quality control, and testing.
Often used interchangeably, the
three terms refer to slightly different aspects of software quality management.
Despite a common goal of delivering a product of the best possible quality,
both structurally and functionally, they use different approaches to this task.
Quality Assurance is a broad
term, explained on the Google Testing Blog as “the continuous and consistent
improvement and maintenance of process that enables the QC job”. As follows
from the definition, QA focuses more on organizational aspects of quality
management, monitoring the consistency of the production process.
Through Quality Control the
team verifies the product’s compliance with the functional requirements. As
defined by Investopedia, it is a “process through which a business seeks to
ensure that product quality is maintained or improved and manufacturing errors
are reduced or eliminated”. This activity is applied to the finished product
and performed before the product release. In terms of manufacturing industry,
it is similar to pulling a random item from an assembly line to see if it
complies with the technical specs.
Testing is the basic
activity aimed at detecting and solving technical issues in the software source
code and assessing the overall product usability, performance, security, and
compatibility. It has a very narrow focus and is performed by the test
engineers in parallel with the development process or at the dedicated testing
stage (depending on the methodological approach to the software development
cycle).
If applied to the process of car
manufacturing, having a proper quality assurance process means that every team
member understands the requirements and performs his/her work according to the
commonly accepted guidelines. Namely, it is used to make sure that every single
action is performed in the right order, every detail is properly implemented
and the overall processes are consistent so that nothing can cause a negative
impact on the end product.
Quality control can be compared to
having a senior manager walk into a production department and pick a random car
for an examination and test drive. Testing activities, in this case, refer to
the process of checking every joint, every mechanism separately, as well as the
whole product, whether manually or automatically, conducting crash tests,
performance tests, and actual or simulated test drives.
Due to its hands-on approach,
software testing activities remain a subject of heated discussion. That is why
we will focus primarily on this aspect of software quality management in this
paper. But before we get into the details, let’s define the main principles of
software testing.