On the Evolution of Source Code and Software Defects

162
Marco D’Ambros On the Evolution of Source Code and Software Defects REVEAL group @ Faculty of Informatics University of Lugano, Switzerland Dissertation committee Prof. Michele Lanza Prof. Carlo Ghezzi Prof. Cesare Pautasso Prof. Harald C. Gall Prof. Hausi A. Müller

description

The PhD defense presentation of Marco D'Ambros

Transcript of On the Evolution of Source Code and Software Defects

Page 1: On the Evolution of Source Code and Software Defects

Marco D’Ambros

On the Evolution of Source Code and Software Defects

REVEAL group @ Faculty of InformaticsUniversity of Lugano, Switzerland

Dissertation committee

Prof. Michele Lanza

Prof. Carlo Ghezzi

Prof. Cesare Pautasso

Prof. Harald C. Gall

Prof. Hausi A. Müller

Page 2: On the Evolution of Source Code and Software Defects

software engineering and bridges

Software & Bridges

Page 3: On the Evolution of Source Code and Software Defects

Software

Requirements

Page 4: On the Evolution of Source Code and Software Defects

Software

Requirements

Page 5: On the Evolution of Source Code and Software Defects

Software

Requirements

Softwareaging

Page 6: On the Evolution of Source Code and Software Defects

We are here

Ph.D.

Page 7: On the Evolution of Source Code and Software Defects

We are here

Ph.D.

ThesisxAnalysis

techniquesxTool supportx

Conclusionx

Page 8: On the Evolution of Source Code and Software Defects

We are here

Thesisx

Ph.D.

swamp of procrastination

haunted teachwood forest

peaks of toolsmadness

Analysistechniquesx

Tool supportx

Conclusionx

Page 9: On the Evolution of Source Code and Software Defects

We are here

Thesisx

Ph.D.

swamp of procrastination

haunted teachwood forest

peaks of toolsmadness

Analysistechniquesx

Tool supportx

Conclusionx

Page 10: On the Evolution of Source Code and Software Defects

The Evolution of Software Evolution

First software configuration managament (SCSS)

Lehman's laws of software evolution

Boehm's spiral model

RCS CVS First bug tracking system (GNATS) Bugzilla

Extreme Programming Explained: Embrace Changes

Subversion Git

First MSR approach (Ball

et. al.)

First workshop on MSR

MSR becomes a conferenceJazz

Release History Database

(Fischer et. al.)

1980 1990 2000 2010

1982 1986

1988

1992

1997 1999 2003

2004 2006 2007 2008

Cost of software maintenance estimated to be 50-75% of the total

cost of software (Sommerville, Davis)

1995

Cost of software maintenance estimated to be more than 85% (Erlik)

1975

1996

Page 11: On the Evolution of Source Code and Software Defects

ToolPublicationFoundation

First software configuration managament (SCSS)

Lehman's laws of software evolution

Boehm's spiral model

RCS CVS First bug tracking system (GNATS) Bugzilla

Extreme Programming Explained: Embrace Changes

Subversion Git

First MSR approach (Ball

et. al.)

First workshop on MSR

MSR becomes a conferenceJazz

Release History Database

(Fischer et. al.)

1980 1990 2000 2010

1982 1986

1988

1992

1997 1999 2003

2004 2006 2007 2008

Cost of software maintenance estimated to be 50-75% of the total

cost of software (Sommerville, Davis)

1995

Cost of software maintenance estimated to be more than 85% (Erlik)

1975

1996

Page 12: On the Evolution of Source Code and Software Defects

ToolPublication

Infrastructure Implementation

First software configuration managament (SCSS)

Lehman's laws of software evolution

Boehm's spiral model

RCS CVS First bug tracking system (GNATS) Bugzilla

Extreme Programming Explained: Embrace Changes

Subversion Git

First MSR approach (Ball

et. al.)

First workshop on MSR

MSR becomes a conferenceJazz

Release History Database

(Fischer et. al.)

1980 1990 2000 2010

1982 1986

1988

1992

1997 1999 2003

2004 2006 2007 2008

Cost of software maintenance estimated to be 50-75% of the total

cost of software (Sommerville, Davis)

1995

Cost of software maintenance estimated to be more than 85% (Erlik)

1975

1996

Page 13: On the Evolution of Source Code and Software Defects

ToolPublicationEventThe Advent of MSR

First software configuration managament (SCSS)

Lehman's laws of software evolution

Boehm's spiral model

