5. fo
rw
ar
d
en
gin
ee
rin
g
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
6. 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 } }
} { } } }
7. fo
rw
g
rin
ar
ee
d
gin
en
gin
en
ee
e
rs
rin
ve
g
re
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
8. Reverse engineering is analyzing a subject system to:
identify components and their relationships, and
create more abstract representations.
Chikofky & Cross, 90
9. quality?
udg e its
to j
How {
{
{
{
}
}
}
} { }
A large system contains lots of details.
18. 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
19. 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
20. 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
21. 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
22. 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
23. 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
24. Access To Foreign Data (ATFD) counts how many
attributes from other classes are accessed directly from
a measured class.
Marinescu 2006
30. 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
31. 2 big obstacles in using metrics:
Thresholds make metrics hard to interpret
Granularity make metrics hard to use in isolation
33. et rics!
ith m
o do w
thi ng t
an t no
Iw
fo
rw
ar
How do I understand code?
d
en
How do I improve code?
gin
ee
rin
g
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
34. How to get an initial understanding of a system?
35. Metric Value
LOC 35175
NOM 3618
NOC 384
CYCLO 5579
NOP 19
CALLS 15128
FANOUT 8590
AHH 0.12
ANDC 0.31
36. Metric Value
LOC 35175
NOM 3618
NOC 384
CYCLO 5579
NOP 19
CALLS 15128
FANOUT 8590
t?
wha
AHH
nd now 0.12
A
ANDC 0.31
45. 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
46. The Overview Pyramid provides a metrics
overview. Lanza, Marinescu 2006
close to high close to average close to low
47. rics!
met
do with
o
ng t
n othi
Iw ant
fo
rw
ar
How do I understand code?
d
en
How do I improve code?
gin
ee
rin
g
{ {
{ { { {
} { {
}
} actual development } }
} { } } }
52. God Classes tend to centralize the intelligence of the
system, to do everything and to use data from small
data-classes.
Riel, 1996
53. God Classes tend
to centralize the intelligence of the system,
to do everything and
to use data from small data-classes.
54. God Classes
centralize the intelligence of the system,
do everything and
use data from small data-classes.
55. God Classes
are complex,
are not cohesive,
access external data.
56. God Classes
are complex,
WMC is high
are not cohesive,
TCC is low
access external data.
ATFD more than few
su sing
u erie
to q s
cs in rator
etri pe
se m ical o
C o mpo log
57. 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
58. 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
59. 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 quot;foreignquot; attributes
belong to very few other classes
FDP ! FEW
60. 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
61. 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
62. Shotgun Surgery depicts that a change in an
operation triggers many (small) in a lot of different
operation and classes.
Lanza, Marinescu 2006
78. lines from source 2
lines
from
source 1
exact line exact
chunk bias chunk
79. Significant Duplication:
- It is the largest possible duplication chain uniting
all exact clones that are close enough to each
other.
- The duplication is large enough.
Lanza, Marinescu 2006
81. 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
82. Follow a clear and repeatable process
mb ers!
u
ms of n
in ter
qu ality
ut
n abo
easo
Don’t r
83. QA is part of the the Development Process
http://loose.upt.ro/incode