SlideShare a Scribd company logo
1 of 162
Download to read offline
On the Evolution of
Source Code and Software Defects
Marco D’Ambros
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
Software & Bridges




software engineering and bridges
Software




Requirements
Software




Requirements
Software




     Software
       aging


Requirements
Ph.D.




We are here
Ph.D.

                              Conclusion
                                  x

     x
Thesis

                   Analysis

                        x
                techniques            x    Tool
                                           support



  We are here
Ph.D.

                                              Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                     x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Ph.D.

                                              Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                     x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
The Evolution of Software
                                                               Evolution


1975    First software configuration                                        First bug tracking                                                                      First workshop                                           MSR becomes a
            managament (SCSS)         RCS                     CVS          system (GNATS)                    Bugzilla                    Subversion                    on MSR                 Git     Jazz                   conference




1980                                                      1988      1990                                     1995        1996     1997               1999   2000               2003                                                         2010

             1982                     1986                                        1992                                                                                                 2004         2006     2007       2008




                                                                                  Cost of software maintenance                      First MSR                          Cost of software                Release History
        Lehman's laws of                     Boehm's spiral
                                                                               estimated to be 50-75% of the total                approach (Ball                   maintenance estimated to                Database
       software evolution                       model                         cost of software (Sommerville, Davis)                   et. al.)                     be more than 85% (Erlik)             (Fischer et. al.)



                                                                                                                          Extreme Programming
                                                                                                                        Explained: Embrace Changes
1975    First software configuration
            managament (SCSS)         RCS                     CVS




1980                                                      1988         1990

             1982                     1986




        Lehman's laws of                     Boehm's spiral
       software evolution                       model




 Foundation                                            Publication   Tool
First bug tracking
       system (GNATS)                    Bugzilla                     Subversion




1990                                     1995        1996     1997                 1999     2000

              1992




              Cost of software maintenance                      First MSR
           estimated to be 50-75% of the total                approach (Ball
          cost of software (Sommerville, Davis)                   et. al.)



                                                      Extreme Programming
                                                    Explained: Embrace Changes

 Infrastructure
 Implementation                                                      Publication          Tool
First workshop                                           MSR becomes a
           on MSR                 Git     Jazz                   conference




2000               2003                                                         2010

                           2004         2006      2007      2008




           Cost of software                Release History
       maintenance estimated to                Database
       be more than 85% (Erlik)             (Fischer et. al.)




  The Advent of MSR                            Event      Publication       Tool
The Evolution of Software
                                                               Evolution


1975    First software configuration                                        First bug tracking                                                                      First workshop                                           MSR becomes a
            managament (SCSS)         RCS                     CVS          system (GNATS)                    Bugzilla                    Subversion                    on MSR                 Git     Jazz                   conference




1980                                                      1988      1990                                     1995        1996     1997               1999   2000               2003                                                         2010

             1982                     1986                                        1992                                                                                                 2004         2006     2007       2008




                                                                                  Cost of software maintenance                      First MSR                          Cost of software                Release History
        Lehman's laws of                     Boehm's spiral
                                                                               estimated to be 50-75% of the total                approach (Ball                   maintenance estimated to                Database
       software evolution                       model                         cost of software (Sommerville, Davis)                   et. al.)                     be more than 85% (Erlik)             (Fischer et. al.)



                                                                                                                          Extreme Programming
                                                                                                                        Explained: Embrace Changes




              Foundation                                                    Infrastructure                                                                              The advent of
                                                                           Implementation                                                                                   MSR
MSR Approaches
30%



23%



15%



8%



0%
                   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;
                       }
                   }




        SCM       Source                        Software   E-mail     Documentation   Others
      meta-data    code                          defects   archive
MSR Approaches




             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;
                 }
             }




  SCM       Source                        Software   E-mail     Documentation   Others
meta-data    code                          defects   archive
Integrated                                                      MSR Approaches
  Plain




                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;
                    }
                }




  SCM          Source                        Software   E-mail     Documentation   Others
meta-data       code                          defects   archive
Models

             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;
                                                 }
                                             }




IDE data                                                                 Documentation
                               Holistic
                              software
                              evolution
  Chats                                                                  Unit tests




           Software defects                 E-mail archive

                                Bytecode
Models

             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;
                                                 }
                                             }




IDE data                                                                 Documentation
                               Holistic
                              software
                              evolution
  Chats                                                                  Unit tests




           Software defects                 E-mail archive

                                Bytecode
Models

             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;
                                                 }
                                             }




IDE data                                                                 Documentation
                               Holistic
                              software
                              evolution
  Chats                                                                  Unit tests




           Software defects                 E-mail archive

                                Bytecode
Models

             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;
                                                 }
                                             }




IDE data                                                                     Documentation
                               Holistic
                              software
                              evolution
  Chats                                                                      Unit tests




           Software defects                 E-mail archive

                                Bytecode                         A. Zeller, MSR keynote 2007
Models

             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;
                                                  }
                                              }




IDE data                                                                  Documentation


                              Our Approach

  Chats                                                                   Unit tests




           Software defects                  E-mail archive

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

                D’Ambros, 2010
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;
                        }
                    }




Software defects   E-mail archive
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;
                         }
                     }




Software defects    E-mail archive

         Mevo meta-model

                                                 CSMR 2008
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;
                         }
                     }




Software defects    E-mail archive

         Mevo meta-model

                                                 CSMR 2008
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;
                         }
                     }




Software defects    E-mail archive

         Mevo meta-model

                                                 CSMR 2008
7 analysis techniques


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;
                                   }
                               }




Software defects              E-mail archive

         Mevo meta-model

                                                           CSMR 2008
Ph.D.

                                              Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                     x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Ph.D.

                                              Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                     x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Ph.D.

                                              Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                     x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Retrospective analysis   Future prediction
Retrospective analysis
                                   Change coupling




                                         1
                                       analysis




                          2 3
                         Bug evolution
                            analysis
                                                 Code-bug
                                            co-evolution analysis
Change Coupling Analysis

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;
                          }
                      }




Software defects     E-mail archive


Goal: Make sense of huge amount of change
      coupling information
Technique name
Change Coupling Analysis

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;
                          }
                      }




Software defects     E-mail archive


Goal: Make sense of huge amount of change
      coupling information
Technique name
Change Coupling Analysis

SCM meta-data         Source code                  Used part of
                      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;
                                                   the meta-model
                              dataUC[j-1]= uCJ;
                              dataUC[j]= uCJM1;
                          }
                      }




Software defects     E-mail archive


Goal: Make sense of huge amount of change
      coupling information
Technique name
Change Coupling Analysis

SCM meta-data         Source code                  Used part of
                      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;
                                                   the meta-model
                              dataUC[j-1]= uCJ;
                              dataUC[j]= uCJM1;
                          }
                      }




Software defects     E-mail archive


Goal: Make sense of huge amount of change
      coupling information
                                                        Goal /
                                                        Question
Technique name
Change Coupling Analysis

SCM meta-data         Source code                    Used part of
                      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;
                                                     the meta-model
                              dataUC[j-1]= uCJ;
                              dataUC[j]= uCJM1;
                          }
                      }




                                                  Technique
                                                    number
Software defects     E-mail archive


Goal: Make sense of huge amount of change
      coupling information
                                                              Goal /
                                                              Question
Change Coupling Analysis

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;
                          }
                      }




Software defects     E-mail archive


Goal: Make sense of huge amount of change
      coupling information
change cou•pling
  implicit dependency of files
  that frequently change together
  [Gall et al., ICSM 1998]
Module level to assess
 architecture decay
Class level to support
change impact analysis
Package         Class                          Protocol              Method
                  browser        browser                         browser               browser



                                            Main Evolution                  Secondary Evolution
                                           Radar Visualization               Radar Visualization




Current project
 package list




                            The Evolution Radar
Package     Class                          Protocol              Method
                   browser    browser                         browser               browser



                                         Main Evolution                  Secondary Evolution
                                        Radar Visualization               Radar Visualization




Current project
 package list




                  System re-documentation and restructuring
Assessing                                                                               Change impact
                                   ay
                  architecture dec                                                                        analysis


                                                                     Coupled files




                            Tasks Supported
System evolution analys
                       is


                                                                                                         Protocol              Method
                                                           Package        Class                                                browser
                                                                         browser                         browser
                                                           browser



                                                                                    Main Evolution                  Secondary Evolution
                                                                                   Radar Visualization               Radar Visualization




                                  Time
                                         Current project
                                          package list




                                                           System re-documentation and restructuring
Change Coupling Analysis


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

     MSR 2006, WCRE 2006, TSE 2009
Bug Evolution Analysis

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;
                            }
                        }




Software defects       E-mail archive


Goal: Study the history of software defects
35%
              Bu g lifetime
        di stribution  in Mozilla
                                                       > 50%
28%




21%




14%




7%