RCS CVS First bug tracking system (GNATS) Bugzilla

Extreme Programming Explained: Embrace Changes

Subversion Git

First MSR approach (Ball

et. al.)

First workshop on MSR

MSR becomes a conferenceJazz

Release History Database

(Fischer et. al.)

1980 1990 2000 2010

1982 1986

1988

1992

1997 1999 2003

2004 2006 2007 2008

Cost of software maintenance estimated to be 50-75% of the total

cost of software (Sommerville, Davis)

1995

Cost of software maintenance estimated to be more than 85% (Erlik)

1975

1996

Page 14: On the Evolution of Source Code and Software Defects

Foundation Infrastructure Implementation

The advent of MSR

The Evolution of Software Evolution

First software configuration managament (SCSS)

Lehman's laws of software evolution

Boehm's spiral model

RCS CVS First bug tracking system (GNATS) Bugzilla

Extreme Programming Explained: Embrace Changes

Subversion Git

First MSR approach (Ball

et. al.)

First workshop on MSR

MSR becomes a conferenceJazz

Release History Database

(Fischer et. al.)

1980 1990 2000 2010

1982 1986

1988

1992

1997 1999 2003

2004 2006 2007 2008

Cost of software maintenance estimated to be 50-75% of the total

cost of software (Sommerville, Davis)

1995

Cost of software maintenance estimated to be more than 85% (Erlik)

1975

1996

Page 15: On the Evolution of Source Code and Software Defects

SCMmeta-data

Software defects

E-mail archive

Documentation Others

30%

23%

15%

8%

0%

Source code

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

MSR Approaches

Page 16: On the Evolution of Source Code and Software Defects

SCMmeta-data

Software defects

E-mail archive

Documentation OthersSource code

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

MSR Approaches

Page 17: On the Evolution of Source Code and Software Defects

SCMmeta-data

Software defects

E-mail archive

Documentation OthersSource code

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

MSR ApproachesPlain

Integrated

Page 18: On the Evolution of Source Code and Software Defects

Holisticsoftwareevolution

Chats

Software defects

IDE data

SCM meta-data

E-mail archive

Models

Documentation

Bytecode

Unit tests

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Source code

Page 19: On the Evolution of Source Code and Software Defects

Holisticsoftwareevolution

Chats

IDE data

SCM meta-data

E-mail archive

Models

Documentation

Bytecode

Unit tests

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Source code

Software defects

Page 20: On the Evolution of Source Code and Software Defects

Holisticsoftwareevolution

Chats

IDE data

SCM meta-data

E-mail archive

Models

Documentation

Bytecode

Unit tests

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Source code

Software defects

Page 21: On the Evolution of Source Code and Software Defects

Holisticsoftwareevolution

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Chats

Software defects

IDE data

SCM meta-data Source code

E-mail archive

Models

Documentation

Bytecode

Unit tests

A. Zeller, MSR keynote 2007

Page 22: On the Evolution of Source Code and Software Defects

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Chats

Software defects

IDE data

SCM meta-data Source code

E-mail archive

Models

Documentation

Bytecode

Unit tests

Our Approach

Page 23: On the Evolution of Source Code and Software Defects

An integrated view of software evolution, combining historical information regarding source code and software defects, supports an extensible set of software maintenance tasks.

D’Ambros, 2010

Page 24: On the Evolution of Source Code and Software Defects

Software defects

SCM meta-data Source code for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

E-mail archive

Page 25: On the Evolution of Source Code and Software Defects

Mevo meta-model

Software defects

SCM meta-data Source code for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

E-mail archive

CSMR 2008

Page 26: On the Evolution of Source Code and Software Defects

Mevo meta-model

Software defects

SCM meta-data Source code for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

E-mail archive

CSMR 2008

Page 27: On the Evolution of Source Code and Software Defects

Mevo meta-model

Software defects

SCM meta-data Source code for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

E-mail archive

CSMR 2008

Page 28: On the Evolution of Source Code and Software Defects

Mevo meta-model

Software defects

SCM meta-data Source code for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

E-mail archive

7 analysis techniques

CSMR 2008

Page 29: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

Conclusionx

Page 30: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

Conclusionx

Page 31: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

Conclusionx

Page 32: On the Evolution of Source Code and Software Defects

Retrospective analysis Future prediction

Page 33: On the Evolution of Source Code and Software Defects

Retrospective analysis

12 3

Change coupling analysis

Bug evolution analysis

Code-bugco-evolution analysis

