What history can tell us
-
Upload
tudor-girba -
Category
Education
-
view
576 -
download
0
description
Transcript of What history can tell us
what history can tell us
Tudor Gîrbawww.tudorgirba.com
2002
PhD2002 2005
PhD2002 2005 2009
PostDoc
PhD2002 2005 2009
PostDoc
Consultant
www.sw-eng.ch
}
{
}
{
}
{
}
{
forw
ard
engi
neer
ing
actual development}
{
}
{
}
{
}
{}
{
}
{
}
{}
{
}
{
forw
ard
engi
neer
ing
actual development}
{
}
{
}
{
}
{}
{
}
{
}
{}
{
}
{
forw
ard
engi
neer
ing
reverse engineering
moose.unibe.ch
Lanza, Ducasse 2003
actual development}
{
}
{
}
{
}
{}
{
}
{
}
{}
{
}
{
forw
ard
engi
neer
ing
reve
rse
engi
neer
ing
actual development}
{
}
{
}
{
}
{}
{
}
{
}
{}
{
}
{
forw
ard
engi
neer
ing
reve
rse
engi
neer
ing
reve
rse
engi
neer
ing
Lehman etal, 2001
Wu etal, 2004
commit
time
Lanza, Ducasse, 2002
Evolution Matrix shows changes in classes
Idle class
Pulsar class
Supernova class
White dwarf class
Lanza, Ducasse, 2002
what is the meta-model?
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
complex, large
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
}
{
}
{
}
{}
{
}
{
what is the meta-model?
to Understand Software Evolution
Modeling History
vorgelegt von
Tudor Gîrba
von Rumänien
Inauguraldissertation der Philosophisch-naturwissenschaftlichen
Fakultät der Universität Bern
Leiter der Arbeit:
Prof. Dr. Stéphane DucasseProf. Dr. Oscar Nierstrasz
Institut für Informatik und angewandte Mathematik
Idleclass
Pulsarclass
Supernovaclass
White dwarfclass
Class
attributes
methods
Idleclass
Pulsarclass
Supernovaclass
White dwarfclass
Class
attributes
methods
Idleclass history
Pulsarclass history
Supernovaclass history
White dwarfclass history
ClassHistory
isPulsarisIdle
ClassVersion
SystemVersion
ClassVersion
ClassHistory
SystemVersion
ClassVersion
ClassHistory
SystemVersion
SystemHistory
ClassVersion
ClassHistory
SystemVersion
SystemHistory
VersionHistory
VersionHistory
VersionHistory
VersionHistoryHismo models history explicitlyGirba 2005
2 4 3 5 7
2 2 3 4 9
2 2 1 2 3
2 2 2 2 2
1 5 3 4 4
what changed? when, how?
1 5 3 4 4
4 2 1 0+++ = 7=
LENOM(C) = ∑ |NOMi(C)-NOMi-1(C)| 2i-nEvolution ofNumber of Methods
LENOM(C)
Gîrba etal 2004
Gîrba etal 2004
1 5 3 4 4
LENOM(C) = ∑ |NOMi(C)-NOMi-1(C)| 2i-n
LENOM(C) 4 2-3 2 2-2 1 2-1 0 20+++ = 1.5=
EENOM(C) = ∑ |NOMi(C)-NOMi-1(C)| 22-i
Latest Evolution ofNumber of Methods
Earliest Evolution ofNumber of Methods
EENOM(C) 4 20 2 2-1 1 2-2 0 2-3+++ = 5.25=
ENOM LENOM EENOM
7 3.5 3.25
7 5.75 1.37
3 1 2
0 0 0
7 1.25 5.25
2 4 3 5 7
2 2 3 4 9
2 2 1 2 3
2 2 2 2 2
1 5 3 4 4
ENOM LENOM EENOM
7 3.5 3.25
7 5.75 1.37
3 1 2
0 0 0
7 1.25 5.25
balanced changer
late changer
dead stable
early changer
ENOM LENOM EENOM
7 3.5 3.25
7 5.75 1.37
3 1 2
0 0 0
7 1.25 5.25
balanced changer
late changer
dead stable
early changer
History can be measured
Evolution
Stability
Historical Max
Growth Trend
...
Number of Methods
Number of Lines of Code
Cyclomatic Complexity
Number of Modules
...
of
common wisdom: recently changed parts are likely to change in the near future
common wisdom: recently changed parts are likely to change in the near future
really?
30% 90%
present
present
past
present
past future
present
past future
present
past future
present
past future
prediction hit
present
past future
YesterdayWeatherHit(present):
past:=histories.topLENOM(start, present)
future:=histories.topEENOM(present, end)
past.intersectWith(future).notEmpty()
prediction hit
Yesterday’s Weather shows the localization of change
hit hit hit
YW = 3 / 8 = 37%
hit hit hit hit hit hit hit
YW = 7 / 8 = 87%
Girba etal, 2004
Detection Strategies are metric-based queriesto detect design flaws
God Class:
class.ATFD() > FEW &
class.WMC() >= VERY HIGH &
class.TCC() < ONE THIRD
what if it is stable?
God Class:
class.ATFD() > FEW &
class.WMC() >= VERY HIGH &
class.TCC() < ONE THIRD
Ratiu etal, 2004
Harmless God Class:
classhistory.last.isGodClass() &
classhistory.STABILITY(NOM) >= VERY HIGH
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
ClassVersion
ClassHistory
SystemVersion
SystemHistory
ClassVersion
ClassHistory
SystemVersion
SystemHistory
InheritanceVersion
InheritanceHistory
ClassVersion
ClassHistory
SystemVersion
SystemHistory
InheritanceVersion
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
A is persistent, B is stable, C was removed, E is newborn ...
Girba etal, 2005
ver .1 ver. 2 ver. 3 ver. 4 ver. 5
A A A A A
B B B B BC C C
D D D E
A
B
D
C
E
A is persistent, B is stable, C was removed, E is newborn ...
Girba etal, 2005
Hierarchy Evolution reveals evolution patterns
A
B
C
D
E
1 2 3 4 5 6
B E
C D
A
Gall etal, 1998
A
B
C
D
E
1 2 3 4 5 6
Version
A
B
C
D
E
1 2 3 4 5 6
changed
Version
changed(i)
HistoryA
B
C
D
E
1 2 3 4 5 6
changed
Version
A
B
C
D
E
1 2 3 4 5 6
{A, B, C, D, E}
Ø
{D, B}{2, 4}
{A, D}{2, 6}
{A, E, C}{5, 6}
{A, D, B}{2}
{A, E, C, D}{6}
{D}{2, 4, 6}
{A}{2, 5, 6}
{C}{3, 5, 6}
Ø{1, 2, 3, 4, 5, 6}
FCA
A
B
C
D
E
1 2 3 4 5 6
{A, B, C, D, E}
Ø
{D, B}{2, 4}
{A, D}{2, 6}
{A, E, C}{5, 6}
{A, D, B}{2}
{A, E, C, D}{6}
{D}{2, 4, 6}
{A}{2, 5, 6}
{C}{3, 5, 6}
Ø{1, 2, 3, 4, 5, 6}
FCA
A
B
C
D
E
1 2 3 4 5 6
Girba etal, 2007
Parallel Inheritanceadd simultaneously children to several classes
Shotgun Surgerychange several classes simultaneously, but do not add methods
actual development}
{
}
{
}
{
}
{}
{
}
{
}
{}
{
}
{
reve
rse
engi
neer
ing
forw
ard
engi
neer
ing
reve
rse
engi
neer
ing
Tudor Gîrbawww.tudorgirba.com
creativecommons.org/licenses/by/3.0/