Airplane propeller

Software quality is a simple phrase that is difficult to define. Three of the most important quality management thought leaders of the past century define quality in very different ways.

Philip B Crosby, author of Quality is Free, defines quality as conforming to requirements. Crosby views quality as nearly binary; quality either exists or it does not.  There are no different levels of quality.

Joseph Juran, who popularized the concept of the cost of poor quality, defines quality as fitness for use.  Juran’s writings describe quality as meeting customers’ expectations with a product that is free from deficiencies.

W. Edward Deming, the author of Out of the Crisis, stated that the customer’s definition of quality is the only one that matters, which means that there is no single definition. Each customer (or group of customers) will have their own definition of quality is based on their needs.

While none of these eminent thought leaders agreed on a precise definition of quality, at the core of all three definitions are the needs and requirements of users. This is critical, but software quality is more nuanced. Just meeting user requirements is only one part of the overall quality of a software deliverable. Technical debt, shortcuts taken while developing and maintaining software, can accumulate and make the software buggy and costly to maintain.  Quality will suffer if the process used to develop the software causes it to be late or if the software is not verified before it delivered.  Defining software quality requires a broader framework.

In The Three Aspects of Software Quality, David Chappell proposed that software quality can be viewed in a framework that includes functional, structural and process quality. It is useful to use this framework to operationalize any of the three definitions.

Functional quality.  Functional quality is meeting the users’ needs. To do that you need to gather and deliver the correct requirements in a manner that is usable. Crosby, Juran and Deming’s definitions of quality are most often tied to the concepts of functional quality. Functional quality is typically validated through the use of testing and demonstration. 

Structural quality. Structural quality is an evaluation of how the code is composed against a set of standards.  Structural quality is often thought of as the non-functional requirements of a product or project.  These include concepts such as testability, maintainability, understandability, security and others.  Structural quality is often validated through techniques such as code reviews and code scans.  There are numerous excellent commercial code scanning tools.

Process quality.  Process quality is a measure of how the work was performed. Classic outcome measures of on-time, on-budget, and process and process quality assurance (PPQA) evaluations are examples of how process quality is measured. Process quality often impacts the business value of a product.  Software that is late or costs more than it should will deliver a lower return on investment. The concept of process quality is based on the understanding that a repeatable development process yields software quality. 

User need is the foundation of software quality. However, in order to have a complete understanding of software quality, you need to take into account much more.  Structural and process quality are aspects of quality that impact the potential value of the software.