Page 34: On the Evolution of Source Code and Software Defects

Software defects

SCM meta-data Source code for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

E-mail archive

Change Coupling Analysis

1Goal: Make sense of huge amount of change coupling information

Page 35: On the Evolution of Source Code and Software Defects

Software defects

SCM meta-data Source code for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

E-mail archive

Change Coupling Analysis

1Goal: Make sense of huge amount of change coupling information

Technique name

Page 36: On the Evolution of Source Code and Software Defects

Software defects

SCM meta-data Source code for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

E-mail archive

Change Coupling Analysis

1Goal: Make sense of huge amount of change coupling information

Technique name

Used part ofthe meta-model

Page 37: On the Evolution of Source Code and Software Defects

Software defects

SCM meta-data Source code for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

E-mail archive

Change Coupling Analysis

1Goal: Make sense of huge amount of change coupling information

Technique name

Goal /Question

Used part ofthe meta-model

Page 38: On the Evolution of Source Code and Software Defects

Software defects

SCM meta-data Source code for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

E-mail archive

Change Coupling Analysis

1Goal: Make sense of huge amount of change coupling information

Technique name

Goal /Question

Techniquenumber

Used part ofthe meta-model

Page 39: On the Evolution of Source Code and Software Defects

Software defects

SCM meta-data Source code for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

E-mail archive

Change Coupling Analysis

1Goal: Make sense of huge amount of change coupling information

Page 40: On the Evolution of Source Code and Software Defects

change cou pling•

implicit dependency of files that frequently change together [Gall et al., ICSM 1998]

Page 41: On the Evolution of Source Code and Software Defects
Page 42: On the Evolution of Source Code and Software Defects

Module level to assessarchitecture decay

Page 43: On the Evolution of Source Code and Software Defects

Class level to supportchange impact analysis

Page 44: On the Evolution of Source Code and Software Defects

Packagebrowser

Current projectpackage list

Protocolbrowser

Classbrowser

Methodbrowser

Main EvolutionRadar Visualization

Secondary EvolutionRadar Visualization

The Evolution Radar

Page 45: On the Evolution of Source Code and Software Defects

Packagebrowser

Current projectpackage list

Protocolbrowser

Classbrowser

Methodbrowser

Main EvolutionRadar Visualization

Secondary EvolutionRadar Visualization

System re-documentation and restructuring

Page 46: On the Evolution of Source Code and Software Defects

Tasks Supported

Assessing

architecture decay

Coupled files

Change impact analysis

System evolution analysis

Time

Packagebrowser

Current projectpackage list

Protocolbrowser

Classbrowser

Methodbrowser

Main EvolutionRadar Visualization

Secondary EvolutionRadar Visualization

System re-documentation and restructuring

Page 47: On the Evolution of Source Code and Software Defects

The Evolution Radar shows integrated change coupling information, supporting various maintenance tasks.

MSR 2006, WCRE 2006, TSE 2009 1Change Coupling Analysis

Page 48: On the Evolution of Source Code and Software Defects

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Software defects

SCM meta-data Source code

E-mail archive

Bug Evolution Analysis

2Goal: Study the history of software defects

Page 49: On the Evolution of Source Code and Software Defects

0%

7%

14%

21%

28%

35%

12 Hours 1 Day 1 Week 1 Month 6 Months 1 Year 2 Years More

> 50%

Bug lifetime

distribution in Mozilla

Page 50: On the Evolution of Source Code and Software Defects

System Radiography viewWhich components experienced many defects?

Page 51: On the Evolution of Source Code and Software Defects

System Radiography viewWhich components experienced many defects?

Bug watch viewWhich defects are hard to fix?

Page 52: On the Evolution of Source Code and Software Defects

The visual analysis of bug histories permits the detection of critical software components and exceptional bugs.

VISSOFT 2007 2Bug Evolution Analysis

Page 53: On the Evolution of Source Code and Software Defects

Software defects

SCM meta-data Source code

E-mail archiveSoftware defects

SCM meta-data Source code

E-mail archive

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } } 3Goal: Detect patterns in the co-evolution

of source code and defects

Bug-Code Co-Evolution Analysis

Page 54: On the Evolution of Source Code and Software Defects

SCM meta-data

Code committed in SCM repository

Time

Foo.java

Page 55: On the Evolution of Source Code and Software Defects

SCM meta-data

Code committed in SCM repository

Time

Foo.java

TimeDefects

Defect reported

Foo.java