0%
      12 Hours   1 Day   1 Week   1 Month   6 Months   1 Year   2 Years   More
System Radiography view
Which components experienced
many defects?
System Radiography view
                                Which components experienced
                                many defects?




Which defects are hard to fix?
       Bug watch view
Bug Evolution Analysis


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

                VISSOFT 2007
Bug-Code Co-Evolution Analysis

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;
                            }
                        }




Software defects       E-mail archive


Goal: Detect patterns in the co-evolution
      of source code and defects
Code committed in SCM repository

          Foo.java




   SCM meta-data                   Time
Code committed in SCM repository

          Foo.java




   SCM meta-data                   Time

         Foo.java




     Defects                       Time

 Defect reported
Code committed in SCM repository

          Foo.java


           Bar.java


          Boo.java


   SCM meta-data                   Time

         Foo.java


          Bar.java


          Baz.java

     Defects                       Time

 Defect reported
Code committed in SCM repository

          Foo.java


           Bar.java


          Boo.java


   SCM meta-data                   Time

         Foo.java


          Bar.java


          Baz.java

     Defects                       Time

 Defect reported
Code committed in SCM repository

          Foo.java


           Bar.java


          Boo.java


   SCM meta-data                   Time

         Foo.java


          Bar.java


          Baz.java

     Defects                       Time

 Defect reported
Code committed in SCM repository

          Foo.java


           Bar.java


          Boo.java
                                    Co-evolution
                                                 pattern
   SCM meta-data                                           Time

         Foo.java                  Δt

          Bar.java


          Baz.java

     Defects                                               Time

 Defect reported
Catalog of 10 formally
defined patterns
Bug-Code Co-Evolution Analysis


Detecting and visualizing
co-evolutionary patterns allows
the characterization of software
components based on their
co-evolution.
           CSMR 2006, JSME 2009
Retrospective analysis   Future prediction
Future prediction
        Bug           Bug prediction




    4 5
     prediction        with e-mails




    6 7
Bug prediction with
 change coupling
                      Software quality
                          analysis
Bug Prediction

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;
                             }
                         }




Software defects        E-mail archive


Question: Which bug prediction approach
          is the best over different systems?
Bug prediction is a
very active research field
                     100+
                    PAPERS
Bug prediction is a
Which one is better?               very active research field
                                                        100+
                                                       PAPERS



                   Other factors


                Previous defects


                 Process metrics


                   Code metrics
Moser et al.     SCM meta-data



 Basili et al.   Source code metrics



  Kim et al.     Previous defects



    Hassan       Entropy of changes
.   SCM meta-data



.   Source code metrics



.   Previous defects



n   Entropy of changes
Churn of
.   SCM meta-data
                          code metrics


                            Entropy of
.   Source code metrics
                          code metrics


.   Previous defects



n   Entropy of changes
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;
      }
  }




                               Time


Release X
Prediction goal

                                      Post release 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;
             }
         }




                                                       Time
Past                                        “Future”
       Release X
Prediction goal

                                                    Post release defects
1 Previous 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;
                           }
                       }




                                                                     Time
   Past                                                   “Future”
                     Release X
2 SCM meta-data                                       Prediction goal
3 Entropy of changes
                                                      Post release defects
1 Previous 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;
                             }
                         }




                                                                       Time
   Past                                                     “Future”
                       Release X
2 SCM meta-data                                             Prediction goal
3 Entropy of changes
                                                            Post release defects
1 Previous defects



                        CBO        DIT          NOC
                        99
                        23.4
                        12.1
                        20.3
                                   99
                                   23.4
                                   12.1
                                   20.3
                                                99
                                                23.4
                                                12.1
                                                20.3
                                                              4 Source code
                        62.1
                        43.8
                                   62.1
                                   43.8
                                                62.1
                                                43.8            metrics

                               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;
                                   }
                               }




                                                                             Time
   Past                                                           “Future”
                       Release X
2 SCM meta-data                                                                      Prediction goal
                                             3 Entropy of changes
                                                                                                                                  Post release defects
                                             1 Previous defects


               5 6 Entropy and churn of code metrics
CBO        DIT          NOC                     CBO        DIT          NOC                   CBO        DIT          NOC
99
23.4
12.1
20.3
           99
           23.4
           12.1
           20.3
                        99
                        23.4
                        12.1
                        20.3        deltas
                                                99
                                                23.4
                                                12.1
                                                20.3
                                                           99
                                                           23.4
                                                           12.1
                                                           20.3
                                                                        99
                                                                        23.4
                                                                        12.1
                                                                        20.3
                                                                                    deltas
                                                                                              99
                                                                                              23.4
                                                                                              12.1
                                                                                              20.3
                                                                                                         99
                                                                                                         23.4
                                                                                                         12.1
                                                                                                         20.3
                                                                                                                      99
                                                                                                                      23.4
                                                                                                                      12.1
                                                                                                                      20.3
                                                                                                                                    4 Source code
62.1
43.8
           62.1
           43.8
                        62.1
                        43.8
                                                62.1
                                                43.8
                                                           62.1
                                                           43.8
                                                                        62.1
                                                                        43.8
                                                                                              62.1
                                                                                              43.8
                                                                                                         62.1
                                                                                                         43.8
                                                                                                                      62.1
                                                                                                                      43.8            metrics

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

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

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




                                                                                                                                                   Time
                                                Past                                                                                    “Future”
                                                                                             Release X
Comparing Prediction Models


    SCM meta-data

    Churn of code metrics

    Entropy of code metrics

    Code metrics

    Previous defects

    Entropy of changes                          Prediction
                                                performance
               0.2            0.4   0.6   0.8
Comparing Prediction Models




    Previous defects


                                          Prediction
                                          performance
               0.2     0.4    0.6   0.8
Comparing Prediction Models
Comparing Prediction Models

    100%

    90%
              score ← score + 3
              score ← score + 1
    75%




    50%




              score ← score - 1
Comparing Prediction Models

    100%

    90%
              score ← score + 3
              score ← score + 1
    75%




    50%




              score ← score - 1
Comparing Prediction Models



  JDT Core                         PDE                         Mylyn                       Equinox                     Lucene
 100%                       100%                        100%                        100%                        100%

 90%
        score ← score + 3           score ← score + 3           score ← score + 3           score ← score + 3           score ← score + 3
                            90%                         90%                         90%                         90%

        score ← score + 1           score ← score + 1           score ← score + 1           score ← score + 1           score ← score + 1
 75%                        75%                         75%                         75%                         75%




 50%                        50%                         50%                         50%                         50%




        score ← score - 1           score ← score - 1           score ← score - 1           score ← score - 1           score ← score - 1




                                   score =              Σ
                                                    s ∈ systems
                                                                       score(s)
Prediction Performance Across Five Systems

    SCM meta-data

    Entropy of changes

    Code metrics

    Previous defects

    Churn of code metrics

    Entropy of code metrics
0            4           8       11          15   Score
Prediction Performance Across Five Systems

    SCM meta-data
                                        Performance not stable
                                            across systems
    Entropy of changes

    Code metrics
                                        Good performance and
                                           fast to compute
    Previous defects

    Churn of code metrics               Most stable performance
                                         but computationally
                                               expensive
    Entropy of code metrics
0            4           8       11          15   Score
Bug Prediction


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

       MSR 2010, EMSE under review
Bug Prediction with Change Coupling

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;
                           }
                       }




Software defects      E-mail archive


Question: Does change coupling correlate
          with software defects?
Change coupling is harmful
What is the impact on software defects?
Measuring Change Coupling


         Distribution
         Number of coupled classes



         Force
         Number of co-changes



         Time decay
         Changes far in the past count less
Correlation with Software Defects


          Distribution

                       Change coupling str
                                            ongly
          Force     correlates with softw
                                          are defects




                                    0.8+
          Time decay


                                Spearman’s correlation
Correlation with Software Defects


          Distribution

                       Change coupling str
                                            ongly
          Force     correlates with softw
                                          are defects




                                    0.8+
          Time decay


                                Spearman’s correlation
Defect Prediction




                SCM    Change
                data   coupling




      Code
      metrics




          Explanative power
Defect Prediction

0.9


0.8


                SCM    Change
0.6
                data   coupling

0.5


0.3   Code
      metrics

0.2


 0
          Explanative power
Defect Prediction

0.9
                                                   Change
0.8                                                coupling
                                            SCM
                       Change               data
0.6
                SCM
                data   coupling
                                  Code
                                  metrics
0.5


0.3   Code
      metrics

0.2


 0
          Explanative power           Predictive power
Defect Prediction

0.9
                                                   Change
0.8
                                   14%             coupling
                                            SCM
                       Change               data
0.6
                SCM
                data   coupling
                                  Code
                                  metrics
0.5


0.3   Code
      metrics

0.2


 0
          Explanative power           Predictive power
Bug Prediction with Change Coupling


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

                WCRE 2009
