The design metrics provide an indication of design quality. They also provide a general indication of the amount of testing effort require...
The design metrics provide an indication of design quality. They also provide a general indication of the amount of testing effort required to exercise an OO system.
Binder suggests a broad array of design metrics that have a direct influence on the “testability” of an OO system. The metrics are organized into categories that reflect important design characteristics.
Encapsulation
Lack of cohesion in methods (LCOM).The higher the value of LCOM, the more states must be tested to ensure that methods do not generate side effects.
Percent public and protected (PAP). Public attributes are inherited from other classes and therefore visible to those classes. Protected attributes are a specialization and private to a specific subclass. This metric indicates the percentage of class attributes that are public. High values for PAP increase the likelihood of side effects among classes. Tests must be designed to ensure that such side effects are uncovered.
Public access to data members (PAD). This metric indicates the number of classes (or methods) that can access another class’s attributes, a violation of encapsulation. High values for PAD lead to the potential for side effects among classes. Tests must be designed to ensure that such side effects are uncovered.
Inheritance
Number of root classes (NOR). This metric is a count of the distinct class hierarchies that are described in the design model. Test suites for each root class and the corresponding class hierarchy must be developed. As NOR increases, testing effort also increases.
Fan-in (FIN). When used in the OO context, fan-in is an indication of multiple inheritance. FIN > 1 indicates that a class inherits its attributes and operations from more than one root class. FIN > 1 should be avoided when possible.
Number of children (NOC) and depth of the inheritance tree (DIT). Superclass methods will have to be retested for each subclass.
In addition to these metrics, Binder [BIN94] defines metrics for class complexity and polymorphism. The metrics defined for class complexity include three CK metrics : weighted methods per class, coupling between object classes, and response for a class. In addition, metrics associated with method counts are defined. The metrics associated with polymorphism are highly specialized. A discussion of them is best left to Binder.