Quality Assurance has evolved over a period of time. Often incorrectly used interchangeably with Quality Control (QC), Quality Assurance (QA) is a wider concept that covers all policies and systematic activities implemented within a development system.
The American Heritage Dictionary defines quality as “a characteristic or attribute of something.” As an attribute of an item, quality refers to measurable characteristics – things we are able to compare to known standards such as length, color, electrical properties, and malleability. However, in case of software, our parameters would be Quality of design and Quality of conformance.
Software quality assurance (SQA) consists of a means of monitoring the software engineering processes and methods used to ensure quality of the software under development. It is an umbrella activity that is applied to each step in the software process. SQA encompasses the entire software development process, which includes processes such as requirements definition, software design, coding, source code control, code reviews, software configuration management, testing, release management, and product integration.
Software requirements are the foundation from which quality is measured. Lack of conformance to requirements is lack of quality. Specified standards define a set of development criteria that guide the manager in which software is engineered. If the criteria are not followed, lack of quality will almost surely result. A set of implicit requirements often goes unmentioned (e.g., the desire for ease of use and good maintainability). If software conforms to its explicit requirements but fails to meet implicit requirements, software quality is suspect.
The Importance of Quality Assurance
The role and demand of Software Quality Assurance is critically increasing these days, because even as teams and budgets are shrinking, the demand for better quality is continuously increasing. Despite experiencing disastrous consequences of costly defect cycles that force changes in processes from the Quality Assurance (or the entire Software Development as such), companies continue to neglect the critical role of quality assurance when it matters most. This is where implementing a few standard Software Quality Assurance practices will take quality assurance long way:
- Making SQA an inherent part of the technical team
- Taking inputs from SQA while gathering requirements
- Being specific about Requirements
- Predefining Quality Standards
- Measuring simple Quality Metrics
- Setting Team and Individual Goals
- Testing Smarter and Automatically
- Leveraging Automation Tools wherever needed
- Continuous Communication, Collaboration, and Optimization across departments
Software Quality Assurance is everyone’s job
Software Quality is everyone’s job; that can be achieved through competent analysis, design, coding, and testing, as well as through the application of formal technical reviews, a multitier testing strategy, better control of software work products and the changes made to them, and the application of accepted software engineering standards. In addition, quality can be defined in terms of a broad array of quality factors and measured (indirectly) using a variety of indices and metrics.
Over the past three decades, the software development community has begun agreeing that a more formal approach to Software Quality Assurance is required. If the requirements model (requirements specifications) and the programming languages can be represented in a rigorous manner, it should be possible to apply mathematic proof of correctness to demonstrate that a program conforms exactly to its specifications.
Software Quality Assurance Activities
Software Quality Assurance is composed of a variety of tasks associated with two different constituencies – the software engineers who do technical work and an SQA group that has responsibility for quality assurance planning, oversight, record keeping, analysis, and reporting.
Software Quality Engineers address quality, and perform quality assurance (and quality control) activities by applying solid technical methods and measures. The engagement of Software Quality Assurance Engineers and Software Testers in conducting Formal Technical Reviews, White Box Reviews and Analysis has increased these days, and it is a big achievement for the Quality Assurance Industry.
Software Quality Assurance Plan
The Software Quality Assurance Plan (SQA Plan) provides a road map for instituting software quality assurance. Developed by the SQA group, the plan serves as a template for SQA activities that are instituted for each software project.
There are a variety of standards recommended for SQA Plans. However, the general idea is to describe the purpose and scope of the document and indicate those software process activities in the initial sections that are covered by quality assurance. All documents noted in the plan are listed and all applicable standards are noted. The management section of the plan describes SQA’s place in the organizational structure, SQA tasks and activities and their placement throughout the software process, and the organizational roles and responsibilities relative to product quality.
One of the most important sections is that of the Documentation produced and used as part of the software process. These include:
- Project documents (e.g. project plan)
- Models (e.g. ERDs, class hierarchies)
- Technical Documents (e.g. specifications, test plans)
- User Documents (e.g. help files)
The nomenclature for these documents is vast and continuing to evolve.
The standards, practices, and conventions section lists all applicable standards and practices that are applied during the software process (e.g. document standards, coding standards, and review guidelines). In addition, all project, process, and (in some instances) product metrics that are to be collected as part of software engineering work are listed. The reviews and audits section identifies the reviews and audits to be conducted by the software engineering team, the SQA group, and the customer. It provides an overview of the approach for each review and audit.
The test section references the Software Test Plan and Procedure. It also defines test record-keeping requirements. Problem reporting and corrective action defines procedures for reporting, tracking, and resolving errors and defects, and identifies the organizational responsibilities for these activities.
The remainder of the plan identifies the tools and methods that will be used during the Software Quality Assurance Activities.
Software Quality Assurance and DevOps
In a pure DevOps world, Quality Assurance is no longer the gatekeeper between development and operations – the bottleneck. QA is an enabler. On one side, Quality Assurance works together with development in trying to add more of their test runs into the continuous integration system. The idea is to have minimal (rather zero) human intervention. These tests must be able to generate their own test results data. On the other hand, QA works with operations to collaborate on monitoring tools; for example to continuously run smoke or acceptance tests in Production.