<!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>Investigating the Effectiveness of Greedy Algorithm on Open Source Software Systems for Determining Refactoring Sequence</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Sandhya Tarwani</string-name>
          <email>sandhya.tarwani@gmail.com</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ashish Sureka</string-name>
          <email>ashish.sureka@ashoka.edu.in</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Ashoka University</institution>
          ,
          <country country="IN">India</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>SRM University</institution>
          ,
          <country country="IN">India</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2017</year>
      </pub-date>
      <fpage>43</fpage>
      <lpage>50</lpage>
      <abstract>
        <p>-The deeper problem in the source code are the bad smells that indicates something is wrong and if they are not detected timely, then they lead towards the complete deterioration of the working software causing major financial and productivity loss. Refactoring helps in removing these bad smells by improving internal quality attributes of the software without affecting its external behaviour. However refactoring needs to be applied in a controlled manner. In this study an approach has been propose for determining an optimal refactoring sequence that will maximize the source-code maintainability using greedy algorithm. The proposed approach selects the most optimum sequence at every step-in hope of finding the global optimum solution. We conduct an empirical analysis on four open-source software and select those classes that have bad smells greater than or equal to four. Further filtration is done by selecting those classes from the group that have high value of source code lines. We demonstrate the effectiveness of our approach using concrete examples of the experimental dataset and presenting summary results. Index Terms-Empirical Software Engineering, Software Quality, Refactoring, Greedy Algorithm, Software Maintainability</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. RESEARCH MOTIVATION AND AIM</title>
      <p>
        Fowler [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] defined the term code smell. Code smells are