Page 56: On the Evolution of Source Code and Software Defects

SCM meta-data

Code committed in SCM repository

Time

Foo.java

Bar.java

Boo.java

TimeDefects

Defect reported

Foo.java

Bar.java

Baz.java

Page 57: On the Evolution of Source Code and Software Defects

SCM meta-data

Code committed in SCM repository

Time

Foo.java

Bar.java

Boo.java

Bar.java

Baz.java

Defects

Defect reported

Foo.java

Time

Page 58: On the Evolution of Source Code and Software Defects

SCM meta-data

Code committed in SCM repository

Time

Foo.java

Bar.java

Boo.java

Bar.java

Baz.java

Defects

Defect reported

Foo.java

Time

Page 59: On the Evolution of Source Code and Software Defects

SCM meta-data

Code committed in SCM repository

Time

Foo.java

Bar.java

Boo.java

Bar.java

Baz.java

Defects

Defect reported

Foo.java

Time

Δt

Co-evolution pattern

Page 60: On the Evolution of Source Code and Software Defects

Catalog of 10 formally defined patterns

Page 61: On the Evolution of Source Code and Software Defects

Detecting and visualizing co-evolutionary patterns allows the characterization of software components based on theirco-evolution.

CSMR 2006, JSME 2009 3Bug-Code Co-Evolution Analysis

Page 62: On the Evolution of Source Code and Software Defects

Retrospective analysis Future prediction

Page 63: On the Evolution of Source Code and Software Defects

4Bug

prediction

5Bug prediction with e-mails

6Bug prediction with

change coupling

7Software quality

analysis

Future prediction

Page 64: On the Evolution of Source Code and Software Defects

Software defects

SCM meta-data Source code

E-mail archiveSoftware defects

SCM meta-data Source code

E-mail archive

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } } 4Question: Which bug prediction approach

is the best over different systems?

Bug Prediction

Page 65: On the Evolution of Source Code and Software Defects

100+

PAPERS

Bug prediction is a very active research field

Page 66: On the Evolution of Source Code and Software Defects

Other factors

Code metrics

Previous defects

Process metrics

100+

PAPERS

Bug prediction is a very active research fieldWhich one is better?

Page 67: On the Evolution of Source Code and Software Defects

Moser et al. SCM meta-data

Basili et al.

Kim et al.

Hassan

Source code metrics

Previous defects

Entropy of changes

Page 68: On the Evolution of Source Code and Software Defects

Basili et. al.

Kim et. al.

Hassan

Moser et al. SCM meta-data

Source code metrics

Previous defects

Entropy of changes

Page 69: On the Evolution of Source Code and Software Defects

Basili et. al.

Kim et. al.

Hassan

Moser et al. SCM meta-data

Source code metrics

Previous defects

Entropy of changes

Churn ofcode metrics

Entropy of code metrics

Page 70: On the Evolution of Source Code and Software Defects

Time

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Release X

Page 71: On the Evolution of Source Code and Software Defects

Post release defects

Past “Future”Time

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Release X

Prediction goal

Page 72: On the Evolution of Source Code and Software Defects

Post release defects

Past “Future”Time

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Release X

1 Previous defects

Prediction goal

Page 73: On the Evolution of Source Code and Software Defects

Time

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Release X

Past “Future”

Post release defects

2 SCM meta-data

3 Entropy of changesPrediction goal

1 Previous defects

Page 74: On the Evolution of Source Code and Software Defects

Time

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Release X

Past “Future”

Post release defects

CBO9923.412.120.362.143.8

DIT9923.412.120.362.143.8

NOC9923.412.120.362.143.8

Source code metrics

Prediction goal

4

2 SCM meta-data

3 Entropy of changes

1 Previous defects

Page 75: On the Evolution of Source Code and Software Defects

Time

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Release X

Past “Future”

Post release defects

CBO9923.412.120.362.143.8

DIT9923.412.120.362.143.8

NOC9923.412.120.362.143.8

Prediction goal

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

CBO9923.412.120.362.143.8

DIT9923.412.120.362.143.8

NOC9923.412.120.362.143.8

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

CBO9923.412.120.362.143.8

DIT9923.412.120.362.143.8

NOC9923.412.120.362.143.8

deltas deltas

Entropy and churn of code metrics

Source code metrics

4

5 6

2 SCM meta-data

3 Entropy of changes

1 Previous defects

Page 76: On the Evolution of Source Code and Software Defects

SCM meta-data

Churn of code metrics