Software Quality Analysis

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;
                           }
                       }




Software defects      E-mail archive


Question: Do design flaws correlate with
          software defects?
Design Flaws




                            Class (Size   ∝responsibility)
       Design guideline: A class should have
                         one responsibility
Design Flaws




                            Class (Size   ∝responsibility)
       Design guideline: A class should have
                         one responsibility
             Vio l ate d
Design Flaws


         Does the pre  sence of design
         flaws corre late with software
                   defects?

               An d their addition?
                             Class (Size   ∝responsibility)
       Design guideline: A class should have
                         one responsibility
             Vio l ate d
Analyzing Design Flaws


  Design flaws                                ~




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




  Source code
                    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 Flaws


       Design flaws                                  ~

Detection strategies




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




       Source code
                           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




    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




    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;
        }
    }




                                 Time
Analyzing Design Flaw Deltas




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




                                 2 weeks                                2 weeks                                2 weeks
      uCJ= dataUC[j];                        uCJ= dataUC[j];                        uCJ= dataUC[j];                          uCJ= dataUC[j

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

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




                                                                                                                         Time
Analyzing Design Flaw Deltas
Number of flaws




                               Time
Analyzing Design Flaw Deltas
Number of flaws                 Addition of flaws




                                                  Time
Analyzing Design Flaw Deltas
Number of flaws                 Addition of flaws




                                                  Time

                 correlation




     Defects
                                                  Time
                                 Δt
Results on Six Large Systems




   0.4 +
   Flaw presence correlation




                                    0.6+
                               Flaw addition correlation
Results on Six Large Systems




   0.4 +
   Flaw presence correlation




                   aw correlate  s more than
             No fl
                       sistently acr oss systems
           other s con



                                    0.6+
                               Flaw addition correlation
Software Quality Analysis


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

                 QSIC 2010
Bug Prediction with E-mails

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;
                           }
                       }




Software defects      E-mail archive


Question: Can bug prediction techniques
          be improved with e-mail data?
Software entities that are frequently
mentioned in development mailing
lists are defect prone




            Popularity Metrics
Spearman’s correlation
                         Do popularit
                                       y metrics
                         correlate wit
                                      h defects?

                                Popularity metrics
Spearman’s correlation
                                                Do popularit
                                                              y metrics
0.8                                             correlate wit
                                                             h defects?

                                                       Popularity metrics
0.6




0.4




0.2




 0
            Equinox            Jackrabbit   Lucene             Maven
Spearman’s correlation
                                                Do popularit
                                                              y metrics
0.8                                             correlate wit
                                                             h defects?

                                                       Popularity metrics
                                                          Lines of code
0.6




0.4




0.2




 0
            Equinox            Jackrabbit   Lucene             Maven
Prediction performance     Do popularity metrics improve
                         existing bug prediction techniques?




     POP                  POP
    metrics              metrics
Prediction performance     Do popularity metrics improve
                               existing bug prediction techniques?


0.5


                    SCM data
0.4
                                         Code
                                         metrics


0.3

           POP                  POP
          metrics              metrics
0.2



0.1



 0
Prediction performance           Do popularity metrics improve
                                     existing bug prediction techniques?


0.5

      4%                       SCM

0.4
                    SCM data    +      12%               Code
                                                          +
                               POP                       POP
                                               Code
                                               metrics


0.3

           POP                        POP
          metrics                    metrics
0.2



0.1



 0
Bug Prediction with E-mails


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

                   FASE 2010
Retrospective Analysis
Change coupling             Bug evolution                     Code-bug




  1 2   3
    analysis                   analysis                  co-evolution analysis




  4 5 6 7
Bug prediction    Bug prediction
                   with change
                                      Software quality
                                          analysis
                                                           Bug prediction
                                                            with e-mails
                    coupling

                       Future Prediction
Change coupling




                      1 2
                                       analysis



     Bug prediction
       with e-mails
                   7                          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;
                                                                          Bug evolution
                                                                          analysis




Software quality
        analysis
                   6     3      Mevo meta-model
                                                                             Code-bug
                                                                             co-evolution
                                                                             analysis




                     5 4
                      Bug prediction with
                       change coupling
                                                  Bug prediction
Ph.D.

                                              Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                     x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Ph.D.

                                              Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                     x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Ph.D.

                                              Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                     x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
tools were
fundamental for my
 daddy's research
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;
              }
          }




Mevo meta-model
Churrasco framework

            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;
                }
            }




  Mevo meta-model




                                        SCP 2010
Churrasco framework

                        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;
Importers


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




              Mevo meta-model

               Web interface


                                                    SCP 2010
Churrasco framework

                        for(int j=m; j>i; j--){                      Evolution Radar




                                                    Data interface
                          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;
Importers


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




                                                                     Bug’s Life

                                                                     BugCrawler

              Mevo meta-model                                        Pendolino


               Web interface


                                                                                  SCP 2010
Tool Gallery




Evolution Radar
Tool Gallery




  Bug’s Life
Tool Gallery




 BugCrawler
Tool Gallery




  Pendolino
Tool Gallery




 Churrasco
Churrasco    Evolution Radar   Bug’s Life   BugCrawler   Pendolino
                                                                                                   MSR 2006
1      Change coupling
               analysis
                                                                                                  WCRE 2006
                                                                                                   TSE 2009


2        Bug evolution
               analysis
                                                                                                    VISSOFT
                                                                                                        2007


3         Code-bug
co-evolution analysis
                                                                                                  CSMR 2006



4        Bug prediction                                                                            MSR 2010



5   Bug prediction with
       change coupling
                                                                                                  WCRE 2009



6      Software quality
               analysis
                                                                                                   QSIC 2010



7   Bug prediction with
                 e-mails
                                                                                                   FASE 2010


                           WASDeTT 2008   MSR Challenge                  CSMR 2007
Ph.D.

                                              Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                     x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Ph.D.

                                              Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                     x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Ph.D.
                         Intermezzo
                                   x          Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                      x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Replicating
                                     Experiments




                           Bug prediction benchmar k

Models available through
Churrasco web interface
Recent annotations
                added

                                                                           User
                                                          SVG
                                                       Interactive
                                                      Visualization


           People participating
           to the collaboration




            Report generator

                                  Selected figure

                                            Context menu
            Selected figure
             information




           Metrics mapping
            configurator




           Package selector




           Regular expression
                matcher



Collaboration in Churrasco                                            STTT 2010
Ph.D.
                         Intermezzo
                                   x          Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                      x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Ph.D.
                         Intermezzo
                                   x          Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                      x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Ph.D.
                         Intermezzo
                                   x          Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                      x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Ph.D.
                         Intermezzo
                                   x          Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                      x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Deve
                    lop
                        er
              neo




Limitations
User studies       Other languages
                   Deve
                        lop
                            er
                  neo




Limitations

                                 More case studies
User studies       Other languages
                   Deve
                        lop
                            er
                  neo




Limitations

                                 More case studies




                                  Future Work
User studies       Other languages
                      Deve
                           lop
                               er
                     neo




Limitations

              Exploit author data   More case studies




                                     Future Work
User studies                                       Other languages
                                                    Deve
                                                         lop
                                                             er
                                                   neo




Limitations

                Exploit author data                                   More case studies



                       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];




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




  meta-model                                             techniques    Future Work

                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;
                         }
                     }




  HOLISTIC
 SOFTWARE
 EVOLUTION

 MORE
REPOSITORIES AHEAD
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;
                                     }
                                 }




  HOLISTIC
 SOFTWARE             Holistic
 EVOLUTION
                     software
 MORE
REPOSITORIES AHEAD
                     evolution
Ph.D.
                         Intermezzo
                                   x          Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                      x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Ph.D.
                         Intermezzo
                                   x          Conclusion
           swamp of
           procrastination
                                                   x
                                                           peaks of tools
                                                           madness


     x
Thesis

                                Analysis

                                      x
                             techniques                x    Tool
                                                            support



  We are here                  haunted teachwood
                               forest
Journal papers                                                                            Conference papers
1. On Porting Software Visualization Tools to the Web                                        1. On the Impact of Design Flaws on Software Defects
   Marco D'Ambros, Michele Lanza, Mircea Lungu, Romain Robbes
                                                                                                Marco D'Ambros, Alberto Bacchelli, Michele Lanza
   In Software Tools for Technology Transfer (STTT), Springer, 2010.
                                                                                                In Proceedings of QSIC 2010, pp. 23-31.
2. Distributed and Collaborative Software Evolution Analysis with
   Churrasco                                                                                 2. An Extensive Comparison of Bug Prediction Approaches
   Marco D'Ambros, Michele Lanza                                                                Marco D'Ambros, Michele Lanza, Romain Robbes
   In Journal of Science of Computer Programming (SCP),Vol. 75. No. 4, pp. 276-287.             In Proceedings of MSR 2010, pp. 31-41.
   Elsevier, 2010.
                                                                                             3. Are Popular Classes More Defect Prone?