indicators of root problem in the source code. They represent
symptoms under which real problem exist and hence help
software developers and maintainers to focus only on that
portion of source code so that quality and reliability of the
software gets improved. Code smells also indicate the violation
of fundamental principle and negatively affect the quality of
the software but they are not initially bugs. They eventually
result in defects and failures only if they are not handled
properly. Sometimes developers apply quick fixes to the
problem identified and continue their work but it deteriorates the
performance of the software and gets accumulated with time,
hence chances of its termination increases. This not only
wastes time but a lot of money and efforts are spent during
the maintenance of the software. Hence, code smells need
to be removed as soon as they are identified which in turn
efforts and time saves and helps software to get complete and
maintain within real time constraints. Refactoring is a term
used for the restructuring and redesigning of the existing code
without altering its external attributes. Fowler [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] defined more
than 70 types of refactoring techniques like extract method,
extract class etc., and all consists of several steps that will
help maintainers to make original code less complex thereby
increasing quality [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>
        Although software consists of both functional as well as
non-functional attributes but refactoring helps in improving
its non-functional attribute like improving code readability,
reducing complexity etc. It helps in transforming the source
code that no longer contains code smell. For example, if
long methods are present in source code than it results in
poor understanding and increasing complexity. Therefore, it
leads towards the need of applying refactoring techniques
so that these problems get removed early. Techniques like
Extract Method are used to extract some lines of code from
the long method to make it short and precise so that it
can be easily understood. Refactoring helps in improving the
software maintainability. It needs to be applied in a short
cycle and in a controlled manner so that it does not result
in any negative impact on the quality and functionality of the
software. Although these small cycles or transformation may
not give extraordinary results but the cumulative effect will
be very significant for the overall performance of the software
[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>
        Recently, several researchers are conducting study on
finding the correct or best sequence for refactoring techniques
so that software maintainability value gets enhanced [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]
[
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. If the sequence is known in advance to the software
developers, then it will substantially reduce the effort and
time spent on bug fixing and thereby improving quality of the
software. In this paper, authors present their research work on
finding the sequence of refactoring techniques by prioritizing
the classes on the basis of number of bad smell and the
value of line of code metric and thereby applying greedy
algorithm. The refactoring sequence, thus, found will help in
maximizing the software maintainability value measured using
object-oriented software metrics [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. While there has been
prior work on this topic (as discussed in the Related Work
Section of the paper), the problem is relatively unexplored
and not fully solved. In context to existing work, following
are the novel and unique contributions of the work presented
in this paper:
1) A greedy-approach based algorithm for determining the
refactoring sequence for a software system. Our study is
the first work on grouping classes based on the number
of bad smells and then applying the greedy algoritm.
2) An empirical analysis on four open-source software
systems to exhibit the effect of the proposed approach. Our
study is the first work on JTDS, JChess, OrDrumbox and
ArtOfIllusion dataset
      </p>
    </sec>
    <sec id="sec-2">
      <title>II. RELATED WORK</title>
      <p>
        A. Ghannem et al. [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] proposed an approach for automating
the refactoring process in the source code with the help
of Iterative Genetic Algorithm. It helps in integrating the
feedbacks of users in classic GA and uses a fitness function
which merges the analyzed design model and models from
base of examples. Y. Khrishe and M. Alshayeb [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] conducted
an empirical study to find out whether order of applying
refactoring affects the quality of the software or not. They
showed that applying refactoring in different orders have
different impact on the quality of the software. I. Toyoshima
et al. [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] proposed 3 gate refactoring algorithm which is a
new refactoring algorithm that is developed with the help of
three refactoring rules of Workflow net. A. Shahjahan et al.
[
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] used graph theory techniques to propose a new method of
code refactoring which is applied on projects written in Java
language. G. Szoke et al. [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] developed a refactoring toolset
called FaultBuster that helps in detecting problems in source
code with the help of source code analysis, running automatic
algorithms to remove bad smells and execute integrated testing
tools. Meananeatra et al. [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], Eduardo et al. [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] and Wongpiang
et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], Tarwani et al. [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] present techniques on searching
for refactoring sequence for single class of a dataset.
      </p>
    </sec>
    <sec id="sec-3">
      <title>III. PROPOSED SOLUTION APPROACH</title>
      <p>
        We download source-code dataset from sourceforge and bad
smells are identified with the help of plug-ins like JDeodorant
[
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. Figure 1 and 2 shows the block diagram and flow
chart for the multi-step approach. Classes are then prioritized
on the basis of number of bad smells and only those classes
are considered whose number of bad smells are greater than
or equal to 4. Accordingly, groups will be created based on
the number of bad smells. Changes in metric values plays a
key role and thereby are taken into consideration after applying
refactoring techniques so that sum of metrics can be calculated.
In this study, trees are formed after applying refactoring
techniques therefore, assigning priority to each technique is
very important in the analysis for the formation of trees
without any confusion. After assigning priorities, one class
is picked from each category based on the higher LOC value.
1-ary tree is formed where number of refactoring techniques
is less than or equal to 3 and 2-ary tree is formed otherwise.
After the formation of the trees, greedy algorithm is used to
find out the best sequence for maximizing maintainability.
      </p>
      <p>
        Greedy algorithm is an algorithmic paradigm that always
makes choices that look best at that moment [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. It
tries to make locally optimal choices at each stage in hope
of finding the globally optimal solution. A global optimal
solution is not guaranteed as it focuses and provides approximate
global optimal solution for a given problem. Greedy algorithm
works on the principle of choosing best at the moment and
then solves sub-problems accordingly. It only considered the
past solutions or present and will never focus on the future
solution of the sub-problem. It helps in reducing the bigger
problem into smaller one by iteratively choosing best solution
at each step [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. It is mainly used to solve the optimized
problems that look for the best solution at a particular instant
of time. It uses objective function that helps in the decision of
choosing right solution such that given objective function gets
optimized. The main point which needs to be kept in mind is
that greedy algorithm will have only one chance to find the
optimal solution as it never reverses its decision. Most of the
programmers prefer greedy algorithm as it is most efficient
one and analyzing its run time is very easy and time saving.
      </p>
      <p>In this study, greedy algorithm is used to find the refactoring
sequence for the datasets used. At every step, we move
forward in the tree formed (refer to Figure 1 and 2), greedy
algorithm takes decisions which are best at that moment
and move forward and at the end it gives the refactoring
sequence so that the overall maintainability can be maximized.
Greedy algorithm plays an integral part in this study after the
formation of the trees.</p>
      <p>As it can be seen in Table I, various types of bad smells
are identified in the source code and their removal requires
different types of refactoring techniques. Table I displays bad
smells found in eight classes of the Jtds project. Table I
presents the number of bad smells, list of bad smells and
the lines of code in the Class containing the bad smell. We
observe that there are classes with number of bad smells more
than 5 which clearly shows the need of refactoring and also
identifying a correct order of refactoring. Figure 3 shows the
step-by-step procedure and result (as a worked out example
and illustration) of applying the proposed approach on Classes
belonging to the JTDS project. As shown in Figure 3, we
perform grouping based on the number of bad smells, select
classes based on the highest LOC value and then apply the
refactoring sequence.</p>
      <p>Different refactoring techniques can be applied to the same
part of the code which will then convert the original code to
different versions depending on which refactoring technique
is applied. Sometimes, combination of refactoring techniques
are applied to the code to see whether it result in the better
version of the original code or not. These scenarios need to
be kept in mind in forming the trees for different software.
Trees represents structured object that needs to be explored
by human beings from root node to the leaf. Trees are faster
to search therefore are more convenient and efficient to use.
In this study, trees are formed after applying refactoring to the
original code in two ways that are discussed below.</p>
      <sec id="sec-3-1">
        <title>A. One-ary analysis</title>
        <p>In one-ary analysis (refer to Figure 5), trees are formed by
applying various refactoring techniques on a same potion of
the code. It results in different versions of the original code and
hence will help in finding the best quality version among all. It
needs to be kept in mind that the changed version should be an
improved version of the original source code. After applying
the refactoring techniques, this analysis will give the top most
refactoring technique and hence will be very useful for the
software developers to apply the best refactoring in the future
during maintenance phase.</p>
        <p>As shown in Figure 4, four refactoring techniques like
Extract Method (EM), Push Up (PU), Push Down (PD) and Move
Method (MM) have been applied to the initial original code to
get four changed versions of the software. The CC denotes the
changed code and is collaborated along with the refactoring
technique in a node of a tree. This notation becomes easy
to understand and implement. Software developers will have
four alternative paths and only one can be selected based on
the improvement of the quality of the code with respect to
maintainability. Hence, three refactoring techniques need to
be eliminated and is done by considering the maintainability
value of the software after applying it.</p>
      </sec>
      <sec id="sec-3-2">
        <title>B. Two-ary analysis</title>
        <p>The two-ary trees (refer to Figure 5) are formed after
combining refactoring techniques on the source code so that
percentage of improvement of quality gets increased. It is
important to enhance the quality of the software by applying
refactoring in different combinations because refactoring is
itself expensive that can make the situation even more worse,
therefore controlled mechanism has to be kept in mind. As
shown in Figure 3, Figure 4 and 5, the original code gets
converted to the changed code CC1 by applying Extract
method class. Afterwards push up refactoring technique is
applied to get CC2 and so on. Different refactoring techniques
are applied one after the other on the same portion of the code
to get final changed version CC4. These refactoring techniques
are applied in accordance to the presence of bad smell in code.
Therefore at the end, refactoring sequence is found out to be
EM ! PU ! PD ! MM but consideration should be given to
the fact that after applying this refactoring technique sequence
in order, the value of software maintainability needs to be
maximized then only there will be a gain in terms of time as
well as budget.</p>
        <p>It is not always possible to apply refactoring techniques
one after the other. There may be situations where some will
be eligible to apply and some are not. In this manner, two-ary
trees are formed. As take another example where original code
contains four types of bad smells and two types of refactoring
techniques combinations can be applied on the same portion.
Therefore, the two-ary tree for the same will be similar to
Figure 5. As it can be seen, extract method along with push up
can be used as well as move method and push down techniques
can also be used. Here, there exist two refactoring sequences
EM ! PU and MM ! PD. Hence, it depends on the value
of software maintainability of the changed code version that
will decide which combination improves the quality of the
software more.</p>
        <p>The order in which refactoring is applied initially depends
on two factors, the presence of a particular bad smell that
will help in judging the software developer which particular
technique should be used in removing that smell and priority
of the refactoring techniques, that is, Refactoring Priority, RP
which is calculated with the help of maintainability values and
number of classes in which a particular refactoring technique
is applied. Initially, individual refactoring technique say X is
applied and value of maintainability, M is observed. After</p>
        <p>TABLE VIII</p>
        <p>FOUR CLASSES FROM JTDS DATASET SELECTED AS ILLUSTRATIVE
EXAMPLE TO DEMONSTRATE REFACTORING SEQUENCE DETERMINATION</p>
        <p>ALGORITHM
Sequence
Tdscore.java (7 smells)
Jtdsstatement.java (6 smells)
Support.java (5 smells)
Jtdsdatabasemetadata.java (4 smells)</p>
        <p>CBO
MM ! EMRC</p>
        <p>MM ! RC
EC ! RE
EM ! RC
dividing M value with the number of classes in which X
is applied, priority of X technique can be determined. In a
similar way, priority values of all the refactoring technique
used in this study is found out and highest priority is given
to that refactoring technique that will have minimum value. It
will help in selecting refactoring technique during formation
of trees.
(1)
RP [X] =</p>
        <p>In Equation 1, SO represents the sum obtained and N CR
represents the number of classes in which refactoring is
applied.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>IV. EXPERIMENTAL DATASET</title>
      <p>Various developers and programmers across the globe are
voluntarily creating open source software and uploading it
on the platform where they are easily accessible to anybody
for their use. With the help of this software, it becomes
easy for researchers to generalize the results and work on
these datasets so that a trend can be set up. Keeping this
in mind, in this study four datasets have been downloaded
from sourceforge.net. These datasets are chosen as their size
varies from small to medium sized and hence will help in
generalizing the result. The description of the dataset used
has been provided below.</p>
      <p>JTDS1 - It is an open source jdbc 3.0 type 4 driver for
Microsoft SQL Server. It is currently the fastest production
ready JDBC driver for SQL server. It consists of 64
classes.</p>
      <p>JChess2 - It is a java based chess game project that requires
two players playing on local computer or via network
connection. It consists of 69 classes.</p>
      <p>OrDrumbox3 - It is an open source audio sequencer and
software drum machine that is used to compose the bass
line for completing the song. It consists of 217 classes.
ArtOfIllusion4 - It consists of 739 classes and is a fully
featured 3D modeling, rendering and animation studio.
It consists of subdivision surface based modeling tools,
graphical language for designing etc.</p>
      <p>For each metric of open source dataset which have been
used in this study their descriptive statistics are collected
like maximum value, minimum value, standard deviation etc
but due to lack of space, tables are not included in this
study. Therefore, following interpretations are added about
descriptive statistics to give a little understanding about these
datasets.</p>
      <p>The maximum value of AHF is nearly 100 in each datasets
indicating hidden property of attributes. The standard deviation
value of WMC is high in AOI and Jtds datasets indicating high
faults. The standard deviation value of LCOM is highest in
Jtds datasets hence cohesion among methods is minimum. The
maximum value of RFC is highest for dataset AOI and Jtds
which tells that these two datasets are more prone to faults.
The mean value of CBO is highest in case of ArtOfIllusion
dataset which implies that classes are highly complex therefore
lacks understandability. The standard deviation value of Ocavg
is highest in case of Jtds dataset which indicates complexity.
The standard deviation value of MHF is highest in case of
ArtOfIllusion dataset which shows that methods have little
functionality as compared to other dataset’s method.</p>
    </sec>
    <sec id="sec-5">
      <title>V. EXPERIMENTAL RESULTS</title>
      <p>In order to demonstrate the workings of the proposed
approach, one of the dataset results has been shown step by
step for the clear and better understanding of the algorithm
proposed to obtain refactoring sequence. Dataset jtds consist
of 64 classes in which eight classes have been considered as
severe as they contain bad smells greater than 4 and are shown
in Table I along with their LOC values. Priority values of the
refactoring techniques have been found out with the help of
Equation 1 and accordingly rank is assigned as shown in Table
II to each refactoring technique used to remove the bad smells
present in the classes of the dataset. These ranks will help
in selecting refactoring techniques for the formation of the
trees. Classes are selected on the basis of highest LOC value
as higher LOC value will lead towards more confusion and
complexities and hence need to be focused urgently; therefore
four classes have been selected as shown in Table VIII for
finding out the correct refactoring sequence for maximizing
maintainability. Table VIII also contains the type of refactoring
techniques required in a particular class according to the
different bad smells.
The formation of the tree is done according to the analysis
discussed in the Section III-A and III-B. Refactoring
techniques are selected on the basis rank assigned to them. Figure 5
describes the formation of the 1-ary tree for
jtdsDatabaseMetaData.java and 2-ary tree for tdscore.java respectively. Table III
to Table VII [different types] contains the change in value of
metrics after applying refactoring techniques so that sum can
be calculated for all the metrics that will help in relating it
with the maintainability of the class. Tables III to Table VII
are created with the help of trees formed in analysis step.
With the help of trees levels, each table is formed. If results
for tdscore.java are taken into consideration then it can be
seen from Table III that it is formed by after the application
of R2 and R4 refactoring techniques. Afterwards, minimum
value is selected among all the rows calculation by keeping
in mind the inverse relation between the software metrics and
maintainability.</p>
      <p>In Table IV to VII, again the combinations of refactoring
techniques are applied but this time only that part of the
tree is taken forward that gets selected in table. For example,
in table MM, EM combination has minimum sum of metric
value therefore it is taken forward and only that part of the
tree is selected and considered in future. Remaining part of
the tree gets rejected and will not take part in obtaining
the refactoring sequence as greedy algorithm is used that
selects the optimal solution at each step. Therefore, at the
end refactoring sequence for tdscore.java is found to be MM
! EM ! RC as this combination has minimum value of
sum of metrics which results in maximum maintainability. In
a similar way, refactoring sequence of other three classes is
found out and is shown in Tables IV to VII and Table IX. The
proposed algorithm is applied to other datasets as well and
their respective sequences for severe classes are obtained as
shown in Tables IV, VII and IX.</p>
      <p>As it can be seen from the Table XI, the number of god
class and long method type of bad smells are high in all the
datasets which indicates the maximum use of extract class and
extract method refactoring technique throughout the case study
in removing them and hence it will be a part of refactoring
sequence in most of the cases. Hence, it can be concluded
that most common refactoring sequence will EC-EM. There
are classes in the datasets in which bad smells are not present
and hence no change is required. It can be seen from Table
X, for instance consider dataset Artofillusion, 194 classes out
of 739 classes will remain unchanged which indicates that no
effort will be wasted in improving these classes and software
maintenance team can focus on other classes with high number
of bad smells so that refactoring sequence can be figure out
by applying proposed algorithm. It can also be observed from
Table XI that over logging type of bad smell is not present in
any dataset and hence sprout class refactoring technique will
never be a part of refactoring sequence.</p>
    </sec>
    <sec id="sec-6">
      <title>VI. CONCLUSION We present an approach to determine the refactoring sequence for a software system having bad smells in several</title>
      <p>classes. The proposed approach is based on identifying bad
smells for each class in the object-oriented software system
(number of bad smells and types of smell) and grouping the
classes based on the number of bad smells. The approach
consists of computing object-oriented metrics and applying a
greedy algorithms involving the formation of 1-ary and 2-ary
trees searching for a sequence that improves the metric values
and improves the maintainability of the system. We conduct
experiments on four open-source Java projects to demonstrate
the effectiveness of our approach. We conduct a series of
experiments and explain the workings of the approach
step-bystep using worked-out examples and finally present summary
results for all the classes for all the four projects. We present
descriptive statistics of the final results which shows that the
proposed approach meets its desired objectives.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>S. R.</given-names>
            <surname>Chidamber</surname>
          </string-name>
          and
          <string-name>
            <given-names>C. F.</given-names>
            <surname>Kemerer</surname>
          </string-name>
          .
          <article-title>A metrics suite for object oriented design</article-title>
          .
          <source>IEEE Transactions on software engineering</source>
          ,
          <volume>20</volume>
          (
          <issue>6</issue>
          ):
          <fpage>476</fpage>
          -
          <lpage>493</lpage>
          ,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Fowler</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Beck</surname>
          </string-name>
          .
          <article-title>Refactoring: improving the design of existing code</article-title>
          .
          <source>Addison-Wesley Professional</source>
          ,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ghannem</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>El Boussaidi</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Kessentini</surname>
          </string-name>
          .
          <article-title>Model refactoring using interactive genetic algorithm</article-title>
          .
          <source>In International Symposium on Search Based Software Engineering</source>
          , pages
          <fpage>96</fpage>
          -
          <lpage>110</lpage>
          . Springer,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>A.-R.</given-names>
            <surname>Han</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.-H.</given-names>
            <surname>Bae</surname>
          </string-name>
          .
          <article-title>An efficient method for assessing the impact of refactoring candidates on maintainability based on matrix computation</article-title>
          .
          <source>In Software Engineering Conference (APSEC)</source>
          ,
          <year>2014</year>
          21st Asia-Pacific, volume
          <volume>1</volume>
          , pages
          <fpage>430</fpage>
          -
          <lpage>437</lpage>
          . IEEE,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Khrishe</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Alshayeb</surname>
          </string-name>
          .
          <article-title>An empirical study on the effect of the order of applying software refactoring</article-title>
          .
          <source>In Computer Science and Information Technology (CSIT)</source>
          ,
          <year>2016</year>
          7th International Conference on, pages
          <fpage>1</fpage>
          -
          <lpage>4</lpage>
          . IEEE,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <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 Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering</source>
          , pages
          <fpage>406</fpage>
          -
          <lpage>409</lpage>
          . ACM,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>E.</given-names>
            <surname>Piveta</surname>
          </string-name>
          , J. Arau´jo,
          <string-name>
            <given-names>M.</given-names>
            <surname>Pimenta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Moreira</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Guerreiro</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R. T.</given-names>
            <surname>Price</surname>
          </string-name>
          .
          <article-title>Searching for opportunities of refactoring sequences: reducing the search space</article-title>
          .
          <source>In Computer Software and Applications</source>
          ,
          <year>2008</year>
          . COMPSAC'
          <volume>08</volume>
          . 32nd Annual IEEE International, pages
          <fpage>319</fpage>
          -
          <lpage>326</lpage>
          . IEEE,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>A.</given-names>
            <surname>Shahjahan</surname>
          </string-name>
          , W. haider Butt,
          <article-title>and</article-title>
          <string-name>
            <given-names>A. Z.</given-names>
            <surname>Ahmad</surname>
          </string-name>
          .
          <article-title>Impact of refactoring on code quality by using graph theory: An empirical evaluation</article-title>
          .
          <source>In SAI Intelligent Systems Conference (IntelliSys)</source>
          ,
          <year>2015</year>
          , pages
          <fpage>595</fpage>
          -
          <lpage>600</lpage>
          . IEEE,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>G.</given-names>
            <surname>Szo</surname>
          </string-name>
          ˝ke,
          <string-name>
            <given-names>C.</given-names>
            <surname>Nagy</surname>
          </string-name>
          , L. J. Fu¨lo¨p,
          <string-name>
            <given-names>R.</given-names>
            <surname>Ferenc</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Gyimo</surname>
          </string-name>
          <article-title>´thy. Faultbuster: An automatic code smell refactoring toolset</article-title>
          .
          <source>In Source Code Analysis and Manipulation (SCAM)</source>
          ,
          <year>2015</year>
          IEEE 15th International Working Conference on, pages
          <fpage>253</fpage>
          -
          <lpage>258</lpage>
          . IEEE,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>S.</given-names>
            <surname>Tarwani</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Chug</surname>
          </string-name>
          .
          <article-title>Sequencing of refactoring techniques by greedy algorithm for maximizing maintainability</article-title>
          .
          <source>In Advances in Computing, Communications and Informatics (ICACCI)</source>
          , 2016 International Conference on, pages
          <fpage>1397</fpage>
          -
          <lpage>1403</lpage>
          . IEEE,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>I.</given-names>
            <surname>Toyoshima</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Yamaguchi</surname>
          </string-name>
          , and
          <string-name>
            <surname>J. Zhang.</surname>
          </string-name>
          <article-title>A refactoring algorithm of workflows based on petri nets</article-title>
          .
          <source>In Advanced Applied Informatics (IIAIAAI)</source>
          ,
          <year>2015</year>
          IIAI 4th International Congress on, pages
          <fpage>79</fpage>
          -
          <lpage>84</lpage>
          . IEEE,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>N.</given-names>
            <surname>Tsantalis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Chaikalis</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Chatzigeorgiou</surname>
          </string-name>
          . Jdeodorant:
          <article-title>Identification and removal of type-checking bad smells</article-title>
          .
          <source>In Software Maintenance and Reengineering</source>
          ,
          <year>2008</year>
          .
          <source>CSMR</source>
          <year>2008</year>
          . 12th European Conference on, pages
          <fpage>329</fpage>
          -
          <lpage>331</lpage>
          . IEEE,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>R.</given-names>
            <surname>Wongpiang</surname>
          </string-name>
          and
          <string-name>
            <given-names>P.</given-names>
            <surname>Muenchaisri</surname>
          </string-name>
          .
          <article-title>Selecting sequence of refactoring techniques usage for code changing using greedy algorithm</article-title>
          .
          <source>In Electronics Information and Emergency Communication (ICEIEC)</source>
          ,
          <year>2013</year>
          IEEE 4th International Conference on, pages
          <fpage>160</fpage>
          -
          <lpage>164</lpage>
          . IEEE,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Schwartz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Wagner</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Miller</surname>
          </string-name>
          .
          <article-title>A greedy algorithm for aligning dna sequences</article-title>
          .
          <source>Journal of Computational biology</source>
          ,
          <volume>7</volume>
          (
          <issue>1</issue>
          - 2):
          <fpage>203</fpage>
          -
          <lpage>214</lpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>