We have all heard the term quality before. In fact, people use it regularly in phrases such as: "This phone does not take 4K video, it must be a low-quality phone" or "My iPhone is more expensive than your Huawei. Therefore my phone has better quality." However, what one person considers to be a high-quality product another may consider it a low-quality one and vice versa. Therefore, what is an objective definition of quality? In the context of software, what is software internal quality and how is it measured? Why should you care about software quality?
In this three-part series, I discuss the aspect of software quality and answer all of the questions above. This first part of the series focuses on the What. That is, defining the term quality and internal quality of software.
What is quality?
Should the quality of a product be defined based on its speed?... price?... size? If a software system cost $1000, does it make it a "high-quality" software? How can we objectively define quality?
There are two main schools of thought regarding the definition of quality. On the one hand, you have the school that defines quality as the degree to which a product conforms with a set of requirements specifications. For example, let's say there is a set of requirements that a given product must conform to and product A conforms to a greater extent to those requirements than what product B does. Then, based on the provided definition, product A has a higher quality than product B.
On the second school of thought, quality is defined as the degree to which a product satisfies customer's needs. For example, let's assume customers have needs A, B, and C. Product X satisfies one of those needs while product Y satisfies all of them. Then, based on the second school of thought, product Y has higher quality than product X.
I believe both definitions are related because the requirements a product has to satisfy are obtained from the needs of the customers. Therefore, the more a product conforms to a set of user requirements, the more satisfied the customers will be and thus, a higher quality product.
What is the internal quality of software?
When discussing the quality of software, it is essential to take into account not only the extent to which it conforms to a set of requirements and satisfies the needs of customers but also about its internal quality. The internal quality fo software depends on factors that are dependent on its source code. There is an extensive body of research suggesting metrics for measuring the internal quality of software. However, most of those metrics have not been validated theoretically or empirically. Nevertheless, research indicates that the Chidamber & Kemerer Object-Oriented Metrics (CK metrics) are good indicators of the internal quality of software. Without getting into technical details, the six metrics that correspond to the CK metrics are the following:
- Coupling Between Objects
- Response for Call
- Weighted Methods per Call
- Depth of Inheritance Tree
- Number of Children
- Lack of Cohesion in Method
Therefore, gathering those six metrics provides a sense of the internal quality of object-oriented software. But the questions now is, how do we gather those six CK metrics?
In part 2 of this series The What, How, and Why of Software Quality: The How I will provide a detailed description of various tools used for measuring the internal quality of software, the pros and cons of each tool, and my experience using them.
On a day-to-day basis, people subjectively use the term quality. There are two schools of thoughts regarding quality. In the first, the quality of a product is defined based on how much it complies with a set of requirements specifications. In the second school, it is defined based on how much a product satisfies the needs of its customers. However, they could be considered to be similar definitions. There are various metrics used as indicators of internal quality of software, but most of those metrics have not been validated empirically not theoretically. The Chidamber & Kemerer Object-Oriented Metrics are considered to be good indicators of the internal quality of software. However, how do you calculate them? Part 2 of this series will discuss the tools for measuring the internal quality of software.
If you enjoyed this article, please recommend and share. Don't forget to subscribe and follow me on Twitter to stay up-to-date with my latest posts. See you soon in part 2.
How would you rate this article?