10. fo
rw
ar
d
en
gin
ee
rin
g
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
11. What is the current state?
fo
rw
ar
What should we do?
d
en
Where to start?
gin
ee
How to proceed?
rin
g
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
12. fo
rw
g
rin
ar
ee
d
gin
en
gin
en
ee
se
rin
erv
g
re
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
13. Reverse engineering is analyzing a subject system to:
identify components and their relationships, and
create more abstract representations.
Chikofky & Cross, 90
14. { {
{ {
}
}
}
} { }
A large system contains lots of details.
15. ity?
its qual
ju dge
How to { {
{ {
}
}
}
} { }
A large system contains lots of details.
24. Examples of size metrics
NOM - number of methods
NOA - number of attributes
LOC - number of lines of code
NOS - number of statements
NOC - number of children
Lorenz, Kidd, 1994
Chidamber, Kemerer, 1994
25. McCabe cyclomatic complexity (CYCLO) counts
the number of independent paths through the code of a
function.
McCabe, 1977
it reveals the minimum number of tests to write
interpretation can’t directly lead to improvement action
26. Weighted Method Count (WMC) sums up the
complexity of class’ methods (measured by the metric
of your choice; usually CYCLO).
Chidamber, Kemerer, 1994
it is configurable, thus adaptable to our precise needs
interpretation can’t directly lead to improvement action
27. Depth of Inheritance Tree (DIT) is the (maximum)
depth level of a class in a class hierarchy.
Chidamber, Kemerer, 1994
inheritance is measured
only the potential and not the real impact is quantified
28. Coupling between objects (CBO) shows the number
of classes from which methods or attributes are used.
Chidamber, Kemerer, 1994
it takes into account real dependencies not just declared ones
no differentiation of types and/or intensity of coupling
29. Tight Class Cohesion (TCC) counts the relative
number of method-pairs that access attributes of the
class in common.
Bieman, Kang, 1995
TCC = 2 / 10 = 0.2
interpretation can lead to improvement action
ratio values allow comparison between systems
30. Access To Foreign Data (ATFD) counts how many
attributes from other classes are accessed directly from
a measured class.
Marinescu 2006
37. Problem 1: metrics granularity
?
capture symptoms, not causes of problems
in isolation,
they don’t lead to improvement solutions
38. Problem 1: metrics granularity
?
capture symptoms, not causes of problems
in isolation,
they don’t lead to improvement solutions
Problem 2: implicit mapping
we don’t reason in terms of metrics,
but in terms of design principles
39. 2 big obstacles in using metrics:
Thresholds make metrics hard to interpret
Granularity make metrics hard to use in isolation
41. fo
rw
ar
d
en
gin
ee
rin
g
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
42. fo
rw
ar
How do I understand code?
d
en
gin
ee
rin
g
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
43. fo
rw
ar
How do I understand code?
d
en
How do I improve code?
gin
ee
rin
g
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
44. etr ics!
ith m
de al w
an t to
on ot w
Id
fo
rw
ar
How do I understand code?
d
en
How do I improve code?
gin
ee
rin
g
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
45. How to get an initial understanding of a system?
46. Metric Value
LOC 35175
NOM 3618
NOC 384
CYCLO 5579
NOP 19
CALLS 15128
FANOUT 8590
AHH 0.12
ANDC 0.31
47. Metric Value
LOC 35175
NOM 3618
NOC 384
CYCLO 5579
NOP 19
CALLS 15128
FANOUT 8590
AHH 0.12
ANDC 0.31
48. Metric Value
LOC 35175
NOM 3618
NOC 384
CYCLO 5579
NOP 19
CALLS 15128
FANOUT 8590
ha t?
ww
AHH
An d no 0.12
ANDC 0.31
57. The Overview Pyramid provides a metrics
overview. Lanza, Marinescu 2006
ANDC 0.31
AHH 0.12
20.21 NOP 19
9.42 NOC 384
9.72 NOM 3618 NOM 418
0.15 LOC 35175 15128 CALLS 0.56
CYCLO 5579 8590 FANOUT
close to high close to average close to low
58. The Overview Pyramid provides a metrics
overview. Lanza, Marinescu 2006
close to high close to average close to low
59. etr ics!
ith m
de al w
an t to
on ot w
Id
fo
rw
ar
How do I understand code?
d
en
How do I improve code?
gin
ee
rin
g
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
67. God Classes tend to centralize the intelligence of the
system, to do everything and to use data from small
data-classes.
Riel, 1996
68. God Classes tend
to centralize the intelligence of the system,
to do everything and
to use data from small data-classes.
69. God Classes
centralize the intelligence of the system,
do everything and
use data from small data-classes.
70. God Classes
are complex,
are not cohesive,
access external data.
71. God Classes
are complex,
WMC is high
are not cohesive,
TCC is low
access external data.
ATFD more than few
72. God Classes
are complex,
WMC is high
are not cohesive,
TCC is low
access external data.
ATFD more than few
sing
uer ies u
to q s
s in ator
etric per
se m ical o
Co mpo log
73. Detection Strategies are metric-based queries to
detect design flaws. Lanza, Marinescu 2006
Rule 1
METRIC 1 > Threshold 1
AND Quality problem
Rule 2
METRIC 2 < Threshold 2
74. A God Class centralizes too much intelligence in
the system. Lanza, Marinescu 2006
Class uses directly more than a
few attributes of other classes
ATFD > FEW
Functional complexity of the
class is very high
AND GodClass
WMC ! VERY HIGH
Class cohesion is low
TCC < ONE THIRD
75. An Envious Method is more interested in data
from a handful of classes. Lanza, Marinescu 2006
Method uses directly more than
a few attributes of other classes
ATFD > FEW
Method uses far more attributes
of other classes than its own
AND Feature Envy
LAA < ONE THIRD
The used "foreign" attributes
belong to very few other classes
FDP ! FEW
76. Data Classes are dumb data holders.
Lanza, Marinescu 2006
Interface of class reveals data
rather than offering services
WOC < ONE THIRD
AND Data Class
Class reveals many attributes and is
not complex
77. Data Classes are dumb data holders.
Lanza, Marinescu 2006
More than a few public
data
NOAP + NOAM > FEW
AND
Complexity of class is not
high
WMC < HIGH
Class reveals many
OR attributes and is not
Class has many public complex
data
NOAP + NOAM > MANY
AND
Complexity of class is not
very high
WMC < VERY HIGH
78. Shotgun Surgery depicts that a change in an
operation triggers many (small) in a lot of different
operation and classes.
Lanza, Marinescu 2006
98. Shotgun
Surgery has
uses is
has (partial) Feature Data
Envy uses Class
is partially
God has
Intensive Class
Coupling Brain has
has
Method
Extensive Brain has Significant
Coupling Class Duplication
has
is
is
has
Refused
is Tradition
Parent
Breaker
Bequest
has (subclass)
Futile
Hierarchy Lanza, Marinescu 2006
Identity Collaboration Classification
Disharmonies Disharmonies Disharmonies