Entropy of code metrics

Code metrics

Entropy of changes

Previous defects

Comparing Prediction Models

Predictionperformance

0.2 0.4 0.6 0.8

Page 77: On the Evolution of Source Code and Software Defects

Previous defects

Comparing Prediction Models

Predictionperformance

0.2 0.4 0.6 0.8

Page 78: On the Evolution of Source Code and Software Defects

Comparing Prediction Models

Page 79: On the Evolution of Source Code and Software Defects

100%

90%

75%

50%

score ← score + 3

score ← score + 1

score ← score - 1

Comparing Prediction Models

Page 80: On the Evolution of Source Code and Software Defects

Comparing Prediction Models

100%

90%

75%

50%

score ← score + 3

score ← score + 1

score ← score - 1

Page 81: On the Evolution of Source Code and Software Defects

JDT Core

score Σ= score(s)s ∈ systems

Comparing Prediction Models

100%

90%

75%

50%

score ← score + 3

score ← score + 1

score ← score - 1

100%

90%

75%

50%

score ← score + 3

score ← score + 1

score ← score - 1

100%

90%

75%

50%

score ← score + 3

score ← score + 1

score ← score - 1

100%

90%

75%

50%

score ← score + 3

score ← score + 1

score ← score - 1

100%

90%

75%

50%

score ← score + 3

score ← score + 1

score ← score - 1

PDE Mylyn Equinox Lucene

Page 82: On the Evolution of Source Code and Software Defects

0 4 8 11 15

Entropy of changes

SCM meta-data

Entropy of code metrics

Previous defects

Churn of code metrics

Code metrics

Score

Prediction Performance Across Five Systems

Page 83: On the Evolution of Source Code and Software Defects

0 4 8 11 15

Entropy of changes

SCM meta-data

Entropy of code metrics

Previous defects

Churn of code metrics

Code metrics

Performance not stable across systems

Good performance and fast to compute

Most stable performance but computationally

expensive

Prediction Performance Across Five Systems

Score

Page 84: On the Evolution of Source Code and Software Defects

The entropy and the churn of code metrics are the most stable predictors across different systems.

MSR 2010, EMSE under review 4Bug Prediction

Page 85: On the Evolution of Source Code and Software Defects

Bug Prediction with Change Coupling

Software defects

SCM meta-data Source code

E-mail archiveSoftware defects

SCM meta-data Source code

E-mail archive

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Question: Does change coupling correlate with software defects? 5

Page 86: On the Evolution of Source Code and Software Defects

Change coupling is harmfulWhat is the impact on software defects?

Page 87: On the Evolution of Source Code and Software Defects

Measuring Change Coupling

DistributionNumber of coupled classes

ForceNumber of co-changes

Time decayChanges far in the past count less

Page 88: On the Evolution of Source Code and Software Defects

Correlation with Software Defects

Distribution

Force

Time decay 0.8Spearman’s correlation

Change coupling stronglycorrelates with software defects

+

Page 89: On the Evolution of Source Code and Software Defects

Correlation with Software Defects

Distribution

Force

Time decay 0.8Spearman’s correlation

Change coupling stronglycorrelates with software defects

+

Page 90: On the Evolution of Source Code and Software Defects

Defect Prediction

Explanative power

Codemetrics

SCMdata

Changecoupling

Page 91: On the Evolution of Source Code and Software Defects

0

0.2

0.3

0.5

0.6

0.8

0.9

Defect Prediction

Explanative power

Codemetrics

SCMdata

Changecoupling

Page 92: On the Evolution of Source Code and Software Defects

0

0.2

0.3

0.5

0.6

0.8

0.9

Defect Prediction

Explanative power

Codemetrics

SCMdata

Changecoupling

Predictive power

Codemetrics

SCMdata

Changecoupling

Page 93: On the Evolution of Source Code and Software Defects

0

0.2

0.3

0.5

0.6

0.8

0.9

Defect Prediction

Explanative power

Codemetrics

SCMdata

Changecoupling

Predictive power

Codemetrics

SCMdata

Changecoupling14%

Page 94: On the Evolution of Source Code and Software Defects

Change coupling correlates with software defects and can be used to improve defect prediction models.

WCRE 2009 5Bug Prediction with Change Coupling

Page 95: On the Evolution of Source Code and Software Defects

Software Quality Analysis

Software defects

SCM meta-data Source code

E-mail archiveSoftware defects

SCM meta-data Source code