3. Visualizing Co-Change Information with the Evolution Radar                                   Alberto Bacchelli, Marco D'Ambros, Michele Lanza
   Marco D'Ambros, Michele Lanza, Mircea Lungu                                                  In Proceedings of FASE 2010, pp. 59-73.
   In IEEE Transactions on Software Engineering (TSE),Vol. 35. No. 5, pp. 720-735. IEEE CS
                                                                                             4. On the Relationship Between Change Coupling and Software Defects
   Press, 2009.
                                                                                                Marco D'Ambros and Michele Lanza and Romain Robbes
4. Visual Software Evolution Reconstruction                                                     In Proceedings of WCRE 2009, pp. 135-144.
   Marco D'Ambros, Michele Lanza
                                                                                             5. Promises and Perils of Porting Software Visualization Tools to the Web
   In Journal on Software Maintenance and Evolution: Research and Practice (JSME),Vol.21,
                                                                                                Marco D'Ambros, Mircea Lungu, Michele Lanza, Romain Robbes
   No.3, pp. 217-232, May 2009. John Wiley & Sons, 2009.
                                                                                                In Proceedings of WSE 2009, pp. 109-118.
                                                                                             6. A Flexible Framework to Support Collaborative Software Evolution Analysis
                                                                                                Marco D'Ambros, Michele Lanza
                                                                                                In Proceedings of CSMR 2008, pp. 3-12.
                                                                                             7. Reverse Engineering with Logical Coupling
             Other publications                                                                 Marco D'Ambros, Michele Lanza
                                                                                                In Proceedings of WCRE 2006, pp. 189-198.
                                                                                             8. Software Bugs and Evolution: A Visual Approach to Uncover Their Relationships
1. Supporting Software Evolution Analysis with Historical Dependencies and
                                                                                                Marco D'Ambros, Michele Lanza
   Defect Information
                                                                                                In Proceedings of CSMR 2006, pp. 227-236.
   Marco DʼAmbros
   In Proceedings of ICSM 2008, pp. 412-415.
2. The Metabase: Generating Object Persistency Using Meta Descriptions
   Marco D'Ambros, Michele Lanza, Martin Pinzger
   In Proceedings of FAMOOSr 2007.
3. BugCrawler: Visualizing Evolving Software Systems
                                                                                                       Workshop papers
   Marco D'Ambros, Michele Lanza
                                                                                             1. Churrasco: Supporting Collaborative Software Evolution Analysis
   In Proceedings of CSMR 2007, pp. 333-334.
                                                                                                Marco D'Ambros, Michele Lanza
4. Applying the Evolution Radar to PostgreSQL                                                   In Proceedings of WASDeTT 2008, 2008.
   Marco D'Ambros, Michele Lanza
                                                                                             2. "A Bug's Life" - Visualizing a Bug Database
   In Proceedings of MSR 2006, pp. 177-178, 2006.
                                                                                                Marco D'Ambros, Michele Lanza, Martin Pinzger
                                                                                                In Proceedings of VISSOFT 2007, pp. 113-120.
                                                                                             3. The Evolution Radar: Visualizing Integrated Logical Coupling Information
                                                                                                Marco D'Ambros, Michele Lanza, Mircea Lungu
                                                                                                In Proceedings of MSR 2006, pp. 26-32.

More Related Content

Viewers also liked

Bug Prediction and Analysis
Bug Prediction and AnalysisBug Prediction and Analysis
Bug Prediction and AnalysisMarco D'Ambros
 
On the Relationship Between Change Coupling and Software Defects
On the Relationship Between Change Coupling and Software DefectsOn the Relationship Between Change Coupling and Software Defects
On the Relationship Between Change Coupling and Software DefectsMarco D'Ambros
 
Commit 2.0 - Enriching commit comments with visualization
Commit 2.0 - Enriching commit comments with visualization Commit 2.0 - Enriching commit comments with visualization
Commit 2.0 - Enriching commit comments with visualization Marco D'Ambros
 
Mining Cause Effect Chains from Version Archives - ISSRE 2011
Mining Cause Effect Chains from Version Archives - ISSRE 2011Mining Cause Effect Chains from Version Archives - ISSRE 2011
Mining Cause Effect Chains from Version Archives - ISSRE 2011Kim Herzig
 
Top Ten Slide Tips for Presentations
Top Ten Slide Tips for Presentations Top Ten Slide Tips for Presentations
Top Ten Slide Tips for Presentations Gabrielle O
 
Copyright Clarity #NYSCATE11
Copyright Clarity #NYSCATE11Copyright Clarity #NYSCATE11
Copyright Clarity #NYSCATE11Kristin Hokanson
 
Presentaciones Efectivas
Presentaciones EfectivasPresentaciones Efectivas
Presentaciones Efectivascaferreras49
 
Smartphoneography: minilesson on better pics with smartphones for
Smartphoneography: minilesson on better pics with smartphones for Smartphoneography: minilesson on better pics with smartphones for
Smartphoneography: minilesson on better pics with smartphones for polton
 
Tips para realizar_presentaciones_en_power_point
Tips para realizar_presentaciones_en_power_pointTips para realizar_presentaciones_en_power_point
Tips para realizar_presentaciones_en_power_pointMajo Montalvo Vásquez
 
Tips para presentaciones exitosas
Tips para presentaciones exitosasTips para presentaciones exitosas
Tips para presentaciones exitosasmagispucp
 
10 Tips Para Crear Buenas Presentaciones En Powerpoint 1229203223500674 1
10 Tips Para Crear Buenas Presentaciones En Powerpoint 1229203223500674 110 Tips Para Crear Buenas Presentaciones En Powerpoint 1229203223500674 1
10 Tips Para Crear Buenas Presentaciones En Powerpoint 1229203223500674 1Augusto Vargas
 
Diseño De Presentaciones Efectivas
Diseño De Presentaciones EfectivasDiseño De Presentaciones Efectivas
Diseño De Presentaciones Efectivasprogramasamadhi
 
Buenas Practicas - Power point
Buenas Practicas - Power pointBuenas Practicas - Power point
Buenas Practicas - Power pointpanamanian33
 
Marca personal: 12 tips para presentaciones irresistibles
Marca personal: 12 tips para presentaciones irresistibles Marca personal: 12 tips para presentaciones irresistibles
Marca personal: 12 tips para presentaciones irresistibles Esmeralda Diaz-Aroca
 
10 tips para crear buenas presentaciones en power point
10 tips para crear buenas presentaciones en power point10 tips para crear buenas presentaciones en power point
10 tips para crear buenas presentaciones en power pointmercedestkd
 
10 principios para mejorar las presentaciones
10 principios para mejorar las presentaciones10 principios para mejorar las presentaciones
10 principios para mejorar las presentacionesdaniel silverman
 

Viewers also liked (20)

Presentation tips
Presentation tipsPresentation tips
Presentation tips
 
Bug Prediction and Analysis
Bug Prediction and AnalysisBug Prediction and Analysis
Bug Prediction and Analysis
 
On the Relationship Between Change Coupling and Software Defects
On the Relationship Between Change Coupling and Software DefectsOn the Relationship Between Change Coupling and Software Defects
On the Relationship Between Change Coupling and Software Defects
 
Commit 2.0 - Enriching commit comments with visualization
Commit 2.0 - Enriching commit comments with visualization Commit 2.0 - Enriching commit comments with visualization
Commit 2.0 - Enriching commit comments with visualization
 
Mining Cause Effect Chains from Version Archives - ISSRE 2011
Mining Cause Effect Chains from Version Archives - ISSRE 2011Mining Cause Effect Chains from Version Archives - ISSRE 2011
Mining Cause Effect Chains from Version Archives - ISSRE 2011
 
Top Ten Slide Tips for Presentations
Top Ten Slide Tips for Presentations Top Ten Slide Tips for Presentations
Top Ten Slide Tips for Presentations
 
Copyright Clarity #NYSCATE11
Copyright Clarity #NYSCATE11Copyright Clarity #NYSCATE11
Copyright Clarity #NYSCATE11
 
Presentaciones Efectivas
Presentaciones EfectivasPresentaciones Efectivas
Presentaciones Efectivas
 
10 tips presentaciones dinámicas y atractivas
10 tips presentaciones dinámicas y atractivas10 tips presentaciones dinámicas y atractivas
10 tips presentaciones dinámicas y atractivas
 
Smartphoneography: minilesson on better pics with smartphones for
Smartphoneography: minilesson on better pics with smartphones for Smartphoneography: minilesson on better pics with smartphones for
Smartphoneography: minilesson on better pics with smartphones for
 
Present Before PPT
Present Before PPTPresent Before PPT
Present Before PPT
 
Presentaciones profesionales
Presentaciones profesionalesPresentaciones profesionales
Presentaciones profesionales
 
