Is there any difference between Quality Assurance(QA) and Quality Control(QC)?
Before we get to understand QA and QC, an understanding of Software Quality is essential. An understanding of what are software errors, defects and what causes them makes the understanding a lot more clearer. So let’s start with the definition of software Quality.
What is Quality? How do we define Software quality?
In its simplest terms, Quality meets the customer’s requirements, satisfies his needs and results in cost savings.
According to the Wikipedia, software quality refers to two related but distinct notions that exist wherever quality is defined in a business context:
Software functional quality reflects how well it complies with or conforms to a given design, based on functional requirements or specifications. That attribute can also be described as the fitness for purpose of a piece of software or how it compares to competitors in the marketplace as a worthwhile product;
Software structural quality refers to how it meets non-functional requirements that support the delivery of the functional requirements, such as robustness or maintainability, the degree to which the software was produced correctly.
How do we infer the quality of a software product?
From the presence or absence of defects.
What is a defect?
A defect in software causes the software to behave in unexpected ways, contrary to the customer’s expectations.
And it could lead to loss of money, life, material, reputation of the firm eg. radiation leak, health-care software, aircraft software, etc.
What causes errors?
We as human’s, are prone to making errors – lack of understanding, complexity, fatigue are some of the reasons. And the errors creep into the software process at various junctures- from Requirements to coding. If an error is found in the same stage where it occurred, that would prevent the errors from creeping into the next stage of development. For eg. an error in Requirements if found during a Requirements review, would cost very little to fix. However, if this same error was detected during the User Acceptance Testing, the code and design and other artifacts need to be reworked to fix it, software testing conducted to make sure the defect has been fixed and has also not broken the other parts of the software. This shows how the costs escalate the latter the errors are discovered.
To bring down rework(and hence the cost), we need to ensure we find errors as soon as they are made. And they can be fixed as soon as possible. Two important activities are undertaken for this purpose namely QA and QC. QA stands for Quality Assurance, QC stands for Quality Control or Software Testing.
Software Quality Assurance or Quality Assurance(SQA or QA) refers to the processes that are undertaken to ensure we build a quality product. They encompass the entire gamut of the development activities including testing. ISO 9000 standards and CMMi are examples of Quality Assurance activities. QA is process-oriented and monitors conformance to standards. Project checklists, Audits, inspections are used to measure conformance to the standards. QA is a proactive process and is generic to all the projects in the organization.
QA activities monitor the entire software development activities including the software Testing process. The focus in QA activities is on the processes used to build the product. Verification activities like conformance to Coding standards fall under Quality Assurance. (There is no running or executing of code in Verification, only looking at the code, documents in a static fashion).
Quality Control or QC on the other hand is a reactive process and comes into picture once the coding/development is complete. Software testing or QC is used to identify and correct the defects in the finished product. It is the dynamic process of code execution. QC is project-specific. It focuses entirely on the customer requirements. QC activities are ‘Validation’ activities, the code is always executed and run to see how it performs against User requirements and any differences are listed out as defects.
— The code is validated against the Low-Level Design document in Module level testing(a Development Team activity).
— The code is validated against the High-Level Design in Integration Testing(conducted by the Development Team).
— The code is validated against the Functional Requirements in Functional/System Testing.
— The code is validated against the Business Requirements Document or BRD during User Acceptance Testing.
Other Validation activities are Reviews – Review of the Functional Spec against the Requirements Document.
These days though the term QA is also used to refer to Software Testing. Software Testing jobs are advertised as QA Analyst jobs. Hence it is advisable to check the responsibilities listed to get a better idea!