E-mail archive

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Question: Do design flaws correlate with software defects? 6

Page 96: On the Evolution of Source Code and Software Defects

A class should haveone responsibility

Design Flaws

Design guideline:

(Size responsibility)∝Class

Page 97: On the Evolution of Source Code and Software Defects

A class should haveone responsibility

Design Flaws

Design guideline:

(Size responsibility)∝Class

Violated

Page 98: On the Evolution of Source Code and Software Defects

A class should haveone responsibility

Design Flaws

Design guideline:

(Size responsibility)∝Class

Violated

Does the presence of design

flaws correlate with software

defects?

And their addition?

Page 99: On the Evolution of Source Code and Software Defects

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Design flaws

Source code

Analyzing Design Flaws

~

Page 100: On the Evolution of Source Code and Software Defects

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Design flaws

Source code

Detection strategies

Analyzing Design Flaws

~

Page 101: On the Evolution of Source Code and Software Defects

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Analyzing Design Flaw Deltas

Page 102: On the Evolution of Source Code and Software Defects

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Analyzing Design Flaw Deltas

Time

Page 103: On the Evolution of Source Code and Software Defects

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Analyzing Design Flaw Deltas

Time

2 weeks 2 weeks 2 weeks for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)>0) { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Page 104: On the Evolution of Source Code and Software Defects

Analyzing Design Flaw Deltas

Time

Number of flaws

Page 105: On the Evolution of Source Code and Software Defects

Addition of flaws

Analyzing Design Flaw Deltas

Time

Number of flaws

Page 106: On the Evolution of Source Code and Software Defects

Analyzing Design Flaw Deltas

Time

Number of flaws

Time

Defects

Δt

Addition of flaws

correlation

Page 107: On the Evolution of Source Code and Software Defects

0.4Flaw presence correlation

+

0.6Flaw addition correlation

+

Results on Six Large Systems

Page 108: On the Evolution of Source Code and Software Defects

0.4Flaw presence correlation

+

0.6Flaw addition correlation

+No flaw correlates more than

others consistently across systems

Results on Six Large Systems

Page 109: On the Evolution of Source Code and Software Defects

The presence and addition of design flaws correlates with software defects.

QSIC 2010 6Software Quality Analysis

Page 110: On the Evolution of Source Code and Software Defects

Software defects

SCM meta-data Source code

E-mail archive

Bug Prediction with E-mails

Software defects

SCM meta-data Source code

E-mail archive

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Question: Can bug prediction techniques be improved with e-mail data?7

Page 111: On the Evolution of Source Code and Software Defects

Software entities that are frequently mentioned in development mailing lists are defect prone

Popularity Metrics

Page 112: On the Evolution of Source Code and Software Defects

Do popularity metrics correlate with defects?

Popularity metrics

Spearman’s correlation

Page 113: On the Evolution of Source Code and Software Defects

Equinox Jackrabbit Lucene Maven0

0.2

0.4

0.6

0.8

Do popularity metrics correlate with defects?

Popularity metrics

Spearman’s correlation

Page 114: On the Evolution of Source Code and Software Defects

Equinox Jackrabbit Lucene Maven0

0.2

0.4

0.6

0.8

Do popularity metrics correlate with defects?

Popularity metricsLines of code

Spearman’s correlation

Page 115: On the Evolution of Source Code and Software Defects

POPmetrics

POPmetrics

Do popularity metrics improve existing bug prediction techniques?

Prediction performance

Page 116: On the Evolution of Source Code and Software Defects

0

0.1

0.2

0.3

0.4

0.5

POPmetrics

POPmetrics

SCM data

Codemetrics

Do popularity metrics improve existing bug prediction techniques?

Prediction performance

Page 117: On the Evolution of Source Code and Software Defects

0

0.1

0.2

0.3

0.4

0.5

POPmetrics

POPmetrics

SCM data

Codemetrics

SCM+

POP

Code +

POP

Do popularity metrics improve existing bug prediction techniques?

4%12%

Prediction performance

Page 118: On the Evolution of Source Code and Software Defects

Popularity metrics extracted from development mailing lists correlate with defects and improve existing bug prediction techniques.

FASE 2010 7Bug Prediction with E-mails

Page 119: On the Evolution of Source Code and Software Defects

1Change coupling

analysis

2Bug evolution

analysis

3Code-bug

co-evolution analysis

4Bug prediction

5Bug prediction with e-mails

6Bug prediction with change

coupling

7Software quality

analysis

Retrospective Analysis

Future Prediction

Page 120: On the Evolution of Source Code and Software Defects

Mevo meta-model

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

1Change coupling

analysis

2Bug evolution analysis

3Code-bugco-evolution analysis

4Bug prediction

567Bug prediction

with e-mails

Software quality analysis

Bug prediction with change coupling

Page 121: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

Thesisx

Conclusionx

Page 122: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

Thesisx

Conclusionx

Page 123: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

Thesisx

Conclusionx

Page 124: On the Evolution of Source Code and Software Defects

tools were fundamental for my

daddy's research

Page 125: On the Evolution of Source Code and Software Defects

Mevo meta-model

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Page 126: On the Evolution of Source Code and Software Defects

Churrasco framework

Mevo meta-model

SCP 2010

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Page 127: On the Evolution of Source Code and Software Defects

Churrasco framework

Mevo meta-model

Impo

rter

s

Web interface

SCP 2010

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Page 128: On the Evolution of Source Code and Software Defects

Churrasco framework

Mevo meta-model

Dat

a in

terf

ace

Impo

rter

s

Web interface

Evolution Radar

Bug’s Life

BugCrawler

Pendolino

SCP 2010

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

Page 129: On the Evolution of Source Code and Software Defects

Tool Gallery

Evolution Radar

Page 130: On the Evolution of Source Code and Software Defects

Tool Gallery

Bug’s Life

Page 131: On the Evolution of Source Code and Software Defects

Tool Gallery

BugCrawler

Page 132: On the Evolution of Source Code and Software Defects

Tool Gallery

Pendolino

Page 133: On the Evolution of Source Code and Software Defects

Tool Gallery

Churrasco

Page 134: On the Evolution of Source Code and Software Defects
Page 135: On the Evolution of Source Code and Software Defects

1

2

4

5

6

7 Bug prediction with e-mails

Software quality analysis

Change coupling analysis

3

Bug prediction with change coupling

Bug prediction

Bug evolution analysis

Evolution Radar Bug’s Life BugCrawler PendolinoChurrasco

Code-bugco-evolution analysis

MSR Challenge CSMR 2007

MSR 2006 WCRE 2006

TSE 2009

VISSOFT 2007

WASDeTT 2008

CSMR 2006

MSR 2010

WCRE 2009

QSIC 2010

FASE 2010

Page 136: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

Conclusionx

Page 137: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

Conclusionx

Page 138: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

ConclusionxxIntermezzo

Page 139: On the Evolution of Source Code and Software Defects

Models available through Churrasco web interface

Bug prediction benchmark

Replicating Experiments

Page 140: On the Evolution of Source Code and Software Defects

SVG

Interactive

Visualization

Recent annotations

added

People participating

to the collaboration

Selected figure

information

Metrics mapping

configurator

Package selector

Regular expression

matcher

User

Selected figure

Context menu

Report generator

STTT 2010Collaboration in Churrasco

Page 141: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

ConclusionxxIntermezzo

Page 142: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

ConclusionxxIntermezzo

Page 143: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

ConclusionxxIntermezzo

Page 144: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

ConclusionxxIntermezzo

Page 145: On the Evolution of Source Code and Software Defects
Page 146: On the Evolution of Source Code and Software Defects
Page 147: On the Evolution of Source Code and Software Defects
Page 148: On the Evolution of Source Code and Software Defects
Page 149: On the Evolution of Source Code and Software Defects
Page 150: On the Evolution of Source Code and Software Defects
Page 151: On the Evolution of Source Code and Software Defects
Page 152: On the Evolution of Source Code and Software Defects
Page 153: On the Evolution of Source Code and Software Defects

Developer neo

Limitations

Page 154: On the Evolution of Source Code and Software Defects

Developer neo

Limitations

User studies

More case studies

Other languages

Page 155: On the Evolution of Source Code and Software Defects

Developer neo

Limitations

User studies

More case studies

Other languages

Future Work

Page 156: On the Evolution of Source Code and Software Defects

Developer neo

Limitations

User studies

Exploit author data More case studies

Other languages

Future Work

Page 157: On the Evolution of Source Code and Software Defects

Developer neo

Limitations

User studies

Exploit author data More case studies

Other languages

Mevo

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }Extend the

