<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Minimizing Refactoring Effort through Prioritization of Classes based on Historical, Architectural and Code Smell Information</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Aabha Choudhary</string-name>
          <email>aabhasgnr@gmail.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>National Institute of Technology Jalandhar</institution>
          ,
          <country country="IN">India</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2016</year>
      </pub-date>
      <fpage>76</fpage>
      <lpage>79</lpage>
      <abstract>
        <p>-Improving a software system's internal structure through regular refactoring is considered vital for its long and healthy life. However, despite its amenities, refactoring is not readily adopted by software development teams in industry mainly due to strict project deadlines and limited resources. Hence, they look for optimal refactoring recommendations that would incur minimal effort overhead while outputting decent benefits in terms of enhanced software quality. To this end, we propose an approach for identifying and prioritizing objectoriented software classes in need of refactoring. Our approach first identifies the most refactoring-prone as well as architecturally relevant classes, and then generates class ranks based on the code smell information. In addition to locating classes with the most significant incremental refactoring opportunities, this work contributes through suggesting developers on estimating maximum code smell correction (paying off maximum technical debt) with minimum refactoring effort. We evaluated the proposed approach on a sample of 1621 classes and 2358 code smell instances, distributed over 28 versions of four open source java systems.</p>
      </abstract>
      <kwd-group>
        <kwd>class prioritization</kwd>
        <kwd>software refactoring</kwd>
        <kwd>code smell</kwd>
        <kwd>refactoring effort</kwd>
        <kwd>technical debt</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>
        Maintenance and evolution are lifelines for the success of a
