- Software, Software Engineering, and the Software Engineering Process
- Object Orientation
- Defect Management
- Specifying Quality
- Views of Quality
- Internal Quality and External Quality: Form Complements Function
- Software Product Quality Attributes
- Assessing Product Quality
- Achieving Quality Goals
Software Product Quality Attributes
From the perspective of their orientation toward the fitness-for-purpose consideration on the one hand and the fitness-of-form consideration on the other, software quality attributes may be grouped into the following two categories:
External quality attributes
Internal quality attributes (Fenton, 1991)
External Quality Attributes
External attributes are those that can be measured in relation to the context or the environment in which the product persists (Fenton, 1991). For example, modularity (internal) and reliability (external) are both attributes of a software product. However, the average customer is likely to be far more interested in the reliability of software he or she will receive than whether proper abstract data types have been developed to increase the modularity of the product.
Consistent with recent apparent consensus arrived at among investigators and practitioners, and as reflected through IEEE standards, external product attributes of importance relate to the following:
Functionality (How closely does the product meet the requirements as stated or implied in the requirements document?)
Reliability (What is the likelihood of failure-free operation?)
Usability (What is the extent to which the product is convenient and practical to use?)
Maintainability (What is the level of ease with which software can be corrected, adapted, or enhanced to fit an altered set of requirements?)
It should be noted that a number of attributes including reusability, efficiency, and cost-effectiveness conceivably might be added to this list. We have not included them for reasons enumerated next.
Reusability measures the degree to which components of a software product can be used in constructing other software of similar utility. This is largely an internal product attribute. (It is also in most cases of greater concern to the developer than to the customer.)
Efficiency measures the degree to which software makes good use of the hardware resources available to it. Efficiency may be absorbed into the concept of functionality, as the resource utilization requirements of a software system usually feature prominently in a requirements document.
Cost-effectiveness has at least two distinct meanings when viewed as a software quality attribute. First, it may represent a measure of the level of efficacy and economy by which available resources were or are being utilized in the process of creating a software product. This is clearly a process attribute that, for the moment, lies outside the scope of our discussion. Second, it may represent the extent to which the price paid for a software product is recouped through effective and productive utilization of the product in the organization. In this context, the effectiveness becomes a function of other external attributes of software quality, such as reliability and functionality, and also of how intelligently the customer has put the product to use. The cost part becomes a function of the cost-effectiveness of the process, and also the marketing decision made about the level of profit to be made by the software vendor. In our opinion, this is not a direct and external product quality attribute.However, on occasion there are some internal attributes (attributes that represent the extent of fitness-of-form), to an extent identifiable and measurable and utilized by "informed" customers, which may be predictive of important external attributes (fitness-for-purpose) of software that are generally harder to measure statically. Reusability and modularity are good examples of such internal attributes.
Customer-Oriented Quality Assessment
As previously mentioned, ultimately, responsible product marketing dictates customer orientation. (This is not meant to imply, however, that customers cannot be educated in what they can expect, or converted to concur with possibly more appropriate or realistic alternatives set forth by a vendor, or for that matter that the views, requirements, restrictions, and abilities of a vendor are not also important.) Accordingly, product attributes assessed to determine the quality of a product must be meaningful to, and in line with, the quality aspirations of the customer. For example, from the external attributes mentioned earlier, reliability is a good example of a customer-oriented attribute, whereas reusability is a developer-oriented one. As such, whereas customers are critically conscious of the reliability of software, they are likely to be largely unconcerned with the degree of the reusability of the components making up the source code. (We concede an exception in the case of general management, as stakeholders in internally developed software, holding an interest in the overall economics of a company's IT department.)
Using the foregoing criteria, we have investigated and classified a variety of product attributes as follows:
Important customer-oriented external product attributes:
Functionality (including efficiency);
Important developer-oriented external product attributes:
Maintainability (discussed later); and
Reusability.As per our earlier discussion, we recognize that informed customers may, on occasion, identify and establish links between developer-oriented quality attributes and customer-oriented ones. In such cases the former attributes also become important to the customer. A good example of this is maintainability.