meta-modelCombinetechniques Future Work

Page 158: On the Evolution of Source Code and Software Defects

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

HOLISTICSOFTWAREEVOLUTION

MOREREPOSITORIES AHEAD

Page 159: On the Evolution of Source Code and Software Defects

Holisticsoftwareevolution

for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j];

if(uCJM1.compare(z)> { /* exchange */ tempStr= data[j-1]; /* sort the data */ data[j-1]= data[j]; data[j]= tempStr;

dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } }

HOLISTICSOFTWAREEVOLUTION

MOREREPOSITORIES AHEAD

Page 160: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

ConclusionxxIntermezzo

Page 161: On the Evolution of Source Code and Software Defects

We are here

swamp of procrastination

haunted teachwood forest

Thesisx

Ph.D.

peaks of toolsmadness

Analysistechniquesx

Tool supportx

ConclusionxxIntermezzo

Page 162: On the Evolution of Source Code and Software Defects

Conference papers1. On the Impact of Design Flaws on Software Defects

Marco D'Ambros, Alberto Bacchelli, Michele LanzaIn Proceedings of QSIC 2010, pp. 23-31.

2. An Extensive Comparison of Bug Prediction ApproachesMarco D'Ambros, Michele Lanza, Romain RobbesIn Proceedings of MSR 2010, pp. 31-41.

