Design (Metrics)

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.
Some of these have been validated
experimentally, others are mere proposals or
have received little or no validation.
October 23, 2001
Design Metrics
2
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)
October 23, 2001
Design Metrics
3
WMC
 Let class C have methods M1, M2, .....Mn.
Let
M
c
i
denote the complexity of method
i
 How to measure WMC?
WMC 
n

i 1
October 23, 2001
c
i
Design Metrics
4
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.
October 23, 2001
Design Metrics
5
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.
October 23, 2001
Design Metrics
6
DIT evaluation
 Basili et al. study,1995.
 Chidamber and Kemerer study, 1994.
•
•
•
•
October 23, 2001
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
7
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.
October 23, 2001
Design Metrics
8
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.
October 23, 2001
Design Metrics
9
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.
October 23, 2001
Design Metrics
10
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.
October 23, 2001
Design Metrics
11
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.
October 23, 2001
Design Metrics
12
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.
October 23, 2001
Design Metrics
13
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.
October 23, 2001
Design Metrics
14
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.
October 23, 2001
Design Metrics
15
Summary
What are OO metrics?
Metrics for complexity, coupling, and
cohesion
October 23, 2001
Design Metrics
16