Tips para realizar_presentaciones_en_power_point
Tips para realizar_presentaciones_en_power_pointTips para realizar_presentaciones_en_power_point
Tips para realizar_presentaciones_en_power_point
 
Tips para presentaciones exitosas
Tips para presentaciones exitosasTips para presentaciones exitosas
Tips para presentaciones exitosas
 
10 Tips Para Crear Buenas Presentaciones En Powerpoint 1229203223500674 1
10 Tips Para Crear Buenas Presentaciones En Powerpoint 1229203223500674 110 Tips Para Crear Buenas Presentaciones En Powerpoint 1229203223500674 1
10 Tips Para Crear Buenas Presentaciones En Powerpoint 1229203223500674 1
 
Diseño De Presentaciones Efectivas
Diseño De Presentaciones EfectivasDiseño De Presentaciones Efectivas
Diseño De Presentaciones Efectivas
 
Buenas Practicas - Power point
Buenas Practicas - Power pointBuenas Practicas - Power point
Buenas Practicas - Power point
 
Marca personal: 12 tips para presentaciones irresistibles
Marca personal: 12 tips para presentaciones irresistibles Marca personal: 12 tips para presentaciones irresistibles
Marca personal: 12 tips para presentaciones irresistibles
 
10 tips para crear buenas presentaciones en power point
10 tips para crear buenas presentaciones en power point10 tips para crear buenas presentaciones en power point
10 tips para crear buenas presentaciones en power point
 
10 principios para mejorar las presentaciones
10 principios para mejorar las presentaciones10 principios para mejorar las presentaciones
10 principios para mejorar las presentaciones
 

Similar to Evolution of Software Studied Through Mining Software Repositories

Supporting Concurrency Abstractions in High-level Language Virtual Machines
Supporting Concurrency Abstractions in High-level Language Virtual MachinesSupporting Concurrency Abstractions in High-level Language Virtual Machines
Supporting Concurrency Abstractions in High-level Language Virtual MachinesStefan Marr
 
Demo-driven Research 2007-11-28
Demo-driven Research 2007-11-28 Demo-driven Research 2007-11-28
Demo-driven Research 2007-11-28 Tudor Girba
 
Pain points for preservation services / workflows in repositories
Pain points for preservation services /  workflows in repositories Pain points for preservation services /  workflows in repositories
Pain points for preservation services / workflows in repositories prwheatley
 
Changes and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development ActivitiesChanges and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development ActivitiesThomas Zimmermann
 
Diagnosability versus The Cloud, Toronto 2011-04-21
Diagnosability versus The Cloud, Toronto 2011-04-21Diagnosability versus The Cloud, Toronto 2011-04-21
Diagnosability versus The Cloud, Toronto 2011-04-21Cary Millsap
 
Diagnosability versus The Cloud
Diagnosability versus The CloudDiagnosability versus The Cloud
Diagnosability versus The CloudBob Rhubart
 
Introduction to Deep Learning
Introduction to Deep LearningIntroduction to Deep Learning
Introduction to Deep LearningOswald Campesato
 
Build Windows Applications Fast | Delphi Features Matrix
Build Windows Applications Fast | Delphi Features MatrixBuild Windows Applications Fast | Delphi Features Matrix
Build Windows Applications Fast | Delphi Features MatrixEmbarcadero Technologies
 
Develop Enterprise Java Applications | JBuilder
Develop Enterprise Java Applications | JBuilderDevelop Enterprise Java Applications | JBuilder
Develop Enterprise Java Applications | JBuilderMichael Findling
 
Sand Piles and Software - Madison Ruby Conference
Sand Piles and Software - Madison Ruby ConferenceSand Piles and Software - Madison Ruby Conference
Sand Piles and Software - Madison Ruby ConferenceZach Dennis
 
Presentation on Machine Learning and Data Mining
Presentation on Machine Learning and Data MiningPresentation on Machine Learning and Data Mining
Presentation on Machine Learning and Data Miningbutest
 
Build Windows Applications Fast | Delphi Prism
Build Windows Applications Fast | Delphi PrismBuild Windows Applications Fast | Delphi Prism
Build Windows Applications Fast | Delphi PrismMichael Findling
 
Situation based analysis and control for supporting Event-web applications
Situation based analysis and control for supporting Event-web applicationsSituation based analysis and control for supporting Event-web applications
Situation based analysis and control for supporting Event-web applicationsVivek Singh
 
Cloud computing: evolution or redefinition
Cloud computing: evolution or redefinitionCloud computing: evolution or redefinition
Cloud computing: evolution or redefinitionPET Computação
 
Deep Dive into Apache MXNet on AWS
Deep Dive into Apache MXNet on AWSDeep Dive into Apache MXNet on AWS
Deep Dive into Apache MXNet on AWSKristana Kane
 
Stathy DevOps in MSP / MKE on IAC
Stathy DevOps in MSP / MKE on IACStathy DevOps in MSP / MKE on IAC
Stathy DevOps in MSP / MKE on IACStathy Touloumis
 
Demo Driven Research 2008-02-01
Demo Driven Research 2008-02-01Demo Driven Research 2008-02-01
Demo Driven Research 2008-02-01Tudor Girba
 
Agent-Based Configuration of (Metaheuristic) Algorithms - Doctoral dissertation
Agent-Based Configuration of (Metaheuristic) Algorithms - Doctoral dissertationAgent-Based Configuration of (Metaheuristic) Algorithms - Doctoral dissertation
Agent-Based Configuration of (Metaheuristic) Algorithms - Doctoral dissertationDagmar Monett
 

Similar to Evolution of Software Studied Through Mining Software Repositories (20)

Supporting Concurrency Abstractions in High-level Language Virtual Machines
Supporting Concurrency Abstractions in High-level Language Virtual MachinesSupporting Concurrency Abstractions in High-level Language Virtual Machines
Supporting Concurrency Abstractions in High-level Language Virtual Machines
 
Demo-driven Research 2007-11-28
Demo-driven Research 2007-11-28 Demo-driven Research 2007-11-28
Demo-driven Research 2007-11-28
 
Pain points for preservation services / workflows in repositories
Pain points for preservation services /  workflows in repositories Pain points for preservation services /  workflows in repositories
Pain points for preservation services / workflows in repositories
 
Changes and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development ActivitiesChanges and Bugs: Mining and Predicting Development Activities
Changes and Bugs: Mining and Predicting Development Activities
 
Diagnosability versus The Cloud, Toronto 2011-04-21
Diagnosability versus The Cloud, Toronto 2011-04-21Diagnosability versus The Cloud, Toronto 2011-04-21
Diagnosability versus The Cloud, Toronto 2011-04-21
 
Diagnosability versus The Cloud
Diagnosability versus The CloudDiagnosability versus The Cloud
Diagnosability versus The Cloud
 
Introduction to Deep Learning
Introduction to Deep LearningIntroduction to Deep Learning
Introduction to Deep Learning
 
Build Windows Applications Fast | Delphi Features Matrix
Build Windows Applications Fast | Delphi Features MatrixBuild Windows Applications Fast | Delphi Features Matrix
Build Windows Applications Fast | Delphi Features Matrix
 
Develop Enterprise Java Applications | JBuilder
Develop Enterprise Java Applications | JBuilderDevelop Enterprise Java Applications | JBuilder
Develop Enterprise Java Applications | JBuilder
 
Sand Piles and Software - Madison Ruby Conference
Sand Piles and Software - Madison Ruby ConferenceSand Piles and Software - Madison Ruby Conference
Sand Piles and Software - Madison Ruby Conference
 
Presentation on Machine Learning and Data Mining
Presentation on Machine Learning and Data MiningPresentation on Machine Learning and Data Mining
Presentation on Machine Learning and Data Mining
 
Build Windows Applications Fast | Delphi Prism
Build Windows Applications Fast | Delphi PrismBuild Windows Applications Fast | Delphi Prism
Build Windows Applications Fast | Delphi Prism
 
Situation based analysis and control for supporting Event-web applications
Situation based analysis and control for supporting Event-web applicationsSituation based analysis and control for supporting Event-web applications
Situation based analysis and control for supporting Event-web applications
 
Cloud computing: evolution or redefinition
Cloud computing: evolution or redefinitionCloud computing: evolution or redefinition
Cloud computing: evolution or redefinition
 
Deep Dive into Apache MXNet on AWS
Deep Dive into Apache MXNet on AWSDeep Dive into Apache MXNet on AWS
Deep Dive into Apache MXNet on AWS
 
Software Series 1
Software Series  1Software Series  1
Software Series 1
 
\\software 1
\\software 1\\software 1
\\software 1
 
Stathy DevOps in MSP / MKE on IAC
Stathy DevOps in MSP / MKE on IACStathy DevOps in MSP / MKE on IAC
Stathy DevOps in MSP / MKE on IAC
 
Demo Driven Research 2008-02-01
Demo Driven Research 2008-02-01Demo Driven Research 2008-02-01
Demo Driven Research 2008-02-01
 
