Principles of quality modeling with design measurement
Software quality means different things to different people. End users expect a high-quality system to support their tasks in a fast, simple, and reliable manner. To a system administrator, a high-quality system is easy to install, adapts to new hardware configurations, and has no side effects with other installed software. For the system developers, a key quality of the system could be that it is easy to adapt to changing requirements.
A quality attribute of a development artifact is any feature or property of the artifact. A fundamental distinction for product quality attributes is between external and internal attributes.
External attributes are properties or features of the product that are externally visible (hence the name), for example, reliability and maintainability. External attributes of products can only be measured with respect to how the product relates to its environment. Poor reliability, for instance, is visible to the user if the software system does not perform as expected. To measure external attributes directly requires additional information besides the product itself. For instance, reliability can be measured in terms of the mean time to failure of the operational product. Thus, external attributes can be measured directly only some time after the product is created.
An internal attribute of a product can be measured in terms of the product itself. Examples of internal product attributes are structural properties such as size or coupling. All information that is needed to quantify the internal attribute is available from a representation of the product. Therefore, these attributes are measurable during and after creation of the product. Internal attributes, however, describe no externally visible quality of a product, and therefore have no inherent meaning in themselves. For example, during the operation of a system, the users will not notice whether the components of that system have loose coupling or not.
If structural design properties are not inherently meaningful, why should we care about them at all? Because we assume they have a causal impact on external quality. Undesirable structural properties such as high coupling or low cohesion indicate a - sometimes necessary - high cognitive complexity. Cognitive complexity is the mental burden put on the persons who have to deal with the design (developers, inspectors, testers, maintainers, etc.). The high cognitive complexity in turn leads to poor external quality, such as increased fault-proneness, or decreased maintainability and testability.
To summarize, external attributes are inherently relevant to the stakeholders in a software system, but can be measured directly only late in the development process. Internal attributes are early available but are not inherently meaningful. They become meaningful only when they are seen as indicators of (or in relation to) external attributes. Besides early availability, the advantages of design measurement are:
Objectivity - the design assessment is repeatable and does not rely on subjective judgment.
Automatable - with SDMetrics, measurement of even large designs can be performed quickly and at a low cost.