Metrics

Metrics
Traditional
Object-Oriented
Fan-in/fan-out
Weighted methods per class
Lines of code
Cyclomatic complexity*
Comment percentage
Length of identifiers
Response for a class
Lack of cohesion of methods*
Coupling between objects*
Depth of inheritance tree
Depth of conditional nesting
Fog index
Number of children
Number of overriding operations
* November 2002
see http://satc.gsfc.nasa.gov/support/STC_APR98/apply_oo/apply_oo.doc
Nov 2002
91.3913
R. McFadyen
1
Traditional Metrics
Fan-in/fan-out
Fan-in is a measure of the number
of functions that call some other
function, say X
Fan-out is a measure of the
number of functions which are
called by a function, say X.
(See RFC)
Cyclomatic
complexity
Nov 2002
CC is a count of the number of test
cases required to test comprehensively
91.3913
R. McFadyen
2
Traditional Metrics
Lines of Code
LOC can be counted as
•lines (LOC)
•non-comment non-blank lines
(NCNB)
•executable statements (EXEC)
Note that NASA uses executable
lines of code to evaluate size
Comment
percentage
Nov 2002
Calculated as the total number of
comments divided by the {total
lines of code less the number of
blank lines}
91.3913
R. McFadyen
3
Traditional Metrics
Depth of
conditional
nesting
Measure of the depth of nesting of
IF statements in programs
Length of
identifiers
Measures average length of
distinct identifiers
Fog index
Measure of the average length of
words and sentences in documents.
The higher the value for the Fog
index, the more difficult ...
Nov 2002
91.3913
R. McFadyen
4
OO Metrics
Weighted
methods per
class
WMC is the number of methods
included in a class weighted by the
complexity of each method
Response for a
class
RFC is a count of all methods that
can be invoked in response to a
message to an object of the class
Nov 2002
91.3913
R. McFadyen
5
OO Metrics
Lack of cohesion
of methods
LOCM measures the dissimilarity
of methods in a class. A highly
cohesive module stands alone.
Lack of cohesion increases
complexity.
Coupling
between objects
CBO is a count of the number of
other classes to which a class is
coupled. Measured by counting the
number of distinct non-inheritance
related class hierarchies on which
a class depends
Nov 2002
91.3913
R. McFadyen
6
OO Metrics
Depth of
inheritance tree
DIT is the maximum number of
steps from the class node to the
root of the tree
Number of
children
NOC is the number of immediate
subclasses subordinate to a class in
the hierarchy
Number of
overriding
operations
Number of operations in a
superclass that are overridden in a
subclass
Nov 2002
91.3913
R. McFadyen
7
WMC
Weighted
methods per
class
WMC is the number of methods
included in a class weighted by the
complexity of each method
How does one count this?
a) simply count the number of methods, or,
b) sum the complexities of the methods (complexity might be
rated: 1 Simple, 2 Moderately complex, 3 Complex)
Nov 2002
91.3913
R. McFadyen
8
WMC
Nov 2002
91.3913
R. McFadyen
9
RFC
Response for a
class
RFC is a count of all methods that
can be invoked in response to a
message to an object of the class
How does one count this?
For a class, we count the number of distinct methods that can
be invoked in response to a message, including all methods
within the class hierarchy
For a class, we count all messages that can be sent by all
methods in the class
Nov 2002
91.3913
R. McFadyen
10
RFC
Nov 2002
91.3913
R. McFadyen
11
LCOM
Lack of cohesion
of methods
LOCM measures the dissimilarity
of methods in a class. A highly
cohesive module stands alone.
Lack of cohesion increases
complexity.
How does one count this?
We need a way of measuring cohesiveness (or not).
Possibilities:
a) compute the average over all attributes in a class
number of methods using the attribute
total number of methods
convert to a percentage and subtract from 100
Nov 2002
91.3913
R. McFadyen
12
LCOM
Possibilities (continued):
b) for each method, create a set of the attributes it accesses.
For each pair of methods, perform the intersection of
attributes. If an intersection is not empty put the set in P; if it
is empty put the set in Q.
The measure is the difference in cardinalities of P and Q:
LCOM =
P -
Q
if
P >
Q
otherwise LCOM = 0
Nov 2002
91.3913
R. McFadyen
13
LCOM
Nov 2002
91.3913
R. McFadyen
14
CBO
Coupling
between objects
CBO is a count of the number of
other classes to which a class is
coupled. Measured by counting the
number of distinct non-inheritance
related class hierarchies on which
a class depends
How does one count this?
• count the number of distinct noninheritance-related class
hierarchies on which a class depends
Nov 2002
91.3913
R. McFadyen
15
CBO
Nov 2002
91.3913
R. McFadyen
16
DIT
Depth of
inheritance tree
Nov 2002
DIT is the maximum number of
steps from the class node to the
root of the tree
91.3913
R. McFadyen
17
NOC
Number of
children
NOC is the number of immediate
subclasses subordinate to a class in
the hierarchy
How does one count this?
• the number of immediate subclasses subordinate to a class in
the hierarchy
Nov 2002
91.3913
R. McFadyen
18
NOC
Nov 2002
91.3913
R. McFadyen
19
CC
Cyclomatic
complexity
CC is a count of the number of test
cases required to test comprehensively
CC measures the amount of decision logic in a module.
A value of 10 or less is the general recommendation.
Formally, based on a program’s flowgraph,
Cyclomatic complexity
= number of edges
– number of nodes
+2
Nov 2002
91.3913
R. McFadyen
20
CC
Control flowgraphs describe the logic structure of software
modules.
• A module corresponds to a single function or subroutine in
typical languages, has a single entry and exit point, and is
able to be used as a design component via a call/return
mechanism.
Each flowgraph consists of nodes and edges.
• nodes represent computational statements or expressions,
• edges represent transfer of control between nodes.
Nov 2002
91.3913
R. McFadyen
21
Flowgraph Construction - Sequence
x=z
y=7
CC=?
y=10
Sequences are reducible to a single node:
Nov 2002
91.3913
R. McFadyen
22
Flowgraph Construction – If then
if x>4 then
y=7
…
CC=
end if
Nov 2002
91.3913
R. McFadyen
23
Flowgraph Construction – If Else
if x>4 then
y=7
…
CC=
else
y=10
…
end if
Nov 2002
91.3913
R. McFadyen
24
Flowgraph Construction - While
while x>0 do
x=x/2
…
CC=
end while
Nov 2002
91.3913
R. McFadyen
25
Flowgraph Construction – Do Until
Do
…
Read x
CC=
Until x=0
Nov 2002
91.3913
R. McFadyen
26
Program
FindMean (FILE ScoreFile)
{ float SumOfScores = 0.0;
int NumberOfScores = 0;
float Mean=0.0; float Score;
Read(ScoreFile, Score);
2 while (! EOF(ScoreFile) {
3 if (Score > 0.0 ) {
SumOfScores = SumOfScores + Score;
NumberOfScores++;
}
4
5
Read(ScoreFile, Score);
}
/* Compute the mean and print the result */
6 if (NumberOfScores > 0) {
Mean = SumOfScores / NumberOfScores;
printf(“ The mean score is %f\n”, Mean);
} else
printf (“No scores found in file\n”);
9 }
Nov 2002
1
91.3913
R. McFadyen
7
8
27
Flowgraph
1
Cyclomatic
complexity
2
= CC
3
= 11-9+2 = 4
4
decision structures:
5
•one while
6
7
8
•one if then
•one if else
9
Nov 2002
91.3913
R. McFadyen
28
CC
Nov 2002
91.3913
R. McFadyen
29