160 likes | 346 Views
Design Metrics CS 406 Software Engineering I Fall 2001. Aditya P. Mathur. Last update: October 23, 2001. Design Metrics. Design Metrics are useful in measuring the complexity and “goodness” of a design. A large number metrics have been proposed for OO designs .
E N D
Design MetricsCS 406 Software Engineering IFall 2001 Aditya P. Mathur Last update: October 23, 2001
Design Metrics • Design Metrics are useful in measuring the complexity and “goodness” of a design. • A large number metrics have been proposed for OO designs. • Some of these have been validated experimentally, others are mere proposals or have received little or no validation. Design Metrics
Effort • Assumption: The effort in developing a class is determined by the number of methods. • Hence the overall complexity of a class can be measured as a function of the complexity of its methods. Proposal: Weighted Methods per class (WMC) Design Metrics
Let denote the complexity of method WMC • Let class C have methods M1, M2, .....Mn. • How to measure WMC? Design Metrics
WMC: validation • Most classes tend to have a small number of methods, are simple, and provide some specific abstraction and operations. • WMC metric has a reasonable correlation with fault-proneness of a class. Design Metrics
Depth of inheritance tree • Depth of a class in a class hierarchy determines potential for re-use. Deeper classes have higher potential for re-use. • Inheritance increases coupling. Changing classes becomes harder. • Depth of Inheritance (DIT) of class C is the length of the shortest path from the root of the inheritance tree to C. • In the case of multiple inheritance DIT is the maximum length of the path from the root to C. Design Metrics
DIT evaluation • Basili et al. study,1995. • Chidamber and Kemerer study, 1994. • Most classes tend to be close to the root. • Maximum DIT value found to be 10. • Most classes have DIT=0. • DIT is significant in predicting error proneness of a class. Higher DIT leads to higher error-proneness. Design Metrics
Number of children (NOC) • NOC is the number of immediate subclasses of C. • Higher values of NOC suggest reuse of the definitions in the super-class in a larger number of subclasses. • Higher NOC suggests the extent of influence of a class on other elements of a design. Higher influence demands higher quality of that class. Design Metrics
Validation of NOC • Classes generally have a small NOC value. • Vast majority have NOC=0. • Larger NOC value is associated with lower probability of detecting faults in that class. Design Metrics
Coupling between classes (CBC) • Class C1 is coupled to class C2 if at least one method of C1 uses a method or an instance variable of C2. • Coupling is usually easy to identify though often pointers may make it difficult. • CBC of C=total number of other classes to which C is coupled. Design Metrics
Validation of CBC • Most classes are self contained and have CBC=0. • Interface classes tend to have higher CBC values. • CBC is significant in predicting fault-proneness of classes. Design Metrics
Response for a class (RFC) • Response set of class C is the total number of methods that can be invoked when a message is sent to an object of C. • This includes all methods of C and any methods executed outside of C as a result of this message. • RFC of class C is the cardinality of the response set of C. • Note that even when CBC=1 RFC may be high. This indicates that the “volume” of interaction is high. Design Metrics
Validation of RFC • Most classes tend to invoke a small number of methods (low RFC values). • Classes for interface objects tend to have larger RFC values. • RFC is very significant in predicting the fault-proneness of a class. Design Metrics
Lack of cohesion in methods (LCOM) [1] • Let I1 and I2 denote sets of instance variables accessed by methods M1 and M2, respectively, in class C. • M1 and M2 are considered similar, or cohesive, if I1 and I2 are not disjoint. • Let Q be the set of all cohesive method pairs. • Let P be the set of all non-cohesive method pairs. • LCOM=|P| - |Q| if |P| > |Q|, 0 otherwise. Design Metrics
LCOM [2] • A larger number of cohesive pairs implies smaller LCOM. • A high value of LCOM suggests that a class is trying to support multiple abstractions. Perhaps the class needs to be partitioned into smaller and more cohesive classes. • LCOM is not found to be very significant in predicting fault-proneness. Design Metrics
Summary • What are OO metrics? • Metrics for complexity, coupling, and cohesion Design Metrics