Agent-Based Configuration of (Metaheuristic) Algorithms - Doctoral dissertation
Agent-Based Configuration of (Metaheuristic) Algorithms - Doctoral dissertationAgent-Based Configuration of (Metaheuristic) Algorithms - Doctoral dissertation
Agent-Based Configuration of (Metaheuristic) Algorithms - Doctoral dissertation
 

Recently uploaded

Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxnull - The Open Security Community
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 

Recently uploaded (20)

Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptxMaking_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
Making_way_through_DLL_hollowing_inspite_of_CFG_by_Debjeet Banerjee.pptx
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 

Evolution of Software Studied Through Mining Software Repositories

  • 1. On the Evolution of Source Code and Software Defects Marco D’Ambros 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
  • 2. Software & Bridges software engineering and bridges
  • 5. Software Software aging Requirements
  • 7. Ph.D. Conclusion x x Thesis Analysis x techniques x Tool support We are here
  • 8. Ph.D. Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 9. Ph.D. Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 10. The Evolution of Software Evolution 1975 First software configuration First bug tracking First workshop MSR becomes a managament (SCSS) RCS CVS system (GNATS) Bugzilla Subversion on MSR Git Jazz conference 1980 1988 1990 1995 1996 1997 1999 2000 2003 2010 1982 1986 1992 2004 2006 2007 2008 Cost of software maintenance First MSR Cost of software Release History Lehman's laws of Boehm's spiral estimated to be 50-75% of the total approach (Ball maintenance estimated to Database software evolution model cost of software (Sommerville, Davis) et. al.) be more than 85% (Erlik) (Fischer et. al.) Extreme Programming Explained: Embrace Changes
  • 11. 1975 First software configuration managament (SCSS) RCS CVS 1980 1988 1990 1982 1986 Lehman's laws of Boehm's spiral software evolution model Foundation Publication Tool
  • 12. First bug tracking system (GNATS) Bugzilla Subversion 1990 1995 1996 1997 1999 2000 1992 Cost of software maintenance First MSR estimated to be 50-75% of the total approach (Ball cost of software (Sommerville, Davis) et. al.) Extreme Programming Explained: Embrace Changes Infrastructure Implementation Publication Tool
  • 13. First workshop MSR becomes a on MSR Git Jazz conference 2000 2003 2010 2004 2006 2007 2008 Cost of software Release History maintenance estimated to Database be more than 85% (Erlik) (Fischer et. al.) The Advent of MSR Event Publication Tool
  • 14. The Evolution of Software Evolution 1975 First software configuration First bug tracking First workshop MSR becomes a managament (SCSS) RCS CVS system (GNATS) Bugzilla Subversion on MSR Git Jazz conference 1980 1988 1990 1995 1996 1997 1999 2000 2003 2010 1982 1986 1992 2004 2006 2007 2008 Cost of software maintenance First MSR Cost of software Release History Lehman's laws of Boehm's spiral estimated to be 50-75% of the total approach (Ball maintenance estimated to Database software evolution model cost of software (Sommerville, Davis) et. al.) be more than 85% (Erlik) (Fischer et. al.) Extreme Programming Explained: Embrace Changes Foundation Infrastructure The advent of Implementation MSR
  • 15. MSR Approaches 30% 23% 15% 8% 0% 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; } } SCM Source Software E-mail Documentation Others meta-data code defects archive
  • 16. MSR Approaches 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; } } SCM Source Software E-mail Documentation Others meta-data code defects archive
  • 17. Integrated MSR Approaches Plain 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; } } SCM Source Software E-mail Documentation Others meta-data code defects archive
  • 18. Models 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; } } IDE data Documentation Holistic software evolution Chats Unit tests Software defects E-mail archive Bytecode
  • 19. Models 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; } } IDE data Documentation Holistic software evolution Chats Unit tests Software defects E-mail archive Bytecode
  • 20. Models 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; } } IDE data Documentation Holistic software evolution Chats Unit tests Software defects E-mail archive Bytecode
  • 21. Models 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; } } IDE data Documentation Holistic software evolution Chats Unit tests Software defects E-mail archive Bytecode A. Zeller, MSR keynote 2007
  • 22. Models 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; } } IDE data Documentation Our Approach Chats Unit tests Software defects E-mail archive Bytecode
  • 23. An integrated view of software evolution, combining historical information regarding source co de and software defects, supports an extensible set of software maintenance tasks. D’Ambros, 2010
  • 24. 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; } } Software defects E-mail archive
  • 25. 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; } } Software defects E-mail archive Mevo meta-model CSMR 2008
  • 26. 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; } } Software defects E-mail archive Mevo meta-model CSMR 2008
  • 27. 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; } } Software defects E-mail archive Mevo meta-model CSMR 2008
  • 28. 7 analysis techniques 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; } } Software defects E-mail archive Mevo meta-model CSMR 2008
  • 29. Ph.D. Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 30. Ph.D. Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 31. Ph.D. Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 32. Retrospective analysis Future prediction
  • 33. Retrospective analysis Change coupling 1 analysis 2 3 Bug evolution analysis Code-bug co-evolution analysis
  • 34. Change Coupling Analysis 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; } } Software defects E-mail archive Goal: Make sense of huge amount of change coupling information
  • 35. Technique name Change Coupling Analysis 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; } } Software defects E-mail archive Goal: Make sense of huge amount of change coupling information
  • 36. Technique name Change Coupling Analysis SCM meta-data Source code Used part of 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; the meta-model dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } } Software defects E-mail archive Goal: Make sense of huge amount of change coupling information
  • 37. Technique name Change Coupling Analysis SCM meta-data Source code Used part of 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; the meta-model dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } } Software defects E-mail archive Goal: Make sense of huge amount of change coupling information Goal / Question
  • 38. Technique name Change Coupling Analysis SCM meta-data Source code Used part of 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; the meta-model dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } } Technique number Software defects E-mail archive Goal: Make sense of huge amount of change coupling information Goal / Question
  • 39. Change Coupling Analysis 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; } } Software defects E-mail archive Goal: Make sense of huge amount of change coupling information
  • 40. change cou•pling implicit dependency of files that frequently change together [Gall et al., ICSM 1998]
  • 41.
  • 42. Module level to assess architecture decay
  • 43. Class level to support change impact analysis
  • 44. Package Class Protocol Method browser browser browser browser Main Evolution Secondary Evolution Radar Visualization Radar Visualization Current project package list The Evolution Radar
  • 45. Package Class Protocol Method browser browser browser browser Main Evolution Secondary Evolution Radar Visualization Radar Visualization Current project package list System re-documentation and restructuring
  • 46. Assessing Change impact ay architecture dec analysis Coupled files Tasks Supported System evolution analys is Protocol Method Package Class browser browser browser browser Main Evolution Secondary Evolution Radar Visualization Radar Visualization Time Current project package list System re-documentation and restructuring
  • 47. Change Coupling Analysis The Evolution Radar shows integrated change coupling information, supporting various maintenance tasks. MSR 2006, WCRE 2006, TSE 2009
  • 48. Bug Evolution Analysis 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; } } Software defects E-mail archive Goal: Study the history of software defects
  • 49. 35% Bu g lifetime di stribution in Mozilla > 50% 28% 21% 14% 7% 0% 12 Hours 1 Day 1 Week 1 Month 6 Months 1 Year 2 Years More
  • 50. System Radiography view Which components experienced many defects?
  • 51. System Radiography view Which components experienced many defects? Which defects are hard to fix? Bug watch view
  • 52. Bug Evolution Analysis The visual analysis of bug histories permits the detection of critical software components and exceptional bugs. VISSOFT 2007
  • 53. Bug-Code Co-Evolution Analysis 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; } } Software defects E-mail archive Goal: Detect patterns in the co-evolution of source code and defects
  • 54. Code committed in SCM repository Foo.java SCM meta-data Time
  • 55. Code committed in SCM repository Foo.java SCM meta-data Time Foo.java Defects Time Defect reported
  • 56. Code committed in SCM repository Foo.java Bar.java Boo.java SCM meta-data Time Foo.java Bar.java Baz.java Defects Time Defect reported
  • 57. Code committed in SCM repository Foo.java Bar.java Boo.java SCM meta-data Time Foo.java Bar.java Baz.java Defects Time Defect reported
  • 58. Code committed in SCM repository Foo.java Bar.java Boo.java SCM meta-data Time Foo.java Bar.java Baz.java Defects Time Defect reported
  • 59. Code committed in SCM repository Foo.java Bar.java Boo.java Co-evolution pattern SCM meta-data Time Foo.java Δt Bar.java Baz.java Defects Time Defect reported
  • 60. Catalog of 10 formally defined patterns
  • 61. Bug-Code Co-Evolution Analysis Detecting and visualizing co-evolutionary patterns allows the characterization of software components based on their co-evolution. CSMR 2006, JSME 2009
  • 62. Retrospective analysis Future prediction
  • 63. Future prediction Bug Bug prediction 4 5 prediction with e-mails 6 7 Bug prediction with change coupling Software quality analysis
  • 64. Bug Prediction 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; } } Software defects E-mail archive Question: Which bug prediction approach is the best over different systems?
  • 65. Bug prediction is a very active research field 100+ PAPERS
  • 66. Bug prediction is a Which one is better? very active research field 100+ PAPERS Other factors Previous defects Process metrics Code metrics
  • 67. Moser et al. SCM meta-data Basili et al. Source code metrics Kim et al. Previous defects Hassan Entropy of changes
  • 68. . SCM meta-data . Source code metrics . Previous defects n Entropy of changes
  • 69. Churn of . SCM meta-data code metrics Entropy of . Source code metrics code metrics . Previous defects n Entropy of changes
  • 70. 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; } } Time Release X
  • 71. Prediction goal Post release 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; } } Time Past “Future” Release X
  • 72. Prediction goal Post release defects 1 Previous 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; } } Time Past “Future” Release X
  • 73. 2 SCM meta-data Prediction goal 3 Entropy of changes Post release defects 1 Previous 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; } } Time Past “Future” Release X
  • 74. 2 SCM meta-data Prediction goal 3 Entropy of changes Post release defects 1 Previous defects CBO DIT NOC 99 23.4 12.1 20.3 99 23.4 12.1 20.3 99 23.4 12.1 20.3 4 Source code 62.1 43.8 62.1 43.8 62.1 43.8 metrics 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; } } Time Past “Future” Release X
  • 75. 2 SCM meta-data Prediction goal 3 Entropy of changes Post release defects 1 Previous defects 5 6 Entropy and churn of code metrics CBO DIT NOC CBO DIT NOC CBO DIT NOC 99 23.4 12.1 20.3 99 23.4 12.1 20.3 99 23.4 12.1 20.3 deltas 99 23.4 12.1 20.3 99 23.4 12.1 20.3 99 23.4 12.1 20.3 deltas 99 23.4 12.1 20.3 99 23.4 12.1 20.3 99 23.4 12.1 20.3 4 Source code 62.1 43.8 62.1 43.8 62.1 43.8 62.1 43.8 62.1 43.8 62.1 43.8 62.1 43.8 62.1 43.8 62.1 43.8 metrics for(int j=m; j>i; j--){ for(int j=m; j>i; j--){ for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJM1= dataUC[j-1]; uCJM1= dataUC[j-1]; uCJ= dataUC[j]; uCJ= dataUC[j]; uCJ= dataUC[j]; if(uCJM1.compare(z)>0) if(uCJM1.compare(z)>0) if(uCJM1.compare(z)>0) { /* exchange */ { /* exchange */ { /* exchange */ tempStr= data[j-1]; tempStr= data[j-1]; tempStr= data[j-1]; /* sort the data */ /* sort the data */ /* sort the data */ data[j-1]= data[j]; data[j-1]= data[j]; data[j-1]= data[j]; data[j]= tempStr; data[j]= tempStr; data[j]= tempStr; dataUC[j-1]= uCJ; dataUC[j-1]= uCJ; dataUC[j-1]= uCJ; dataUC[j]= uCJM1; dataUC[j]= uCJM1; dataUC[j]= uCJM1; } } } } } } Time Past “Future” Release X
  • 76. Comparing Prediction Models SCM meta-data Churn of code metrics Entropy of code metrics Code metrics Previous defects Entropy of changes Prediction performance 0.2 0.4 0.6 0.8
  • 77. Comparing Prediction Models Previous defects Prediction performance 0.2 0.4 0.6 0.8
  • 79. Comparing Prediction Models 100% 90% score ← score + 3 score ← score + 1 75% 50% score ← score - 1
  • 80. Comparing Prediction Models 100% 90% score ← score + 3 score ← score + 1 75% 50% score ← score - 1
  • 81. Comparing Prediction Models JDT Core PDE Mylyn Equinox Lucene 100% 100% 100% 100% 100% 90% score ← score + 3 score ← score + 3 score ← score + 3 score ← score + 3 score ← score + 3 90% 90% 90% 90% score ← score + 1 score ← score + 1 score ← score + 1 score ← score + 1 score ← score + 1 75% 75% 75% 75% 75% 50% 50% 50% 50% 50% score ← score - 1 score ← score - 1 score ← score - 1 score ← score - 1 score ← score - 1 score = Σ s ∈ systems score(s)
  • 82. Prediction Performance Across Five Systems SCM meta-data Entropy of changes Code metrics Previous defects Churn of code metrics Entropy of code metrics 0 4 8 11 15 Score
  • 83. Prediction Performance Across Five Systems SCM meta-data Performance not stable across systems Entropy of changes Code metrics Good performance and fast to compute Previous defects Churn of code metrics Most stable performance but computationally expensive Entropy of code metrics 0 4 8 11 15 Score
  • 84. Bug Prediction The entropy and the churn of code metrics are the most stable predictors across different systems. MSR 2010, EMSE under review
  • 85. Bug Prediction with Change Coupling 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; } } Software defects E-mail archive Question: Does change coupling correlate with software defects?
  • 86. Change coupling is harmful What is the impact on software defects?
  • 87. Measuring Change Coupling Distribution Number of coupled classes Force Number of co-changes Time decay Changes far in the past count less
  • 88. Correlation with Software Defects Distribution Change coupling str ongly Force correlates with softw are defects 0.8+ Time decay Spearman’s correlation
  • 89. Correlation with Software Defects Distribution Change coupling str ongly Force correlates with softw are defects 0.8+ Time decay Spearman’s correlation
  • 90. Defect Prediction SCM Change data coupling Code metrics Explanative power
  • 91. Defect Prediction 0.9 0.8 SCM Change 0.6 data coupling 0.5 0.3 Code metrics 0.2 0 Explanative power
  • 92. Defect Prediction 0.9 Change 0.8 coupling SCM Change data 0.6 SCM data coupling Code metrics 0.5 0.3 Code metrics 0.2 0 Explanative power Predictive power
  • 93. Defect Prediction 0.9 Change 0.8 14% coupling SCM Change data 0.6 SCM data coupling Code metrics 0.5 0.3 Code metrics 0.2 0 Explanative power Predictive power
  • 94. Bug Prediction with Change Coupling Change coupling correlates with software defects and can be used to improve defect prediction models. WCRE 2009
  • 95. Software Quality Analysis 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; } } Software defects E-mail archive Question: Do design flaws correlate with software defects?
  • 96. Design Flaws Class (Size ∝responsibility) Design guideline: A class should have one responsibility
  • 97. Design Flaws Class (Size ∝responsibility) Design guideline: A class should have one responsibility Vio l ate d
  • 98. Design Flaws Does the pre sence of design flaws corre late with software defects? An d their addition? Class (Size ∝responsibility) Design guideline: A class should have one responsibility Vio l ate d
  • 99. Analyzing Design Flaws Design flaws ~ for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j]; Source code 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; } }
  • 100. Analyzing Design Flaws Design flaws ~ Detection strategies for(int j=m; j>i; j--){ uCJM1= dataUC[j-1]; uCJ= dataUC[j]; Source code 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; } }
  • 101. Analyzing Design Flaw Deltas 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; } }
  • 102. Analyzing Design Flaw Deltas 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; } } Time
  • 103. Analyzing Design Flaw Deltas for(int j=m; j>i; j--){ for(int j=m; j>i; j--){ for(int j=m; j>i; j--){ for(int j=m; j> uCJM1= dataUC[j-1]; uCJM1= dataUC[j-1]; uCJM1= dataUC[j-1]; uCJM1= dataUC 2 weeks 2 weeks 2 weeks uCJ= dataUC[j]; uCJ= dataUC[j]; uCJ= dataUC[j]; uCJ= dataUC[j if(uCJM1.compare(z)>0) if(uCJM1.compare(z)>0) if(uCJM1.compare(z)>0) if(uCJM1.comp { /* exchange */ { /* exchange */ { /* exchange */ { /* exchange tempStr= data[j-1]; tempStr= data[j-1]; tempStr= data[j-1]; tempStr= da /* sort the data */ /* sort the data */ /* sort the data */ /* sort the data[j-1]= data[j]; data[j-1]= data[j]; data[j-1]= data[j]; data[j-1]= data[j]= tempStr; data[j]= tempStr; data[j]= tempStr; data[j]= te dataUC[j-1]= uCJ; dataUC[j-1]= uCJ; dataUC[j-1]= uCJ; dataUC[j-1] dataUC[j]= uCJM1; dataUC[j]= uCJM1; dataUC[j]= uCJM1; dataUC[j]= } } } } } } } } Time
  • 104. Analyzing Design Flaw Deltas Number of flaws Time
  • 105. Analyzing Design Flaw Deltas Number of flaws Addition of flaws Time
  • 106. Analyzing Design Flaw Deltas Number of flaws Addition of flaws Time correlation Defects Time Δt
  • 107. Results on Six Large Systems 0.4 + Flaw presence correlation 0.6+ Flaw addition correlation
  • 108. Results on Six Large Systems 0.4 + Flaw presence correlation aw correlate s more than No fl sistently acr oss systems other s con 0.6+ Flaw addition correlation
  • 109. Software Quality Analysis The presence and addition of design flaws correlates with software defects. QSIC 2010
  • 110. Bug Prediction with E-mails 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; } } Software defects E-mail archive Question: Can bug prediction techniques be improved with e-mail data?
  • 111. Software entities that are frequently mentioned in development mailing lists are defect prone Popularity Metrics
  • 112. Spearman’s correlation Do popularit y metrics correlate wit h defects? Popularity metrics
  • 113. Spearman’s correlation Do popularit y metrics 0.8 correlate wit h defects? Popularity metrics 0.6 0.4 0.2 0 Equinox Jackrabbit Lucene Maven
  • 114. Spearman’s correlation Do popularit y metrics 0.8 correlate wit h defects? Popularity metrics Lines of code 0.6 0.4 0.2 0 Equinox Jackrabbit Lucene Maven
  • 115. Prediction performance Do popularity metrics improve existing bug prediction techniques? POP POP metrics metrics
  • 116. Prediction performance Do popularity metrics improve existing bug prediction techniques? 0.5 SCM data 0.4 Code metrics 0.3 POP POP metrics metrics 0.2 0.1 0
  • 117. Prediction performance Do popularity metrics improve existing bug prediction techniques? 0.5 4% SCM 0.4 SCM data + 12% Code + POP POP Code metrics 0.3 POP POP metrics metrics 0.2 0.1 0
  • 118. Bug Prediction with E-mails Popularity metrics extracted from development mailing lists correlate with defects and improve existing bug prediction techniques. FASE 2010
  • 119. Retrospective Analysis Change coupling Bug evolution Code-bug 1 2 3 analysis analysis co-evolution analysis 4 5 6 7 Bug prediction Bug prediction with change Software quality analysis Bug prediction with e-mails coupling Future Prediction
  • 120. Change coupling 1 2 analysis Bug prediction with e-mails 7 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; Bug evolution analysis Software quality analysis 6 3 Mevo meta-model Code-bug co-evolution analysis 5 4 Bug prediction with change coupling Bug prediction
  • 121. Ph.D. Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 122. Ph.D. Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 123. Ph.D. Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 124. tools were fundamental for my daddy's research
  • 125. 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; } } Mevo meta-model
  • 126. Churrasco framework 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; } } Mevo meta-model SCP 2010
  • 127. Churrasco framework 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; Importers dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } } Mevo meta-model Web interface SCP 2010
  • 128. Churrasco framework for(int j=m; j>i; j--){ Evolution Radar Data interface 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; Importers dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } } Bug’s Life BugCrawler Mevo meta-model Pendolino Web interface SCP 2010
  • 130. Tool Gallery Bug’s Life
  • 132. Tool Gallery Pendolino
  • 134.
  • 135. Churrasco Evolution Radar Bug’s Life BugCrawler Pendolino MSR 2006 1 Change coupling analysis WCRE 2006 TSE 2009 2 Bug evolution analysis VISSOFT 2007 3 Code-bug co-evolution analysis CSMR 2006 4 Bug prediction MSR 2010 5 Bug prediction with change coupling WCRE 2009 6 Software quality analysis QSIC 2010 7 Bug prediction with e-mails FASE 2010 WASDeTT 2008 MSR Challenge CSMR 2007
  • 136. Ph.D. Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 137. Ph.D. Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 138. Ph.D. Intermezzo x Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 139. Replicating Experiments Bug prediction benchmar k Models available through Churrasco web interface
  • 140. Recent annotations added User SVG Interactive Visualization People participating to the collaboration Report generator Selected figure Context menu Selected figure information Metrics mapping configurator Package selector Regular expression matcher Collaboration in Churrasco STTT 2010
  • 141. Ph.D. Intermezzo x Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 142. Ph.D. Intermezzo x Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 143. Ph.D. Intermezzo x Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 144. Ph.D. Intermezzo x Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153. Deve lop er neo Limitations
  • 154. User studies Other languages Deve lop er neo Limitations More case studies
  • 155. User studies Other languages Deve lop er neo Limitations More case studies Future Work
  • 156. User studies Other languages Deve lop er neo Limitations Exploit author data More case studies Future Work
  • 157. User studies Other languages Deve lop er neo Limitations Exploit author data More case studies 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]; Extend the Combine data[j]= tempStr; dataUC[j-1]= uCJ; dataUC[j]= uCJM1; } } meta-model techniques Future Work Mevo
  • 158. 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; } } HOLISTIC SOFTWARE EVOLUTION MORE REPOSITORIES AHEAD
  • 159. 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; } } HOLISTIC SOFTWARE Holistic EVOLUTION software MORE REPOSITORIES AHEAD evolution
  • 160. Ph.D. Intermezzo x Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 161. Ph.D. Intermezzo x Conclusion swamp of procrastination x peaks of tools madness x Thesis Analysis x techniques x Tool support We are here haunted teachwood forest
  • 162. Journal papers Conference papers 1. On Porting Software Visualization Tools to the Web 1. On the Impact of Design Flaws on Software Defects Marco D'Ambros, Michele Lanza, Mircea Lungu, Romain Robbes Marco D'Ambros, Alberto Bacchelli, Michele Lanza In Software Tools for Technology Transfer (STTT), Springer, 2010. In Proceedings of QSIC 2010, pp. 23-31. 2. Distributed and Collaborative Software Evolution Analysis with Churrasco 2. An Extensive Comparison of Bug Prediction Approaches Marco D'Ambros, Michele Lanza Marco D'Ambros, Michele Lanza, Romain Robbes In Journal of Science of Computer Programming (SCP),Vol. 75. No. 4, pp. 276-287. In Proceedings of MSR 2010, pp. 31-41. Elsevier, 2010. 3. Are Popular Classes More Defect Prone? 3. Visualizing Co-Change Information with the Evolution Radar Alberto Bacchelli, Marco D'Ambros, Michele Lanza Marco D'Ambros, Michele Lanza, Mircea Lungu In Proceedings of FASE 2010, pp. 59-73. In IEEE Transactions on Software Engineering (TSE),Vol. 35. No. 5, pp. 720-735. IEEE CS 4. On the Relationship Between Change Coupling and Software Defects Press, 2009. Marco D'Ambros and Michele Lanza and Romain Robbes 4. Visual Software Evolution Reconstruction In Proceedings of WCRE 2009, pp. 135-144. Marco D'Ambros, Michele Lanza 5. Promises and Perils of Porting Software Visualization Tools to the Web In Journal on Software Maintenance and Evolution: Research and Practice (JSME),Vol.21, Marco D'Ambros, Mircea Lungu, Michele Lanza, Romain Robbes No.3, pp. 217-232, May 2009. John Wiley & Sons, 2009. In Proceedings of WSE 2009, pp. 109-118. 6. A Flexible Framework to Support Collaborative Software Evolution Analysis Marco D'Ambros, Michele Lanza In Proceedings of CSMR 2008, pp. 3-12. 7. Reverse Engineering with Logical Coupling Other publications Marco D'Ambros, Michele Lanza In Proceedings of WCRE 2006, pp. 189-198. 8. Software Bugs and Evolution: A Visual Approach to Uncover Their Relationships 1. Supporting Software Evolution Analysis with Historical Dependencies and Marco D'Ambros, Michele Lanza Defect Information In Proceedings of CSMR 2006, pp. 227-236. Marco DʼAmbros In Proceedings of ICSM 2008, pp. 412-415. 2. The Metabase: Generating Object Persistency Using Meta Descriptions Marco D'Ambros, Michele Lanza, Martin Pinzger In Proceedings of FAMOOSr 2007. 3. BugCrawler: Visualizing Evolving Software Systems Workshop papers Marco D'Ambros, Michele Lanza 1. Churrasco: Supporting Collaborative Software Evolution Analysis In Proceedings of CSMR 2007, pp. 333-334. Marco D'Ambros, Michele Lanza 4. Applying the Evolution Radar to PostgreSQL In Proceedings of WASDeTT 2008, 2008. Marco D'Ambros, Michele Lanza 2. "A Bug's Life" - Visualizing a Bug Database In Proceedings of MSR 2006, pp. 177-178, 2006. Marco D'Ambros, Michele Lanza, Martin Pinzger In Proceedings of VISSOFT 2007, pp. 113-120. 3. The Evolution Radar: Visualizing Integrated Logical Coupling Information Marco D'Ambros, Michele Lanza, Mircea Lungu In Proceedings of MSR 2006, pp. 26-32.