product in modern day software development. Evolving
software requires its design and code to be optimized
periodically in order to avoid any technical debt resulting from
decaying of such artifacts [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. The decision over a given
software change is critical and requires expertise on the part of
software developers. Software refactoring is a simple yet
effective approach that enables developers improve the design
structure of software while preserving its perceived external
behavior [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. In order to limit the maintenance cost and
improve the quality of the software system, ideally software
companies try to incorporate refactoring practices as an integral
part of their development and maintenance processes [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
      </p>
      <p>
        However, the ground reality is somewhat different. Not
only are the developers expected to regularly enhance the
quality of software, they are also under a constant pressure to
spend most of their person hours adding new features rather
than refactoring the source code [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Some of the major hurdles
in refactoring adoption in industrial projects include, getting
management buy-in, deadline pressure, inadequate refactoring
tool support, etc. [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Also, the entire process of refactoring
comprises a number of distinct activities that make it a tedious
and expensive phenomenon [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Consequently, various
automated tools supporting different refactoring activities have
been proposed, which help in reducing manual effort, time
consumption and errors; thus bringing down the overall
Paramvir Singh
evolution complexity and cost. However, on the other hand,
these automated tools have their own issues too. For instance,
code smell detection tools yield numerous results which are
quite hard to examine. This scenario demands a balanced
approach from the refactoring research community to help
developers introduce refactoring to the rest of stakeholders as a
significant tool for continuous quality [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] without adversely
affecting project deadlines and cost.
      </p>
      <p>
        This work looks for a solution in the Law of the Vital Few,
which states - “only 20% of code contains 80% of errors” [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ].
We propose a class prioritization approach that is capable of
identifying, at the top of the generated class priority list, a set
of most crucial (decided on architectural relevance alongwith
code smell information) and refactoring-prone (decided on
historical information) application classes in need of urgent
refactoring. We further investigate whether prioritizing classes
in need of refactoring using the proposed approach might help
in achieving an affordable balance between the estimated
refactoring effort savings (in terms of number of classes to be
refactored) and amount of code smell correction (in terms of
number of smell instances to be removed).
      </p>
      <p>
        Palomba et al. [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] proposed approaches that involve
examining the version history of software’s source code to
identify the code smell instances in the current software
version. Macia et al. [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] worked diligently to probe the relation
between code anomalies and architectural problems. Oizumi et
al. [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] carried this research further and introduced a new
approach that explores the relationship between code anomaly
agglomerations and architectural problems.
      </p>
      <p>
        Tsantalis et al. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] proposed an approach for ranking the
refactoring opportunities based on historical volatility.
Meananeatra [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] presented a technique that generates an
optimal refactoring sequence for improving software
maintenance. Ouni et al. [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] described a search-based
approach for identifying the most appropriate refactorings
based on chemical reaction optimization. Steidl et al. [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]
introduced a prioritization scheme for two code smells, Code
Clones and Long Method, based on the expected low costs
involved in the correction of these code smells. Vidal et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]
presented a semi-automated approach for prioritizing the code
smells based on three different criteria: code smell relevance,
past modifications and modifiability scenarios of the software.
      </p>
      <p>
        There is limited research work performed in the area
pertaining to the prioritization of classes in need of urgent
refactoring treatments. Zhao et al.[
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] prioritized classes based
on a weighted maintainability rank for each class containing
bad smells, utilizing different class characteristics such as size,
complexity, etc. In a data mining based study, Kosker et al.
[
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] applied weighted Naïve Bayes (NB) algorithm to predict
the classes in urgent need of refactoring. Malhotra et al. [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ]
prioritized the software classes based on Quality Depreciation
Index Rule (QDIR) metric, which measures the quality of a
class based on the number of bad smells present and a set of
object-oriented design metrics values for each class.
      </p>
    </sec>
    <sec id="sec-2">
      <title>III. PROPOSED APPROACH Our class prioritization approach follows a three step process as explained next.</title>
      <sec id="sec-2-1">
        <title>A. Analysis of Versions (AV)</title>
        <p>
          We follow the hypothesis stated by Girba et al. [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] that the
classes that were frequently refactored in the past are more
likely to undergo refactoring in the future. These classes can be
categorized as refactoring-prone classes. The remaining classes
that did not experience refactoring in any of the previous
versions are considered to be least harmful; so we filter out
such classes at this step.
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>B. Analysis of Architecturally relevant Classes (AC)</title>
        <p>
          Another major factor that should be considered when
identifying candidates for refactoring is the extent to which
they are harmful to the system’s architectural design.
Architectural problems have more detrimental impact on the
quality and lifecycle of the system than other traditional code
smells. Therefore, we select those classes that contain code
smells having a direct relationship with such architectural
problems [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]. The current version of the software is analyzed to
locate the architecturally-relevant classes as they are
considered to be the pillar classes of the software design, and a
delay in their improvement can cause deteriorating effects on
the system’s quality.
        </p>
        <p>The data from the above two steps are combined and the
common set of classes, which are both architecturally relevant
as well as frequently refactored, are provided as input to the
third step. The rest of the classes are discarded.</p>
      </sec>
      <sec id="sec-2-3">
        <title>C. Generation of Rank (GR)</title>
        <p>
          The resulting crucial and refactoring-prone classes are then
ordered according to their impact on the system’s quality. The
classes are ranked using class scores generated as follows:
Class Score = F ×S× ∑ (S(xi) × I(xi))
(1)
Here, F is the frequency score of a class. Every time a class is
found to be refactored at least once when comparing two
subsequent software versions, its frequency score is
incremented by 1. S is the severity score of a class. It measures
the negative impact of a class on the quality attributes of the
system. It is measured by exploiting several software metrics
like size, cohesion, coupling, complexity, etc. [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. S(xi) is the
severity score of a particular code smell xi for a given class.
Each code smell instance has a different effect on the system
design. This score represents the relative negative impact of
the code smell instances. I(xi) represents the number of
instances of a code smell xi present in a class. Here, i identifies
a particular code smell.
        </p>
        <p>Once the class scores are generated, all these classes are
ranked in decreasing order of their scores. Hence larger the
Class Score value, higher the rank of the class; signifying the
need of refactoring for a class. A threshold value can be
associated with the class ranks to leave out the lowest ranked
classes present in the sorted list, thus further reducing the
number of shortlisted classes.</p>
        <p>An example for the proposed approach and additional
information regarding this work is publicly available1.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>IV. STUDY DESIGN</title>
      <p>We chose four open-source Java applications to perform
our experiments. Table I provides the descriptive
characteristics (number of classes, Kilo Lines Of Code
(KLOC), and number of code smell instances) of the selected
systems, namely HealthWatcher2, orDrumbox3, GanttProject4
(Gantt for short) and JHotdraw5.</p>
      <sec id="sec-3-1">
        <title>A. Methodology</title>
        <p>
          The overall research methodology followed is shown in
Fig. 2. The first step of the proposed approach involves
analyzing different stable versions of a given input system. The
classes (belonging to each current version), which have been
refactored at least once in previous software versions, are
recorded alongwith their frequency score values. For
identifying the number of frequently refactored classes in each
software system, Ref-Finder tool [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] is used. Classes that have
never been refactored before are filtered out at this step, and the
remaining classes are recorded. At the next step, the current
version of the software system is analyzed with the help of
Organic6 tool. For our analysis, we considered those classes as
architecturally-relevant, which are identified by intra-boundary
and cross-boundary topologies [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ]. An intersection of the class
sets obtained from the aforementioned analysis steps are used
as input for the final step.
        </p>
        <p>In the final step, JSpIRIT 7 is used to detect code smell
instances in the current versions of the sample applications.
Although JSpIRIT is generally used for prioritizing code
smells, we exploited its detection features only (as it does not
provide the code smell severity scores as desired for this
study). It supports the identification of 10 code smells using a
software metric-based detection strategy. This metric-based
strategy dissolves our need to calculate the object-oriented
metrics values separately for predicting smelly classes, as the
classes will be automatically categorized as ‘smelly’ according
to the presence of code anomalies. Thereafter, inFusion8 tool is
used to calculate the severity index of classes and code smell
instances. It supports the identification of 7 of the 10 code
smells detected by JSpIRIT. Hence, we use only these 7 code
smells1 in this work.</p>
      </sec>
      <sec id="sec-3-2">
        <title>B. Evaluation of Proposed Approach</title>
        <p>
          We utilize the approach evaluation parameters: Code smells
Correction Ratio (CCR) [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] and Estimated Effort (EE) [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ] to
evaluate our proposed approach. CCR is defined as the total
number of code smell instances to be removed by refactoring
the prioritized classes, divided by the total number
1 http://www.pvsingh.com/a_choudhary
2 http://ptolemy.cs.iastate.edu/design-study/#healthwatcher
3 http://sourceforge.net/projects/ordrumbox
4 http://ganttproject.biz/index.php
5 http://jhotdraw.org
6 http://wnoizumi.github.io/organic/plugin
7 https://sites.google.com/site/santiagoavidal/projects/jspirit
8 http://www.intooitus.com/products/infusion [Last Accessed - Mar 10, 2016]
of code smell instances present in the software. It is given by
(2).
        </p>
        <p>EE is defined as the total number of classes that needs to be
refactored divided by the total number of classes present in the
software. After calculating the total estimated effort for
refactoring, the total reduction in refactoring effort can be
deduced. EE is given by (3).
(2)
(3)</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>V. PRELIMINARY RESULTS AND ANALYSIS</title>
      <p>The evolution of sample applications is quantified with the
help of three version specific characteristics mentioned in
Table I. The percentage of refactored classes between any two
subsequent versions is always greater than 0% across all
applications, which is quite normal for real world software
systems. On average, 30% of the total number of classes is
architecturally relevant across all four sample applications.
This indicates that 30% (avg.) of the classes stand critical to the
respective architectures of the current versions of these
applications, and hence need immediate refactoring. Further, it
is inferred that, on average, out of those 30% classes, 21%
classes are refactored more than once in the previous versions.
Thus, these 21% classes are chosen as the most significant and
refactoring-prone classes.</p>
      <p>Table II highlights three top ranked classes for each
application, respectively. Note that in this table, the two
541 596 584 601 623 599 641 653 668 1003 855 947 986 1172 1172
penultimate columns are devoted to the total number of code
smell instances in a class and average of code smells severity
values, respectively. However, for the actual calculation of the
class scores (when exercising the proposed approach), we
considered the individual code smells alongwith their
respective severity scores. It is conspicuous from Table II that
the four class score parameters (Section III.C) contribute
uniformly in generating balanced ranks for the classes. E.g. for
orDrumbox, class ControlerProduct has higher severity score than
classes OrTrack, Song, and Command; but due to low average
number of code smell instances and frequency score, it records
a low class score (and rank). Moreover, it is found that the
classes having higher frequency scores have a higher number
of code smell instances too. Thus it is revealed that despite of
having been refactored in the earlier versions, such classes are
still smelly and need further attention.</p>
      <p>The evaluation results are summarized in Table III. On
average, nearly 40% (EE) of the total number of classes needs
frequent refactoring treatments. At the same time, the CCR
scores indicate that more than 75% of the code defects fall
within these 40% classes. On applying refactoring treatments to
these classes, a significant improvement in software quality is
ensured as indicated by high CCR scores. At the next step
(AC), we observed that almost half of the previously refactored
classes do not pose any threat to the architectural degradation
of the selected systems. For instance, for JHotdraw, 158 of 278
classes (56%) are architecturally relevant. Consequently, EE
score for JHotDraw dropped to 20% with a minimal decline in
CCR score. Similar results are obtained for orDrumbox; a
refactoring effort of 26% and smell correction of 73%. We
gathered the results for those classes having ranks above a
custom threshold value of 20. The developers can choose any
threshold values that help them establish the desired balance
between the amount of smell correction and estimated
refactoring effort for their projects.</p>
      <p>The results revealed that the search space for refactoring
opportunities (number of classes) is constantly shrinking with</p>
      <p>Step
AV
AC
GR
AV
AC
GR
AV
AC
GR
AV
AC
GR
each step of the proposed approach. We observed that on
average (across all sample applications) the refactoring effort
required to remove 65% (avg. CCR) of code smells comes out
to be 16% (avg. EE); hence saving an estimated refactoring
effort up to 84%. For HealthWatcher, EE value shows a similar
trend whereas its CCR value is slightly less as compared to that
for other applications; but still acceptable. Overall results
indicate that a major chunk of code anomalies could be
targeted with a significant reduction in refactoring effort. This
approach provides the developers with an option to choose any
number of top ranked classes to refactor depending upon an
affordable balance between the code smell corrections and
estimated refactoring effort.</p>
    </sec>
    <sec id="sec-5">
      <title>VI. THREATS TO VALIDITY</title>
      <p>A construct validity threat concerns the possible errors (like
some classes may be missed or may be identified as false
positives) while identifying the refactored classes,
architecturally relevant classes and code smell instances. To
mitigate this threat, we considered widely known and fairly
accurate code smell detection and refactoring detection tools
that have been used in the relevant literature. While analyzing
the software versions, we considered all those classes that have
been refactored more than once. It would also include such
classes that underwent a change just once during their
evolution across various software versions. To mitigate this
threat, we manually analyzed the classes, and decided whether
they should be included or not. We analyzed four small and
medium-sized open source java systems. This could affect the
generalization of our approach when applied to large-sized
commercial systems as well as systems written in other
programming languages. However, the variable-sized sample
applications along with the consistency in the experimental
results across those applications minimize this threat to some
extent.</p>
    </sec>
    <sec id="sec-6">
      <title>VII. CONCLUSIONS AND FUTURE WORK</title>
      <p>In this study, we presented an approach for the
prioritization of classes in need of refactoring. The proposed
approach combines three different perspectives, i.e. historical
data, architectural design, and severity of the class; and
generates a prioritized list of classes. By prioritizing the classes
based on our approach, up to 84% of refactoring effort was
expected to be saved while also eradicating 65% (approx.) of
the code smells for the four selected software applications. The
proposed approach and the related findings can be useful for
the development teams, which are short on project time and
budget, to have refactoring processes on board. Also, such a
prioritization of refactoring opportunities might help the
developers in doing away with having to process large sets of
refactoring recommendations.</p>
      <p>We intend to extend this work in a number of ways. Since
our initial experimental study includes small and medium-sized
projects, we plan to replicate our experiments to the large-sized
systems and industrial projects in future. An important future
work would be to aim more number of distinct code smells to
further gain in terms of saved refactoring effort and increased
code smell correction. We also aim to compare our results with
previous class prioritization techniques targeting refactoring.
Lastly, we intend to implement our approach in the form of an
automated tool that provides a prioritized list of classes in need
of refactoring, and let the developers opt for the right balance
between the estimated refactoring effort savings and expected
code smell corrections.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>T.</given-names>
            <surname>Sharma</surname>
          </string-name>
          , G. Suryanarayana, and G. Samarthyam, “
          <article-title>Challenges to and Solutions for Refactoring Adoption: An Industrial Perspective</article-title>
          ,” IEEE Software, vol.
          <volume>32</volume>
          , no.
          <issue>6</issue>
          , pp.
          <fpage>44</fpage>
          -
          <lpage>51</lpage>
          , Nov.
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Fowler</surname>
          </string-name>
          ,
          <article-title>Refactoring: Improving the Design of Existing Code</article-title>
          .
          <source>Pearson Education India</source>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>T.</given-names>
            <surname>Mens</surname>
          </string-name>
          and
          <string-name>
            <given-names>T.</given-names>
            <surname>Tourwé</surname>
          </string-name>
          , “
          <article-title>A Survey of Software Refactoring,” IEEE Trans Softw</article-title>
          . Eng., vol.
          <volume>30</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>126</fpage>
          -
          <lpage>139</lpage>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>M.</given-names>
            <surname>Leppänen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Mäkinen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Lahtinen</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Sievi-Korte</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. P.</given-names>
            <surname>Tuovinen</surname>
          </string-name>
          , and T. Männistö, “
          <article-title>Refactoring-a Shot in the Dark?</article-title>
          ,
          <source>” IEEE Software</source>
          , vol.
          <volume>32</volume>
          , no.
          <issue>6</issue>
          , pp.
          <fpage>62</fpage>
          -
          <lpage>70</lpage>
          , Nov.
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>R. S.</given-names>
            <surname>Pressman</surname>
          </string-name>
          , Software Engineering:
          <article-title>A Practitioner's Approach</article-title>
          . Palgrave Macmillan,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>T.</given-names>
            <surname>Girba</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Ducasse</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Lanza</surname>
          </string-name>
          , “
          <article-title>Yesterday's Weather: guiding early reverse engineering efforts by summarizing the evolution of changes,”</article-title>
          <source>In Proc. Int'l Conf. on Softw. Maint.</source>
          , pp.
          <fpage>40</fpage>
          -
          <lpage>49</lpage>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>I.</given-names>
            <surname>Macia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Garcia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Chavez</surname>
          </string-name>
          ,
          <article-title>and A. von Staa, “Enhancing the Detection of Code Anomalies with Architecture-Sensitive Strategies,”</article-title>
          <source>In Europ. Conf. on Softw. Maint. and Reeng</source>
          ,pp.
          <fpage>177</fpage>
          -
          <lpage>186</lpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>W. N.</given-names>
            <surname>Oizumi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. F.</given-names>
            <surname>Garcia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T. E.</given-names>
            <surname>Colanzi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Ferreira</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A. V.</given-names>
            <surname>Staa</surname>
          </string-name>
          , “
          <article-title>On the relationship of code-anomaly agglomerations and architectural problems,”</article-title>
          <string-name>
            <given-names>J.</given-names>
            <surname>Softw</surname>
          </string-name>
          .
          <source>Eng. Res. Dev.</source>
          , vol.
          <volume>3</volume>
          , no.
          <issue>1</issue>
          ,
          <string-name>
            <surname>Dec</surname>
          </string-name>
          .
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>N.</given-names>
            <surname>Tsantalis</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Chatzigeorgiou</surname>
          </string-name>
          , “
          <source>Ranking Refactoring Suggestions Based on Historical Volatility,” In European Conference on Software Maintenance and Reengineering</source>
          , pp.
          <fpage>25</fpage>
          -
          <lpage>34</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>P.</given-names>
            <surname>Meananeatra</surname>
          </string-name>
          , “
          <article-title>Identifying Refactoring Sequences for Improving Software Maintainability,”</article-title>
          <source>In Proc. of the 27th IEEE/ACM International Conference on Automated Software Engineering</source>
          , pp.
          <fpage>406</fpage>
          -
          <lpage>409</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ouni</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Kessentini</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Bechikh</surname>
          </string-name>
          , and
          <string-name>
            <given-names>H. A.</given-names>
            <surname>Sahraoui</surname>
          </string-name>
          , “
          <article-title>Prioritizing code-smells correction tasks using chemical reaction optimization,” Softw</article-title>
          . Qual. J., vol.
          <volume>23</volume>
          , no.
          <issue>2</issue>
          , pp.
          <fpage>323</fpage>
          -
          <lpage>361</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>D.</given-names>
            <surname>Steidl</surname>
          </string-name>
          and
          <string-name>
            <given-names>S.</given-names>
            <surname>Eder</surname>
          </string-name>
          , “
          <source>Prioritizing Maintainability Defects Based on Refactoring Recommendations,” In Proceedings of International Conference on Program Comprehension</source>
          , pp.
          <fpage>168</fpage>
          -
          <lpage>176</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>S. A.</given-names>
            <surname>Vidal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Marcos</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J. A.</given-names>
            <surname>Díaz-Pace</surname>
          </string-name>
          ,
          <article-title>“An approach to prioritize code smells for refactoring,” Autom</article-title>
          . Softw. Eng., pp.
          <fpage>1</fpage>
          -
          <lpage>32</lpage>
          , Dec.
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>L.</given-names>
            <surname>Zhao</surname>
          </string-name>
          and
          <string-name>
            <given-names>J. H.</given-names>
            <surname>Hayes</surname>
          </string-name>
          , “
          <article-title>Rank-based Refactoring Decision Support: Two Studies,” Innov Syst Softw Eng</article-title>
          , vol.
          <volume>7</volume>
          , no.
          <issue>3</issue>
          , pp.
          <fpage>171</fpage>
          -
          <lpage>189</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Kosker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Turhan</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Bener</surname>
          </string-name>
          , “
          <article-title>An expert system for determining candidate software classes for refactoring,” Expert Syst</article-title>
          .
          <source>Appl.</source>
          , vol.
          <volume>36</volume>
          , no.
          <issue>6</issue>
          , pp.
          <fpage>10000</fpage>
          -
          <lpage>10003</lpage>
          , Aug.
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>R.</given-names>
            <surname>Malhotra</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Chug</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Khosla</surname>
          </string-name>
          , “
          <article-title>Prioritization of Classes for Refactoring: A Step Towards Improvement in Software Quality,”</article-title>
          <source>Proc. Int'l Symp. Women in Computing and Informatics</source>
          , pp.
          <fpage>228</fpage>
          -
          <lpage>234</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>S. M.</given-names>
            <surname>Olbrich</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D. S.</given-names>
            <surname>Cruzes</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D. I. K.</given-names>
            <surname>Sjøberg</surname>
          </string-name>
          , “
          <article-title>Are all code smells harmful? A study of God Classes and Brain Classes in the evolution of three open source systems</article-title>
          ,
          <source>” Int'l Conf. Softw. Maint.</source>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>10</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>M.</given-names>
            <surname>Kim</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Gee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Loh</surname>
          </string-name>
          , and
          <string-name>
            <given-names>N.</given-names>
            <surname>Rachatasumrit</surname>
          </string-name>
          , “
          <article-title>Ref-Finder: A Refactoring Reconstruction Tool Based on Logic Query Templates</article-title>
          ,
          <source>” Proc.ACM Int'l Symp. Found. of Softw</source>
          . Eng., pp.
          <fpage>371</fpage>
          -
          <lpage>372</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>F.</given-names>
            <surname>Palomba</surname>
          </string-name>
          , G. Bavota,
          <string-name>
            <given-names>M. D.</given-names>
            <surname>Penta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Oliveto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Poshyvanyk</surname>
          </string-name>
          and
          <string-name>
            <surname>A. De Lucia</surname>
          </string-name>
          , “Mining Version Histories for Detecting Code Smells,”
          <source>In IEEE Trans. on Softw. Eng.</source>
          , vol.
          <volume>41</volume>
          , no.
          <issue>5</issue>
          , pp.
          <fpage>462</fpage>
          -
          <lpage>489</lpage>
          , May 1
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>