Upload
tudor-girba
View
3.321
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
Collaborative and practicalreverse engineering researchwith Moose
Tudor Gîrbawww.tudorgirba.com
forward engineering
actual development }
{
}
{
}
{
}
{}
{
}
{
}
{}
{
}
{
reve
rse
engin
eerin
g
Moose is built in Bern
Moose is built in Bern
used for research in several universities
~100 men years of effort
>130 publications
since 1997
an analysis tool
}
{
}
{
}
{}
{
}
{
McCabe = 21
LOC =
753,0
00NOM = 102
Metrics Queries Visualizations ...
}
{
}
{
}
{}
{
}
{
McCabe = 21
LOC =
753,0
00NOM = 102
Metrics Queries Visualizations ...
Metrics compress systems into numbers.
NOM number of methods
LOC number of lines of code
CYCLO McCabe cyclomatic complexity
TCC tight class cohesion
...
Lorentz, Kidd, 1994Chidamber, 1994
McCabe 1977
}
{
}
{
}
{}
{
}
{
McCabe = 21
LOC =
753,0
00NOM = 102
Metrics Queries Visualizations ...
Queries reduce the analysis space.
Detection Strategies are metric-based queries to detect design flaws.
METRIC 1 > Threshold 1
Rule 1
METRIC 2 < Threshold 2
Rule 2
AND Quality problem
Lanza, Marinescu 2006
Example: a God Class centralizes too much intelligence in the system.
ATFD > FEW
Class uses directly more than a
few attributes of other classes
WMC ! VERY HIGH
Functional complexity of the
class is very high
TCC < ONE THIRD
Class cohesion is low
AND GodClass
Lanza, Marinescu, 2006
We can always resort to Smalltalk for querying.
}
{
}
{
}
{}
{
}
{
McCabe = 21
LOC =
753,0
00NOM = 102
Metrics Queries Visualizations ...
Visualization compresses the system into pictures.
Polymetric views show up to 5 metrics.
Color metric
Width metric
Height metric
Position metrics
Lanza, 2003
System Complexity shows class hierarchies.
lines
attributes
methods
Lanza, Ducasse, 2003
Class Blueprint shows class internals.Ducasse, Lanza, 2005
schizophrenic classtwin classes
Package Blueprint shows how classes are used across packages. Ducasse etal, 2007
a sumo package
Distribution Map shows properties over structure. Ducasse etal, 2006
31 parts, 394 elements and 9 properties
Semantic Clustering reveals implementation topics.
user, run, load, message, file, buffer, util
property, AWT, edit, show, update, sp, set
start, buffer, end, text, length, line, count
action, box, component, event, button, layout, GUI
start, length, integer, end, number, pre, count
XML, dispatch, microstar, reader, XE, register, receive
current, buffer, idx, review, archive, endr, TAR
BSH, simple, invocation, assign, untype, general, arbitrary
maximum, label, link, item, code, put, vector
Kuhn etal 2006
9 concepts spread over 394 classes
Softwarenaut explores the package structure.Lungu etal, 2006
Code City shows where your code lives.Wettel, Lanza, 2007
classes are buildings grouped in quarters of packages
Trace Signals reveal similar execution traces.Kuhn, Greevy 2006
lines show traces and colors denote concepts
Feature Views show how features cover classes.Greevy etal, 2006
addFolder addPage
boxes are features and squares are classes colored by activity
Object Dependencies show how features depend on each other.
OpenConnect
Join ChannelSend Message
Lienhard etal, 2007
dependencies between objects and their age measured in features
Object Flow shows how objects move through the system. Lienhard etal, 2007
objects flowing through other objects
Hierarchy Evolution reveals evolution patterns.Girba etal, 2005
histories of classes and of their inheritances
Evolution Radar shows co-change relationships.D’Ambros, Lanza 2006
one package and its co-change relationships
Ownership Map reveals patterns in CVS.Girba etal, 2006
Clone Evolution shows who copied from whom.Balint etal, 2006
colors represent authors
}
{
}
{
}
{}
{
}
{
McCabe = 21
LOC =
753,0
00NOM = 102
Metrics Queries Visualizations ...
}
{
}
{
}
{}
{
}
{
McCabe = 21
LOC =
753,0
00NOM = 102
Metrics Queries Visualizations ...
an analysis tool
an analysis tool
a platform for modeling
Class
Method
Attribute
Access
Inheritance
Package
Namespace
*
belongsTo
*
belongsTo
belongsTopackagedIn
superclass
subclass
* *
InvocationinvokedBy
candidate
*
accessedIn
*
accesses
FAMIX is a language independent meta-model.
FAMIX
Class Method...
FAMIX
Class Method...
Dynamix
Activation... Instance
FAMIX
Class Method...
Dynamix
Activation... Instance
ObjectFlow
Alias...
FAMIX
Class Method...
Dynamix
Activation... Instance
Dude
Duplication...
ObjectFlow
Alias...
FAMIX
Class Method...
Dynamix
Activation... Instance
Dude
Duplication...
CVS
FileHistory
FileVersion
...
ObjectFlow
Alias...
FAMIX
Class Method...
Dynamix
Activation... Instance
Dude
Duplication...
CVS
FileHistory
FileVersion
...
BugsLife
Bug Activity...
ObjectFlow
Alias...
FAMIX
Class Method...
Dynamix
Activation... Instance
Dude
Duplication...
Hismo
ClassHistory
MethodHistory
...
CVS
FileHistory
FileVersion
...
BugsLife
Bug Activity...
ObjectFlow
Alias...
FAMIX
Class Method...
Dynamix
Activation... Instance
Dude
Duplication...
Hismo
ClassHistory
MethodHistory
...
CVS
FileHistory
FileVersion
...
Subversion
FileHistory
FileVersion
...
BugsLife
Bug Activity...
ObjectFlow
Alias...
FAMIX
Class Method...
Dynamix
Activation... Instance
Dude
Duplication...
Hismo
ClassHistory
MethodHistory
...
CVS
FileHistory
FileVersion
...
Subversion
FileHistory
FileVersion
...
BugsLife
Bug Activity...
ObjectFlow
Alias...
...
...
FAMIX
Class Method...
Dynamix
Activation... Instance
Dude
Duplication...
Hismo
ClassHistory
MethodHistory
...
CVS
FileHistory
FileVersion
...
Subversion
FileHistory
FileVersion
...
BugsLife
Bug Activity...
ObjectFlow
Alias...
...
...
FAMIX is now more than a
language independent meta-model
FAMIX Core
Class Method...
Dynamix
Activation... Instance
Dude
Duplication...
Hismo
ClassHistory
MethodHistory
...
CVS
FileHistory
FileVersion
...
Subversion
FileHistory
FileVersion
...
BugsLife
Bug Activity...
ObjectFlow
Alias...
...
...
FAMIX
FAMIX Core
Class Method...
Dynamix
Activation... Instance
Dude
Duplication...
Hismo
ClassHistory
MethodHistory
...
CVS
FileHistory
FileVersion
...
Subversion
FileHistory
FileVersion
...
BugsLife
Bug Activity...
ObjectFlow
Alias...
...
...
FAMIX
FAMIX Core
Class Method...
Dynamix
Activation... Instance
Dude
Duplication...
Hismo
ClassHistory
MethodHistory
...
CVS
FileHistory
FileVersion
...
Subversion
FileHistory
FileVersion
...
BugsLife
Bug Activity...
ObjectFlow
Alias...
...
...
We are now working on FAMIX 3.0.
Would you like to join?
MSE is the exchange file format.
Moose is based on Fame :)
Where to get Fame from?
VisualWorks just download Moose
Java http://smallwiki.unibe.ch/fame/
Python http://smallwiki.unibe.ch/fame/
an analysis tool
a platform for modeling
an analysis tool
a platform for modeling
a platform for visualization
view := ViewRenderer new.view nodes: classes forEach: [:each |
view nodes: each methods.view gridLayout].
view edgesFrom: #superclass.view treeLayout.view open.
Mondrian is an engine for scripting graph visualizations. Meyer etal 2006
EyeSee is an engine for scripting charts.Junker, Hofstetter 2007
CodeCity is an engine for 3D visualizations.Wettel, Lanza, 2007
an analysis tool
a platform for modeling
a platform for visualization
an analysis tool
a platform for modeling
a platform for visualization
a platform for building tools
Repository Meta MondrianUIFAMIX Core
EyeSee
MSE
Repository Meta MondrianUI
Smalltalk
Java
C++
ExternalParser
FAMIX Core
EyeSee
MSE
Repository Meta MondrianUI
Smalltalk
Java
C++
ExternalParser
FAMIX Core
HapaxDynaMoose SoftwarenautChronia SmallDude
EyeSee
Cook CodeCity
MSE
Repository Meta MondrianUI
Smalltalk
Java
C++
ExternalParser
FAMIX Core
HapaxDynaMoose SoftwarenautChronia SmallDude
EyeSee
Cook
CVS
CodeCity
MSE SourceJ-Wiretap
MSE
Repository Meta MondrianUI
Smalltalk
Java
C++
ExternalParser
FAMIX Core
HapaxDynaMoose SoftwarenautChronia SmallDude
EyeSee
Cook
CVS
CodeCity
MSE SourceJ-Wiretap
YellowSubmarine
BugsLife ClusteringConceptAnalysis ...
an analysis tool
a platform for modeling
a platform for visualization
a platform for building tools
an analysis tool
a platform for modeling
a platform for visualization
a platform for building tools
a collaboration
Current TeamStéphane DucasseTudor GîrbaAdrian KuhnToon Verwaest
Previous TeamSerge DemeyerMichele LanzaSander Tichelaar
Current ContributorsHani Abdeen Ilham AllouiGabriela Arevalo Mihai BalintPhilipp Bunge Marco D’AmbrosOrla Greevy Markus Hofstetter Matthias Junker Adrian LienhardMartin von Löwis Mircea LunguMichael Meyer Damien PolletSara Sellos Lucas StreitToon Verwaest Roel Wuyts Richard Wettel
Previous ContributorsTobias Aebi Frank BuchliThomas Bühler Calogero ButeraDaniel Frey Georges GolomingiDavid Gurtner Reinout HeeckMarkus Kobel Michael LocherPietro Malorgio Michael MeerLaura Ponisio Daniel RatiuMatthias Rieger Azadeh Razavizadeh Andreas Schlapbach Daniel SchweizerMauricio Seeberger Lukas SteigerDaniele Talerico Herve VerjusVioleta Voinescu.
Current TeamStéphane DucasseTudor GîrbaAdrian KuhnToon Verwaest
Previous TeamSerge DemeyerMichele LanzaSander Tichelaar
Current ContributorsHani Abdeen Ilham AllouiGabriela Arevalo Mihai BalintPhilipp Bunge Marco D’AmbrosOrla Greevy Markus Hofstetter Matthias Junker Adrian LienhardMartin von Löwis Mircea LunguMichael Meyer Damien PolletSara Sellos Lucas StreitToon Verwaest Roel Wuyts Richard Wettel
Previous ContributorsTobias Aebi Frank BuchliThomas Bühler Calogero ButeraDaniel Frey Georges GolomingiDavid Gurtner Reinout HeeckMarkus Kobel Michael LocherPietro Malorgio Michael MeerLaura Ponisio Daniel RatiuMatthias Rieger Azadeh Razavizadeh Andreas Schlapbach Daniel SchweizerMauricio Seeberger Lukas SteigerDaniele Talerico Herve VerjusVioleta Voinescu.
~ 100 men years
an analysis tool
a platform for modeling
a platform for visualization
a platform for building tools
a collaboration
an analysis tool
a platform for modeling
a platform for visualization
a platform for building tools
a collaboration
an idea
an analysis tool
a platform for modeling
a platform for visualization
a platform for building tools
a collaboration
an idea
moose.unibe.ch
Tudor Gîrbawww.tudorgirba.com
creativecommons.org/licenses/by/3.0/