Reference
M. Lanza, R. Marinescu
“Object-Oriented Metrics in Practice”
Springer, 2006
ISBN 3-540-24429-8
You cannot control what you cannot measure
Tom de Marco
Metrics are functions that assign numbers to
products, processes and resources
Software metrics are measurements which relate
to software systems, processes or related
documents
Metrics compress system properties and traits into
numbers
Let’s see some examples..
Metrics
...
Number of Methods - NOM
Number of Attributes - NOA
Number of Lines of Code - LOC
Number of Statements - NOS
Number of Children - NOC
Cyclomatic Complexity - CYCLO
Weighted Method Count - WMC
Depth of Inheritance Tree - DIT
Coupling Between Objects - CBO
Tight Class Cohesion - TCC
Access To Foreign Data - ATFD
...
The Reengineering Life-Cycle
How do I
understand code?
How do I improve
fo
rw
ing
code?
ar
er
d
ne
How do I improve
en
gi
gi
en
myself?
ne
e
er
rs
ing
ve
re
{ {
{ { { {
} { {
}
}
} }
evolution } }
{ } }
The Reengineering Life-Cycle
How do I
etr ics?
understand code?
ut m
How do I improvebo
sa
fo
code? care
rw
ing
ho I improve
ar
er
d
W do
ne
How
en
gi
gi
en
myself?
ne
e
er
rs
ing
ve
re
{ {
{ { { {
} { {
}
}
} }
evolution } }
{ } }
Metric Value
LOC 35175
NOM 3618
NOC 384
CYCLO 5579
NOP 19
CALLS 15128
FANOUT 8590
AHH 0.12
ANDC 0.31
Metric Value
LOC 35175
NOM 3618
NOC 384
CYCLO 5579
NOP 19
CALLS at?15128
wh
FANOUT d now 8590
An
AHH 0.12
ANDC 0.31
How do I get an
initial understanding of a system?
Characterizing Systems with Metrics
The Overview Pyramid provides a metrics
overview
Inheritance
Size Communication
Lanza & Marinescu, 2006
The Overview Pyramid provides a metrics
overview
NOP 19
NOC 384
NOM 3618
LOC 35175
CYCLO 5579
Size
The Overview Pyramid provides a metrics
overview
20.21 NOP 19
9.42 NOC 384
9.72 NOM 3618
0.15 LOC 35175
CYCLO 5579
Size
The Overview Pyramid provides a metrics
overview
3618 NOM
15128 CALLS
8590 FANOUT
Communication
The Overview Pyramid provides a metrics
overview
3618 NOM 4.18
15128 CALLS 0.56
8590 FANOUT
Communication
The Overview Pyramid provides a metrics
overview
Inheritance
ANDC 0.31
AHH 0.12
The Overview Pyramid provides a metrics
overview
Inheritance
ANDC 0.31
AHH 0.12
20.21 NOP 19
9.42 NOC 384
9.72 NOM 3618 3618 NOM 4.18
0.15 LOC 35175 15128 CALLS 0.56
CYCLO 5579 8590 FANOUT
Size Communication
The Overview Pyramid provides a metrics
overview
Inheritance
ANDC 0.31
AHH 0.12
20.21 NOP 19
9.42 NOC 384
9.72 NOM 3618 3618 NOM 4.18
0.15 LOC 35175 15128 CALLS 0.56
CYCLO 5579 8590 FANOUT
Size Communication
close to low close to average close to high
The Overview Pyramid provides a metrics
overview
Inheritance
Size Communication
close to low close to average close to high
Assessing Software Design with Metrics
Identity Disharmony
How do I
define
myself?
Identity Disharmony God Class
Data Class
Brain Class
How do I Feature Envy
define
myself?
Brain Method
Collaboration Disharmony
How do I
interact with
others?
Collaboration Disharmony
Intensive Coupling
Dispersive Coupling
How do I Shotgun Surgery
interact with
others?
Classification Disharmony
How do I define
myself with respect to
my ancestors and
descendants?
Classification Disharmony
Futile Hierarchy
Tradition Breaker
How do I define Refused Parent Bequest
myself with respect to
my ancestors and
descendants?
God Class
“In a good object-oriented design
the intelligence of a system is uniformly distributed
among the top-level classes.”
Arthur Riel, 1996
God Classes
God Classes
‣ God Classes tend to centralize the intelligence of the
system, to do everything and to use data from small data-
classes
God Classes
‣ God Classes tend to centralize the intelligence of the
system, to do everything and to use data from small data-
classes
‣ God Classes tend
God Classes
‣ God Classes tend to centralize the intelligence of the
system, to do everything and to use data from small data-
classes
‣ God Classes tend
‣ to centralize the intelligence of the system
God Classes
‣ God Classes tend to centralize the intelligence of the
system, to do everything and to use data from small data-
classes
‣ God Classes tend
‣ to centralize the intelligence of the system
‣ to do everything and
God Classes
‣ God Classes tend to centralize the intelligence of the
system, to do everything and to use data from small data-
classes
‣ God Classes tend
‣ to centralize the intelligence of the system
‣ to do everything and
‣ to use data from small data-classes
God Classes
‣ God Classes tend to centralize the intelligence of the
system, to do everything and to use data from small data-
classes
‣ God Classes tend
‣ to centralize the intelligence of the system
‣ to do everything and
‣ to use data from small data-classes
‣ God Classes
God Classes
‣ God Classes tend to centralize the intelligence of the
system, to do everything and to use data from small data-
classes
‣ God Classes tend
‣ to centralize the intelligence of the system
‣ to do everything and
‣ to use data from small data-classes
‣ God Classes
‣ are complex => high WMC
God Classes
‣ God Classes tend to centralize the intelligence of the
system, to do everything and to use data from small data-
classes
‣ God Classes tend
‣ to centralize the intelligence of the system
‣ to do everything and
‣ to use data from small data-classes
‣ God Classes
‣ are complex => high WMC
‣ are not cohesive => low TCC
God Classes
‣ God Classes tend to centralize the intelligence of the
system, to do everything and to use data from small data-
classes
‣ God Classes tend
‣ to centralize the intelligence of the system
‣ to do everything and
‣ to use data from small data-classes
‣ God Classes
‣ are complex => high WMC
‣ are not cohesive => low TCC
‣ access external data => non-zero ATFD
God Class Detection Strategy
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
Design Flaws do not come alone
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
Identity Collaboration Classification
Disharmonies Disharmonies Disharmonies
And Now?
Break & Exit
Break & Exit
Break & Exit
Break & Exit
!
bers
num
rm s of
y in te
ualit
bo ut q
as on a
on ot re
D
Metrics are only half the truth
Can we understand a painting by measuring the
frame and counting the colors?
Part III
Visual Software Analysis
[Software is] anything
but hardware, [...] the "soft"
part is the intangible objects
inside the computer.
Source Code = Text
Programming = Writing
/***************************************************************************/ if(i<0||E-S&&b[E]&&y-E<2&E-y<2)m=I; /* K capt. or bad castling */
/* micro-Max, */ if(m>=l)goto C; /* abort on fail high */
/* A chess program smaller than 2KB (of non-blank source), by H.G. Muller */
/***************************************************************************/
/* version 3.2 (2000 characters) features: */
/* - recursive negamax search */
/* - quiescence search with recaptures */
/* - recapture extensions */ if(h=d-(y!=z)) /* remaining depth(-recapt.)*/
/* - (internal) iterative deepening */ {v=p<6?b[x+8]-b[y+8]:0; /* center positional pts. */
/* - best-move-first 'sorting' */ b[G]=b[H]=b[x]=0;b[y]=u&31; /* do move, strip virgin-bit*/
/* - a hash table storing score and best move */ if(!(G&M)){b[F]=k+6;v+=30;} /* castling: put R & score */
/* - full FIDE rules (expt minor ptomotion) and move-legality checking */ if(p<3) /* pawns: */
{v-=9*(((x-2)&M||b[x-2]!=u)+ /* structure, undefended */
#define F(I,S,N) for(I=S;I<N;I++) ((x+2)&M||b[x+2]!=u)-1); /* squares plus bias */
#define W(A) while(A) if(y+r+1&S){b[y]|=7;i+=C;} /* promote p to Q, add score*/
#define K(A,B) *(int*)(T+A+(B&8)+S*(B&7)) }
#define J(A) K(y+A,b[y])-K(x+A,u)-K(H+A,t) v=-D(24-k,-l-(l>e),m>q?-m:-q,-e-v-i, /* recursive eval. of reply */
J+J(0),Z+J(8)+G-S,F,y,h); /* J,Z: hash keys */
#define U 16777224 v-=v>e; /* delayed-gain penalty */
struct _ {int K,V;char X,Y,D;} A[U]; /* hash table, 16M+8 entries*/ if(z==9) /* called as move-legality */
{if(v!=-I&x==K&y==L) /* checker: if move found */
int V=112,M=136,S=128,I=8e4,C=799,Q,N,i; /* V=0x70=rank mask, M=0x88 */ {Q=-e-i;O=F;return l;} /* & not in check, signal */
v=m; /* (prevent fail-lows on */
char O,K,L, } /* K-capt. replies) */
w[]={0,1,1,3,-1,3,5,9}, /* relative piece values */ b[G]=k+38;b[F]=b[y]=0;b[x]=u;b[H]=t; /* undo move,G can be dummy */
o[]={-16,-15,-17,0,1,16,0,1,16,15,17,0,14,18,31,33,0, /* step-vector lists */ if(Y&8){m=v;Y&=~8;goto A;} /* best=1st done,redo normal*/
7,-1,11,6,8,3,6, /* 1st dir. in o[] per piece*/ if(v>m){m=v;X=x;Y=y|S&G;} /* update max, mark with S */
6,3,5,7,4,5,3,6}, /* initial piece setup */ } /* if non castling */
b[129], /* board: half of 16x8+dummy*/ t+=p<5; /* fake capt. for nonsliding*/
T[1035], /* hash translation table */ if(p<3&6*k+(y&V)==S /* pawn on 3rd/6th, or */
||(u&~24)==36&j==7&& /* virgin K moving sideways,*/
n[]=".?+nkbrq?*?NKBRQ"; /* piece symbols on printout*/ G&M&&b[G=(x|7)-(r>>1&7)]&32 /* 1st, virgin R in corner G*/
&&!(b[G^1]|b[G^2]) /* 2 empty sqrs. next to R */
D(k,q,l,e,J,Z,E,z,n) /* recursive minimax search, k=moving side, n=depth*/ ){F=y;t--;} /* unfake capt., enable e.p.*/
int k,q,l,e,J,Z,E,z,n; /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/ }W(!t); /* if not capt. continue ray*/
{ /* e=score, z=prev.dest; J,Z=hashkeys; return score*/ }}}W((x=x+9&~M)-B); /* next sqr. of board, wrap */
int j,r,m,v,d,h,i=9,F,G; C:if(m>I/4|m<-I/4)d=99; /* mate is indep. of depth */
char t,p,u,x,y,X,Y,H,B; m=m+I?m:-D(24-k,-I,I,0,J,Z,S,S,1)/2; /* best loses K: (stale)mate*/
struct _*a=A; if(!a->K|(a->X&M)!=M|a->D<=d) /* if new/better type/depth:*/
/* lookup pos. in hash table*/ {a->K=Z;a->V=m;a->D=d;A->K=0; /* store in hash,dummy stays*/
j=(k*E^J)&U-9; /* try 8 consec. locations */ a->X=X|8*(m>q)|S*(m<l);a->Y=Y; /* empty, type (limit/exact)*/
W((h=A[++j].K)&&h-Z&&--i); /* first empty or match */ } /* encoded in X S,8 bits */
a+=i?j:0; /* dummy A[0] if miss & full*/ /*if(z==8)printf("%2d ply, %9d searched, %6d by (%2x,%2x)
if(a->K) /* hit: pos. is in hash tab */ n",d-1,N,m,X,Y&0x77);*/
{d=a->D;v=a->V;X=a->X; /* examine stored data */ }
if(d>=n) /* if depth sufficient: */ if(z&8){K=X;L=Y&~M;}
{if(v>=l|X&S&&v<=q|X&8)return v; /* use if window compatible */ return m;
d=n-1; /* or use as iter. start */ }
}X&=~M;Y=a->Y; /* with best-move hint */
Y=d?Y:0; /* don't try best at d=0 */ main()
}else d=X=Y=0; /* start iter., no best yet */ {
N++; /* node count (for timing) */ int j,k=8,*p,c[9];
W(d++<n|z==8&N<1e7&d<98) /* iterative deepening loop */
{x=B=X; /* start scan at prev. best */ F(i,0,8)
Y|=8&Y>>4; /* request try noncastl. 1st*/ {b[i]=(b[i+V]=o[i+24]+40)+8;b[i+16]=18;b[i+96]=9; /* initial board setup*/
m=d>1?-I:e; /* unconsidered:static eval */ F(j,0,8)b[16*j+i+8]=(i-4)*(i-4)+(j-3.5)*(j-3.5); /* center-pts table */
do{u=b[x]; /* scan board looking for */ } /*(in unused half b[])*/
if(u&k) /* own piece (inefficient!)*/ F(i,M,1035)T[i]=random()>>9;
{r=p=u&7; /* p = piece type (set r>0) */
j=o[p+16]; /* first step vector f.piece*/ W(1) /* play loop */
W(r=p>2&r<0?-r:-o[++j]) /* loop over directions o[] */ {F(i,0,121)printf(" %c",i&8&&(i+=7)?10:n[b[i]&15]); /* print board */
{A: /* resume normal after best */ p=c;W((*p++=getchar())>10); /* read input line */
y=x;F=G=S; /* (x,y)=move, (F,G)=castl.R*/ N=0;
do{H=y+=r; /* y traverses ray */ if(*c-10){K=c[0]-16*c[1]+C;L=c[2]-16*c[3]+C;}else /* parse entered move */
if(Y&8)H=y=Y&~M; /* sneak in prev. best move */ D(k,-I,I,Q,1,1,O,8,0); /* or think up one */
if(y&M)break; /* board edge hit */ F(i,0,U)A[i].K=0; /* clear hash table */
if(p<3&y==E)H=y^16; /* shift capt.sqr. H if e.p.*/ if(D(k,-I,I,Q,1,1,O,9,2)==I)k^=24; /* check legality & do*/
t=b[H];if(t&k|p<3&!(r&7)!=!t)break; /* capt. own, bad pawn mode */ }
i=99*w[t&7]; /* value of capt. piece t */ }
Old Habits Die Hard
Software Visualization
“The use of the crafts of typography,
graphic design, animation, and
cinematography with modern
human-computer interaction and
computer graphics technology to
facilitate both the human
understanding and effective use of
computer software.”
John Stasko, 1998
Software Visualization
“The use of the crafts of typography,
graphic design, animation, and
cinematography with modern
human-computer interaction and
computer graphics technology to
facilitate both the human
understanding and effective use of
computer software.”
at ion
ua liz
re vis
ftwa
tso
no
A picture is worth a thousand words
ng
ro thousand words
w
A picture is worth a
Visualization is about stories
the
ith ly
g w eral
hin lit
thet
took ds too
L
UM and w or
t ho us
Seeing is Understanding
We are Visual Beings
70% of all brain inputs
come through the eyes
We see with our Brain
‣ 3 types of memory to process
visual information
‣ Iconic, the visual sensory register
‣ Short-term, the working memory
‣ (Long-term)
Iconic and Short-term Memory
Iconic and Short-term Memory
‣ Iconic Memory is a buffer that retains information for less
than 1 second before passing it to short-term memory
Iconic and Short-term Memory
‣ Iconic Memory is a buffer that retains information for less
than 1 second before passing it to short-term memory
‣ Perception of a limited set of attributes is very fast, automatic &
subconscious, therefore called pre-attentive
Iconic and Short-term Memory
‣ Iconic Memory is a buffer that retains information for less
than 1 second before passing it to short-term memory
‣ Perception of a limited set of attributes is very fast, automatic &
subconscious, therefore called pre-attentive
‣ Short-term Memory processes information as “chunks”
Iconic and Short-term Memory
‣ Iconic Memory is a buffer that retains information for less
than 1 second before passing it to short-term memory
‣ Perception of a limited set of attributes is very fast, automatic &
subconscious, therefore called pre-attentive
‣ Short-term Memory processes information as “chunks”
‣ Storage is temporary and of limited capacity (3-9 chunks)
Iconic and Short-term Memory
‣ Iconic Memory is a buffer that retains information for less
than 1 second before passing it to short-term memory
‣ Perception of a limited set of attributes is very fast, automatic &
subconscious, therefore called pre-attentive
‣ Short-term Memory processes information as “chunks”
‣ Storage is temporary and of limited capacity (3-9 chunks)
‣ This explains why charts are more expressive than tables
Pre-attentive Attributes of Form
Orientation Line Length Line Width Size
Shape Curvature Added Marks Enclosure
Pre-attentive Attributes of Form
Line Length Line Width Size
Shape Curvature Added Marks Enclosure
Pre-attentive Attributes of Form
Line Width Size
Shape Curvature Added Marks Enclosure
Pre-attentive Attributes of Form
Size
Shape Curvature Added Marks Enclosure
Pre-attentive Attributes of Form
Shape Curvature Added Marks Enclosure
Pre-attentive Attributes of Form
Curvature Added Marks Enclosure
Pre-attentive Attributes of Form
Added Marks Enclosure
Pre-attentive Attributes of Form
Enclosure
Pre-attentive Attributes of Form
The Polymetric View Principle
number of attributes
number of
number of methods
lines of code
The X-Ray Eclipse Plugin xray.inf.usi.ch
7000+
downloads
Released
Nov 2007 free
“Software is intangible,
having no physical shape or size.”
Thomas Ball, Stephen Eick
“Software Visualization in the
Large”
In Computer, vol. 29, no.4, pp. 33-43,
IEEE Computer Society Press, 1996
How can we solve Ball’s
dilemma?
Metaphors..
“Habitability is the characteristic of source code
that enables programmers, coders, bug-fixers,
and people coming to the code later in its life to
understand its construction and intentions and
to change it comfortably and confidently.”
Richard Gabriel
“Patterns of Software: Tales from the
Software Community”, Oxford University
Press, 1998.
Visualizing Software as Cities
The City Metaphor
The City Metaphor
domain mapping
classes buildings
packages districts
system city
The City Metaphor
domain mapping
classes buildings
packages districts
system city
The City Metaphor
domain mapping
classes buildings
packages districts
system city
The City Metaphor
domain mapping
classes buildings
packages districts
system city
class metric building property
number of methods (NOM) height
number of attributes (NOA) width, length
package metric district property
nesting level color
The Time Machine
JMol
versions
57 (bi-monthly
snapshots)
time
1999-2007
The Time Machine
JMol
versions
57 (bi-monthly
snapshots)
time
1999-2007
ArgoUML Age Map
org.argouml.language.cpp STDCTokenTypes FacadeMDRImpl
NOA 152, NOM 0, AGE 4
Facade NOA 3, NOM 351, AGE 4
org.argouml.language.php NOA 1, NOM 339, AGE 5
org.argouml.language.csharp CPPParser
NOA 85, NOM 204, AGE 4
org.argouml.language.java
org.argouml.model
JavaRecognizer
NOA 24, NOM 91, AGE 9
JavaTokenTypes
NOA 146, NOM 0, AGE 9
org.argouml.uml.reveng.java
JavaTokenTypes
NOA 175, NOM 0, AGE 9
JavaRecognizer
NOA 79, NOM 176, AGE 9
JHotDraw Fine-grained Age map
Time Travel + Age Map
October 2000
March 2001
September 2001
JHotDraw
March 2002
August 2002 versions
January 2003 8
July 2003
time
January 2004
40 months
Time Travel + Age Map
October 2000
March 2001
September 2001
JHotDraw
March 2002
August 2002 versions
January 2003 8
July 2003
time
January 2004
40 months
Time Travel + Age Map
October 2000
March 2001
September 2001
JHotDraw
March 2002
August 2002 versions
January 2003 8
July 2003
time
January 2004
40 months
Time Travel + Age Map
October 2000
March 2001
September 2001
JHotDraw
March 2002
August 2002 versions
January 2003 8
July 2003
time
January 2004
40 months
Time Travel + Age Map
October 2000
March 2001
September 2001
JHotDraw
March 2002
August 2002 versions
January 2003 8
July 2003
time
January 2004
40 months
Time Travel + Age Map
October 2000
March 2001
September 2001
JHotDraw
March 2002
August 2002 versions
January 2003 8
July 2003
time
January 2004
40 months
Time Travel + Age Map
October 2000
March 2001
September 2001
JHotDraw
March 2002
August 2002 versions
January 2003 8
July 2003
time
January 2004
40 months
Time Travel + Age Map
October 2000
March 2001
September 2001
JHotDraw
March 2002
August 2002 versions
January 2003 8
July 2003
time
January 2004
40 months
ArgoUML.Model’s Shotgun Surgery Map
Facade AggregationKind VisibilityKind
NOM 140/337 NOM 3/3 NOM 4/4
PseudostateKind
NOM 6/6
Model
NOM 28/44
Shotgun surgery
CodeCity codecity.inf.usi.ch
3000+
downloads
Released
Mar 2008 free
CodeCity codecity.inf.usi.ch
CodeCity
3000+
downloads
Released
Mar 2008 free
Part IV
Epilogue
Reflections
Reflections
Software Visualization is
Reflections
Software Visualization is
a means to make the intangible tangible
Reflections
Software Visualization is
a means to make the intangible tangible
complementary to software metrics
Reflections
Software Visualization is
a means to make the intangible tangible
complementary to software metrics
still in its infancy
Reflections
Software Visualization is
a means to make the intangible tangible
complementary to software metrics
still in its infancy
an exciting research area
Immersive Software Visualization
‣ R. Wettel, M. Lanza; Program Comprehension through Software Habitability. In
ICPC 2007 (15th IEEE International Conference on Program Comprehension),
pp. 231 - 240, IEEE CS Press, 2007
‣ R. Wettel, M. Lanza; Visualizing Software Systems as Cities. In VISSOFT 2007
(4th IEEE International Workshop on Visualizing Software for Understanding and
Analysis), pp. 92 - 99, IEEE CS Press, 2007
‣ R. Wettel, M. Lanza; Visually Localizing Design Problems with Disharmony
Maps. In Softvis 2008 (4th ACM International Symposium on Software
Visualization), pp. 155 - 164, ACM Press, 2008
‣ R. Wettel, M. Lanza; Visual Exploration of Large-scale System Evolution. In
WCRE 2008 (15th IEEE Working Conference on Reverse Engineering), pp. 219
- 228, IEEE CS Press, 2008
Richard Wettel
‣ R. Wettel, M. Lanza; CodeCity: 3D Visualization of Evolving Large-Scale
Software. In ICSE 2008 (30th ACM/IEEE International Conference on Software
Engineering), pp. 921 - 922, ACM Press, 2008.
CodeCity
Fine-grained Software Evolution
‣ R. Robbes, M. Lanza; A Change-based Approach to Software Evolution. In
Electronic Notes in Theoretical Computer Science (ENTCS), Vol. 166, pp. 93 -
109, January 2007. Elsevier Science Direct, 2007.
‣ R. Robbes, D. Pollet, M. Lanza; Logical Coupling Based on Fine-Grained
Change Information. In WCRE 2008 (15th IEEE Working Conference on
Reverse Engineering), pp. 42 - 46, IEEE CS Press, 2008
‣ R. Robbes, M. Lanza; Example-based Program Transformation. In MODELS
2008 (11th ACM/IEEE International Conference on Model Driven Engineering
Languages and Systems), pp. 174 - 188, Springer LNCS, 2008.
‣ R. Robbes, M. Lanza; How Program History Can Improve Code Completion. In
ASE 2008 (23rd IEEE/ACM International Conference on Automated Software
Engineering), ACM Press, 2008.
Romain Robbes
‣ R. Robbes, M. Lanza; Characterizing and Understanding Development
Sessions. In ICPC 2007 (15th International Conference on Program
Comprehension), pp. 155 - 164, IEEE CS, 2007.
‣ R. Robbes, M. Lanza, M. Lungu; An Approach to Software Evolution Based on
Semantic Change. In FASE 2007 (10th Conference on Fundamental
Approaches to Software Engineering), pp. 27 - 41, Springer LNCS, 2007.
‣ R. Robbes, M. Lanza; SpyWare: A Change-Aware Development Toolset. In
ICSE 2008 (30th ACM/IEEE International Conference on Software Engineering),
pp. 847 - 850, ACM Press, 2008.
Fine-grained Software Evolution
‣ R. Robbes, M. Lanza; A Change-based Approach to Software Evolution. In
Electronic Notes in Theoretical Computer Science (ENTCS), Vol. 166, pp. 93 -
109, January 2007. Elsevier Science Direct, 2007.
‣ R. Robbes, D. Pollet, M. Lanza; Logical Coupling Based on Fine-Grained
Change Information. In WCRE 2008 (15th IEEE Working Conference on
Reverse Engineering), pp. 42 - 46, IEEE CS Press, 2008
.D.
‣ R. Robbes, M. Lanza; Example-based Program Transformation. In MODELS
Ph
2008 (11th ACM/IEEE International Conference on Model Driven Engineering
Languages and Systems), pp. 174 - 188, Springer LNCS, 2008.
‣ R. Robbes, M. Lanza; How Program History Can Improve Code Completion. In
ASE 2008 (23rd IEEE/ACM International Conference on Automated Software
Engineering), ACM Press, 2008.
Romain Robbes
‣ R. Robbes, M. Lanza; Characterizing and Understanding Development
Sessions. In ICPC 2007 (15th International Conference on Program
Comprehension), pp. 155 - 164, IEEE CS, 2007.
‣ R. Robbes, M. Lanza, M. Lungu; An Approach to Software Evolution Based on
Semantic Change. In FASE 2007 (10th Conference on Fundamental
Approaches to Software Engineering), pp. 27 - 41, Springer LNCS, 2007.
‣ R. Robbes, M. Lanza; SpyWare: A Change-Aware Development Toolset. In
ICSE 2008 (30th ACM/IEEE International Conference on Software Engineering),
pp. 847 - 850, ACM Press, 2008.
Synchronous Development
‣ L. Hattori, M. Lanza; Mining the History of Synchronous Changes to Refine
Code Ownership. In MSR 2009 (6th IEEE Working Conference on Mining
Software Repositories), pp. 141 - 150. IEEE CS Press, 2009.
‣ L. Hattori, M. Lanza; An Environment for Synchronous Software Development.
In ICSE 2009 (31st ACM/IEEE International Conference on Software
Engineering - New Ideas and Emerging Results Track), pp. 223 - 226. IEEE CS
Press, 2009.
Lile Hattori
Displaying Synchronous Changes
Displaying Synchronous Changes
Visualizing Synchronous Changes
Visualizing Synchronous Changes
Software Ecosystems & Architecture Recovery
‣ M. Lungu, M. Lanza, T. Gîrba; The Small Project Observatory: Visualizing
Software Ecosystems. In Journal of Science of Computer Programming (SCP),
to be published. Elsevier, 2009
‣ M. Lungu, M. Lanza, T. Gîrba, R. Heek; Reverse Engineering Super-
Repositories. In WCRE 2007 (14th IEEE Working Conference on Reverse
Engineering), pp. 120 - 129, IEEE CS Press, 2007.
‣ M. Lungu, M. Lanza; Exploring Inter-Module Relationships in Evolving Software
Systems. In CSMR 2007 (11th IEEE European Conference on Software
Maintenance and Reengineering), pp. 91 - 100, IEEE CS Press, 2007.
‣ M. Lungu, M. Lanza, T. Gîrba; Package Patterns for Visual Architecture
Recovery. In CSMR 2006 (10th IEEE European Conference on Software
Maintenance and Reengineering), pp. 183 - 192, IEEE CS Press, 2006.
Mircea Lungu
‣ M. Lungu, M. Lanza; Softwarenaut: Exploring Hierarchical System
Decompositions. In CSMR 2006 (10th IEEE European Conference on Software
Maintenance and Reengineering), pp. 349 - 350, IEEE CS Press, 2006.
‣ M. Lungu, J. Malnati, M. Lanza; Visualizing Gnome With The Small Project
Observatory. In MSR 2009 (6th IEEE Working Conference on Mining Software
Repositories), pp. 103 - 106. IEEE CS Press, 2009.
Software Ecosystems & Architecture Recovery
‣ M. Lungu, M. Lanza, T. Gîrba; The Small Project Observatory: Visualizing
Software Ecosystems. In Journal of Science of Computer Programming (SCP),
to be published. Elsevier, 2009
‣ M. Lungu, M. Lanza, T. Gîrba, R. Heek; Reverse Engineering Super-
Repositories. In WCRE 2007 (14th IEEE Working Conference on Reverse
Engineering), pp. 120 - 129, IEEE CS Press, 2007.
.D.
‣ M. Lungu, M. Lanza; Exploring Inter-Module Relationships in Evolving Software
Ph
Systems. In CSMR 2007 (11th IEEE European Conference on Software
Maintenance and Reengineering), pp. 91 - 100, IEEE CS Press, 2007.
‣ M. Lungu, M. Lanza, T. Gîrba; Package Patterns for Visual Architecture
Recovery. In CSMR 2006 (10th IEEE European Conference on Software
Maintenance and Reengineering), pp. 183 - 192, IEEE CS Press, 2006.
Mircea Lungu
‣ M. Lungu, M. Lanza; Softwarenaut: Exploring Hierarchical System
Decompositions. In CSMR 2006 (10th IEEE European Conference on Software
Maintenance and Reengineering), pp. 349 - 350, IEEE CS Press, 2006.
‣ M. Lungu, J. Malnati, M. Lanza; Visualizing Gnome With The Small Project
Observatory. In MSR 2009 (6th IEEE Working Conference on Mining Software
Repositories), pp. 103 - 106. IEEE CS Press, 2009.
Software Architecture Recovery
Reverse Engineering Ecosystems spo.inf.usi.ch
Visualizing Inter-project Dependencies
Visualizing Developer Collaboration
Bug Analysis/Prediction
‣ M. D’Ambros, M. Lanza, M. Lungu; Visualizing Co-Change Information with the
Evolution Radar. In IEEE Transactions on Software Engineering (TSE), to be
published. IEEE CS Press, 2009
‣ M. D’Ambros, M. Lanza; Distributed and Collaborative Software Evolution
Analysis with Churrasco. In Journal of Science of Computer Programming
(SCP), to be published. Elsevier, 2009
‣ M. D’Ambros, M. Lanza; Visual Software Evolution Reconstruction. In Journal
on Software Maintenance and Evolution: Research and Practice (JSME), Vol.
21, No.3, pp. 217 - 232, May 2009. John Wiley & Sons, 2009
‣ M. D’Ambros, M. Lanza, R. Robbes; On the Relationship Between Change
Coupling and Software Defects. In WCRE 2009 (16th IEEE Working Conference
on Reverse Engineering). IEEE CS Press , 2009.
Marco D’Ambros
‣ M. D’Ambros, M. Lanza; A Flexible Framework to Support Collaborative
Software Evolution Analysis. In CSMR 2008 (12th IEEE European Conference
on Software Maintenance and Reengineering), pp. 3 - 12, IEEE CS Press, 2008.
‣ M. D’Ambros, M. Lanza; Reverse Engineering with Logical Coupling. In WCRE
2006 (13th IEEE Working Conference on Reverse Engineering), pp. 189 - 198,
IEEE CS Press, 2006.
‣ M. D’Ambros, M. Lanza; Software Bugs and Evolution: A Visual Approach to
Uncover Their Relationship. In CSMR 2006 (10th IEEE European Conference on
Software Maintenance and Reengineering), pp. 227 - 236, IEEE CS Press,
2006.
0 comments
Post a comment