3. Are Popular Classes More Defect Prone?Alberto Bacchelli, Marco D'Ambros, Michele LanzaIn Proceedings of FASE 2010, pp. 59-73.

4. On the Relationship Between Change Coupling and Software DefectsMarco D'Ambros and Michele Lanza and Romain RobbesIn Proceedings of WCRE 2009, pp. 135-144.

5. Promises and Perils of Porting Software Visualization Tools to the WebMarco D'Ambros, Mircea Lungu, Michele Lanza, Romain RobbesIn Proceedings of WSE 2009, pp. 109-118.

6. A Flexible Framework to Support Collaborative Software Evolution AnalysisMarco D'Ambros, Michele LanzaIn Proceedings of CSMR 2008, pp. 3-12.

7. Reverse Engineering with Logical CouplingMarco D'Ambros, Michele LanzaIn Proceedings of WCRE 2006, pp. 189-198.

8. Software Bugs and Evolution: A Visual Approach to Uncover Their RelationshipsMarco D'Ambros, Michele LanzaIn Proceedings of CSMR 2006, pp. 227-236.

1. Churrasco: Supporting Collaborative Software Evolution AnalysisMarco D'Ambros, Michele LanzaIn Proceedings of WASDeTT 2008, 2008.

2. "A Bug's Life" - Visualizing a Bug DatabaseMarco D'Ambros, Michele Lanza, Martin PinzgerIn Proceedings of VISSOFT 2007, pp. 113-120.

3. The Evolution Radar: Visualizing Integrated Logical Coupling InformationMarco D'Ambros, Michele Lanza, Mircea LunguIn Proceedings of MSR 2006, pp. 26-32.

Workshop papers

1. On Porting Software Visualization Tools to the WebMarco D'Ambros, Michele Lanza, Mircea Lungu, Romain RobbesIn Software Tools for Technology Transfer (STTT), Springer, 2010.

2. Distributed and Collaborative Software Evolution Analysis with ChurrascoMarco D'Ambros, Michele LanzaIn Journal of Science of Computer Programming (SCP), Vol. 75. No. 4, pp. 276-287. Elsevier, 2010.

3. Visualizing Co-Change Information with the Evolution RadarMarco D'Ambros, Michele Lanza, Mircea LunguIn IEEE Transactions on Software Engineering (TSE), Vol. 35. No. 5, pp. 720-735. IEEE CS Press, 2009.

4. Visual Software Evolution ReconstructionMarco D'Ambros, Michele LanzaIn Journal on Software Maintenance and Evolution: Research and Practice (JSME), Vol.21, No.3, pp. 217-232, May 2009. John Wiley & Sons, 2009.

Journal papers

1. Supporting Software Evolution Analysis with Historical Dependencies and Defect InformationMarco DʼAmbrosIn Proceedings of ICSM 2008, pp. 412-415.

2. The Metabase: Generating Object Persistency Using Meta DescriptionsMarco D'Ambros, Michele Lanza, Martin PinzgerIn Proceedings of FAMOOSr 2007.

3. BugCrawler: Visualizing Evolving Software SystemsMarco D'Ambros, Michele LanzaIn Proceedings of CSMR 2007, pp. 333-334.

4. Applying the Evolution Radar to PostgreSQLMarco D'Ambros, Michele LanzaIn Proceedings of MSR 2006, pp. 177-178, 2006.

Other publications