Sunteți pe pagina 1din 16

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,

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)

October 23,

Design Metrics

WMC
Let class C have methods M1, M2, .....Mn.

Let
M

cdenote the complexity of method


i
i

How to measure WMC?


WMC

i 1
October 23,

c
i

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.

October 23,

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.

October 23,

Design Metrics

DIT evaluation
Basili et al. study,1995.
Chidamber and Kemerer study, 1994.

October 23,

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.
October 23,

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.

October 23,

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.
October 23,

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,

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,

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 faultproneness of a class.

October 23,

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,

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,

Design Metrics

15

Summary
What are OO metrics?
Metrics for complexity, coupling, and
cohesion

October 23,

Design Metrics

16

S-ar putea să vă placă și