Skip to main content
An Exploratory Study of the Impact
    of Code Smells on Software Change-
                proneness

                  Foutse Khomh, Massimiliano Di Penta,
                       and Yann-Gaël Guéhéneuc
                                                  WCRE’09
                                                 2009/10/13



Ptidej Team – OO Programs Quality Evaluation and Enhancement using Patterns
Department of Computer Science and Operations Research
University of Montréal, Québec, Canada                                        © Khomh, 2009
Context and Motivation

        Code smells are “poor” solutions to recurring
        implementation problems
        Code smells are in between design and
        implementation
        Code smells are conjectured in the literature
        to hinder object-oriented software evolution
        No previous study has investigated the
        relationship between code smells and
        change-proneness
2/27
Objective

        Study the impact of code smells on the
        change-proneness of classes

        Study the impact of the composition of
        code smells on the change-proneness
        of classes


3/27
Outline

        Study Definition
        Study Context
        Study Design
        Analysis Method
        Results
        Conclusion and Future Work

4/27
Study Definition                  (1/2)
        Goal: investigate the relation
        between the presence of smells in
        classes and their change-proneness

        Quality focus: the increase of
        maintenance effort and cost is due to
        the presence of code smells

5/27
Study Definition                    (2/2)
        Perspective: both researchers,
        practitioners, and managers should be
        aware of the impact of code smells on
        classes to make inform design and
        implementation choices
        – The presence of change-prone classes
          increases maintenance effort and cost



6/27
Study Context                        (1/2)

        Programs
        – 9 versions of Azureus (5,858,041 LOCs)
        – 13 versions of Eclipse (31,579,975 LOCs)


        Change history between each analysed
        releases in the programs’ concurrent
        Versions System (CVS)

7/27
Study Context                       (2/2)
        29 code smells




        Detected using our tool, DECOR (based on
8/27    metrics and lexical information)
Study Design                                         (1/3)
        RQ1: What is the relation between smells and change
        proneness?
        – H01: the proportion of classes undergoing at least one
          change between two releases does not significantly differ
          between classes with code smells and other classes.

        RQ2: What is the relation between the number of
        smells in a class and its change-proneness?
        – H02: the numbers of smells in change-prone classes are not
          significantly higher than the numbers of smells in classes
          that do not change.




9/27
Study Design                           (2/3)

         RQ3: What is the relation between
         particular kinds of smells and change
         proneness?
         – H03: classes with particular kinds of code
           smells are not significantly more change-
           prone than other classes.



10/27
Study Design                             (3/3)
         Independent Variables
         – 29 kind of code smells.
         – Each variable si,j,k indicates the number of
           times a class i has a smell j in a release rk.

         Dependent variables
         – Classes change proneness.
         – Measured as the number of changes ci,k
           that a “smelly class” underwent between
           release rk and subsequent release rk+1.
11/27
Analysis Method                        (1/3)
         For RQ1, we:
         – Test the proportions of classes exhibiting
           (or not) at least one change with (some)
           smells vs. other classes.

         – Use Fisher’s exact test.

         – We compute the Odds ratios (OR).

12/27
Analysis Method                            (2/3)
         For RQ2, we:
         – Compare the numbers of smells in change-
           prone classes vs. non-change-prone
           classes.

         – Use a Mann-Whitney non-parametric test.

         – Estimate the magnitude of differences with
           the Cohen d effect size
           • Small: 0.2 ≤ d ≤ 0.3, medium: around 0.5, and
             large: ≥ 0.8.
13/27
Analysis Method                          (3/3)
         For RQ3, we:
         – Relate change-proneness with the
           presence of particular kinds of smells.

         – We use a logistic regression model.

         – We decide that a relation is significant if
           the null-hypothesis is rejected for at least
           75% of the releases.
14/27
Results                         (1/6)
        RQ1: smells and changes (Azureus)




15/27
Results                             (2/6)
        RQ1: smells and changes (Eclipse)




16/27
Results          (3/6)

         RQ2:
         composition
         of smells and
         changes
         (Azureus)

17/27
Results          (4/6)

         RQ2:
         composition
         of smells and
         changes
         (Eclipse)

18/27
Results        (5/6)

         RQ3: kinds
         of smells
         and changes
         (Azureus)




19/27
Results        (6/6)

         RQ3: kinds
         of smells
         and changes
         (Eclipse)




20/27
Discussion
         Classes with smells are more change-
         prone, some odds ratio 3 to 8 times
         bigger for these classes.
         HasChildren, MessageChains,
         NotComplex, and NotAbstract lead
         almost consistently to change-prone
         classes.
         Existing smells are generally removed
         from the system while some new are
         introduced in the context of new
21/27    features addition.
Threats to the validity                       (1/2)
        Construct validity
         – The count of changes occurred to classes is
           based on the CVS change log.
         – Subjectivity of the definitions of code smells
            • We were interested in code smells as defined by
              our tool.
         – Dependence between code smells
            • We perform a Spearman rank correlation
              analysis.
            • Our logistic regression only selected non-
22/27         correlated smells.
Threats to the validity                                  (2/2)
         Internal validity
          – We do not claim causation, only relation.
         Conclusion validity
          – Statistic tests properly used.
              • We verified their underlying assumptions.
         Reliability validity
          – We provide all the details for the replication of our study.
         External validity
          – The generalisation will require further studies.
              • We chose programs from different domains and a
                representative set of code smells.
23/27
Conclusion                                 (1/2)
         We provide empirical evidence of the
         negative impact of code smells on classes
         change-proneness.
         We show that:
         – Classes with smells are significantly more likely
           to be the subject of changes, than other classes.
         – The more a class have smells, the more it
           changes.
         – Some specific code smells, are more likely to be
           of concern during evolution: e.g.,
           MessageChains, NotComplex (and Lazy classes)
24/27
Conclusion                                 (2/2)
         Previous studies correlated source code
         metrics with change-proneness.

         – But, we believe that smells can provide to
           developers recommendations easier to
           understand than what metric profiles can do.

         – However, we found that metrics still perform
           better than smells on building change-
           proneness/fault-proneness prediction models.

25/27
Future work
         Our future work includes:
         – Replicating this study
         – Studying the effect of anti patterns which
           are at a higher level of abstraction
         – Relates smells, anti patterns to fault-
           proneness



         The data of our study are available online
         http://www.ptidej.net/downloads/experiments/prop-WCRE09
26/27
Questions




         Thank you for listening
27/27