<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Quality-oriented Move Method Refactoring</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Christian</forename><surname>Marlon</surname></persName>
							<email>christiancouto@posgrad.ufla.br</email>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">Federal University of Lavras Lavras</orgName>
								<address>
									<country key="BR">Brazil</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Souza</forename><surname>Couto</surname></persName>
							<affiliation key="aff0">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">Federal University of Lavras Lavras</orgName>
								<address>
									<country key="BR">Brazil</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Henrique</forename><surname>Rocha</surname></persName>
							<email>henrique.rocha@gmail.com</email>
							<affiliation key="aff1">
								<orgName type="institution">Inria Lille -Nord Europe Lille</orgName>
								<address>
									<country key="FR">France</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Ricardo</forename><surname>Terra</surname></persName>
							<email>terra@dcc.ufla.br</email>
							<affiliation key="aff2">
								<orgName type="department">Department of Computer Science</orgName>
								<orgName type="institution">Federal University of Lavras Lavras</orgName>
								<address>
									<country key="BR">Brazil</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Quality-oriented Move Method Refactoring</title>
					</analytic>
					<monogr>
						<imprint>
							<date/>
						</imprint>
					</monogr>
					<idno type="MD5">C5D33751805C578AB504F421E273C8D3</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2023-03-24T21:56+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Restructuring is an important activity to improve software internal structure. Even though there are many restructuring approaches, very few consider the refactoring impact on the software quality. In this paper, we propose an semiautomatic software restructuring approach based on quality attributes. We rely on the measurements of the Quality Model for Object Oriented Design (QMOOD) to recommend Move Method refactorings that improve software quality. In a nutshell, given a software system S, our approach recommends a sequence of refactorings R1, R2, . . . , Rn that result in system versions S1, S2, . . . , Sn, where quality(Si+1) &gt; quality(Si). We empirically calibrated our approach to find the best criteria to measure the improvement of quality. In our preliminary evaluation on three open-source systems, our approach achieved an average recall of 57%.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>I. INTRODUCTION</head><p>The refactoring process changes the code to improve the internal structure without compromising its external behavior <ref type="bibr" target="#b1">[2]</ref>. Currently, there are many restructuring approaches where the degree of automation can vary <ref type="bibr" target="#b3">[4]</ref>. Nevertheless, there are very few that consider their impact in software quality metrics. Consequently, a software system may be restructured into a version that worsens its overall quality.</p><p>In this paper, on the context of a search-based software engineering research, we propose an semi-automatic software restructuring approach based on software quality metrics. We rely on the measurements of the Quality Model for Object Oriented Design (QMOOD) <ref type="bibr" target="#b0">[1]</ref> to recommend Move Method refactorings that improve software quality. In a nutshell, given a software system S, our approach recommends a sequence of refactorings R 1 , R 2 , . . . , R n that result in system versions S 1 , S 2 , . . . , S n , where quality(S i+1 ) &gt; quality(S i ). Indeed, our approach provides software architects a real grasp whether refactorings improve software quality or not.</p><p>We empirically calibrated our approach to find the best criteria to assess software quality improvement. First, we modified the JHotDraw system by randomly moving a subset of its methods to other classes. Second, we verified if our approach would recommend the moved methods to return to their original place. After testing five different calibration criteria, we calibrated the approach with the one that achieved the best f-score (38%), which corresponds to a precision of 27% and a recall of 65%.</p><p>We implemented QMove, a prototype plug-in for Eclipse IDE that supports our proposed restructuring approach with our current calibration. The plug-in receives as input a Java system and outputs the better sequence of Move Method refactorings that improves the overall software quality.</p><p>Finally, we evaluated our approach on three open-source systems: FreeMind, Maven, and WCT. Similar to our calibration method, we modified the original systems by randomly moving a subset of their methods to other classes. Next, we verified if our approach recommended the moved methods to return to their original classes. As result, QMove could move back 57% of the methods, on average.</p><p>The remainder of this paper is organized as follows. Section II presents the basic concepts to better understand our approach. Section III describes and calibrates our proposed approach. Section IV evaluates our approach. Finally, Section V discusses the related work and Section VI concludes.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>II. BACKGROUND</head><p>In this section, we present the basic concepts on refactoring (Section II-A) and introduce the QMOOD model for quality assessment (Section II-B).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A. Refactoring</head><p>Refactoring is basically restructuring applied to objectoriented programming <ref type="bibr" target="#b4">[5]</ref>, which can be described as transformations in a software that preserve its behavior.</p><p>From the several types of refactoring, we highlight the Move Method, which is used in our proposed restructuring approach. A Move Method refactoring consists in moving a method from one class to another. The move can even occur to classes in different packages. There are many reasons to move a method to a different class to improve the software quality. A common scenario for this refactoring is when we realize that a method depends more from members from another class than its own (a bad smell named Feature Envy).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. Quality Model for Object Oriented Design</head><p>Bansiya and Davis <ref type="bibr" target="#b0">[1]</ref> proposed QMOOD (Quality Model for Object Oriented Design) to measure software quality aspects in object oriented projects. This model defines 11 object-oriented design properties and links them to an appropriate design metric (Table <ref type="table" target="#tab_0">I</ref>). Then, it identifies six qualities attributes based on the ISO 9126 and propose equations using the design properties to measure such qualities (Table <ref type="table" target="#tab_1">II</ref>) <ref type="bibr" target="#b0">[1]</ref>. We employ the equations proposed for the quality attributes in our proposed approach.  </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>III. PROPOSED APPROACH</head><p>We propose an semi-automatic restructuring approach by using Move Method refactoring and six quality attributes defined by QMOOD (Table <ref type="table" target="#tab_1">II</ref>). First, the approach calculates the six quality attributes for the analyzed software. Second, we detect every method that could be moved automatically to another class. Third, for each method, we move it to a different class, recalculate the quality attributes, and return it to its original place. Fourth, we include the refactoring that achieved better quality measurements to the recommendation list and repeat the third step for the remaining methods. After we processed every method, we present a recommendation list showing the sequence of Move Method refactorings ordered by their quality results (highest to lowest).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>A. Example</head><p>This section illustrates a Move Method refactoring scenario where our approach could be performed. Suppose a small Java system S with two classes: A and B. Class A has two methods: methodA1 and methodA2. For this example, we highlight method methodA2 (Listing 1) that receives a B object as a formal parameter. The code inside the method accesses only the attribute from class B by using the object b (lines 2-3). More specifically, the method prints class B attribute if its value is not zero (lines 3) and "Empty" otherwise (line 5). Therefore, we can deduce that it would be more appropriate if we moved this method to class B, which creates a new system version S 0 . Figure <ref type="figure">1</ref> shows a UML diagram of the classes described in our example, before and after we move the aforementioned method. When we apply our approach to system S, first we compute the QMOOD quality attributes for S. Then, we detect methodA2 as a method that could be moved to another class. The method is moved to class B creating the new system version S 0 . We recompute the quality metrics for S 0 and then we return the method to class A, which is its original place. In this particular case, since there are only two classes, our approach finishes its analysis. However, if other classes did exist, then our approach would repeat the process by moving the method to another class and recalculating the quality metrics again.</p><p>Table <ref type="table" target="#tab_2">III</ref> shows the QMOOD quality attributes for S and S 0 , and the difference between S 0 and S. Even though, flexibility, effectiveness, and extendibility remain the same, the values for the other three quality attributes (reusability, functionality, understandability) improve. Since it shows better quality attributes, our approach would recommend methodA2 to be moved to class B (as previous illustrated in Figure <ref type="figure">1</ref>). </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>B. Algorithm</head><p>Algorithm 1 describes our proposed approach in a highlevel abstraction. It is worth noting that before we execute the algorithm, we make a copy of the analyzed system, and the algorithm is executed in this copy (and not the actual system).</p><p>The algorithm receives as input a list containing all methods with their respective class from the analyzed system. The output is a sequence of Move Method refactorings that resulted in better quality metrics, ordered from highest to lowest according to the quality measurements.</p><p>First, it calculates the current six QMOOD quality metrics for the analyzed system (line 5). Second, it determines which methods of the system (m) that can be automatically moved to other classes (C) (lines 6-10) and store the pairs (m, C) in the list of potential refactorings (line 8).</p><p>Algorithm 1: Proposed Approach Algorithm 1 Input: methods: a list with every method and their respective class from the analyzed system 2 Output: recommendations: an ordered sequence of Move Method refactoring that can be applied to the analyzed system 3 begin 4 potRefactor := ? The next loop (lines 13-27) finishes when the list containing the methods for potential refactoring is empty. Now, each refactoring list is moved (line 15), the quality metrics are recalculated after moving the method (line 16), and the method returns to its original class (line 17). If the quality measurements are better than the current ones (line 18), then the method is added to our list as a candidate for refactoring (line 19).</p><p>After we measure every method, we select the one that achieved the best quality metric improvement (line 22). The best refactoring is applied to the system copy (line 23), removed from the potential refactoring list (line 24), and added to the recommendations (line 25). The new calculated metrics for the best refactoring is used to as the system baseline now (line 26).</p><p>After the execution of Algorithm 1, the sequence of Move Method refactorings is recommended to the user. The larger the number of refactorable methods, the higher the execution time. We argue that performance is not critical since our approach is designed to be performed as part of night builds.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>C. Calibration</head><p>Our calibration is related to the fitness function from Algorithm 1 (line 18). The fitness function defines how we compare the quality attributes to determinate if they are an improvement according to our requirements. Our objective is to identify the best set of requirements for the fitness to make our approach recommend better refactoring options.</p><p>We chose the JHotDraw 1 software as the baseline for our calibration process. Our main reason for using JHotDraw in our calibration is due its methods are likely to be in their 1 JHotDraw is a Java framework for graphic objects, and its design relies on well-known design patterns. http://www.jhotdraw.org/, verified 2017-10-22.</p><p>proper classes, since it is developed and maintained by a small number of expert developers. We used version 4.6, which is composed of 674 classes, 6,533 methods, and 80,536 lines of code. For the calibration, we randomly moved 20 methods from JHotDraw to other classes. The information about these methods and classes (original and newly moved), we called Gold Set. We employ the Gold Set to verify if our algorithm recommends moving those methods back to their original place. In theory, the fitness function that recommends more methods from the Gold Set performs better.</p><p>Table <ref type="table" target="#tab_3">IV</ref> summarizes the calibrations showing the description, the total number of recommended methods, the recommendations from the Gold Set (GS), and we also calculated precision, recall, and f-score.</p><p>In the first calibration, our criterion was the more simplistic where we verified if none of the quality attributes decreased and at least one attribute increased. We used such criteria for our fitness function. Then, we executed our algorithm to the modified JHotDraw and we got 28 methods recommended. However, only two methods belonged to the Gold Set. Therefore, we investigated why the 18 remaining methods in the Gold Set where not recommended by our algorithm. We discovered that the effectiveness value would get worse for most the Gold Set, which discarded those methods from the recommendations.</p><p>In the second calibration, since the effectiveness rarely changed in the first calibration, we adjusted the fitness function to disregard this quality attribute, while maintaining the other criteria from the first calibration. This resulted in our algorithm to recommend five methods from the Gold Set.</p><p>In the third calibration, our criterion was as simplistic as the first one where we compare the overall sum of all six quality attributes. By using this new fitness function, we managed to find 11 methods from the Gold Set but the total number of recommendations increased to 56.</p><p>In the fourth calibration, we modified the fitness function based on the following two observations: (i) in the second calibration, flexibility, understandability, and extensibility improved but the remaining attributes (reusability and functionality) decreased; and (ii) Mkaouer et al. <ref type="bibr" target="#b5">[6]</ref> stated that Move Method refactoring usually increases the values for flexibility, understandability, and extensibility. Therefore, here we focus only on these three attributes: flexibility, understandability, and extensibility. The remaining attributes were not considered for this calibration. This calibration recommended 48 methods in which 13 belonged to the Gold Set.</p><p>In the fifth calibration, we used the following three design metrics (Table <ref type="table" target="#tab_0">I</ref>): CAM (cohesion), DCC (coupling), and CIS (messaging). We chose these metrics because they are the QMOOD design metrics that usually change when a method is moved. We then establish the criteria for the fitness function that cohesion, coupling, and messaging cannot decrease. This calibration resulted in 45 recommended methods in which only five belonged to the Gold Set.</p><p>When we consider the f-score values, the fourth calibration achieved the best results. Recall is also very important, and the fourth calibration also achieved the best recall result. Therefore, our fitness function uses the criteria defined by the fourth calibration, i.e., the quality attributes of flexibility, understandability, and extensibility cannot decrease and at least one of them should increase.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>IV. EVALUATION</head><p>This section evaluates our proposed restructuring approach through QMove, a prototype plug-in for Eclipse IDE we implemented to support our proposed restructuring approach. <ref type="foot" target="#foot_0">2</ref> We chose three open-source systems (Table <ref type="table" target="#tab_4">V</ref>) that possess a welldefined architecture and present a similar number of classes JHotDraw does. We can assume, differently of JHotDraw, that most methods of these systems are likely to be in proper classes and hence we only evaluate recall. Similarly to our calibration using JHotDraw, we modified the subject systems by randomly moving ten methods of each to other classes. Those methods compose our Gold Set, and our evaluation consists in verifying if Gold Set methods are recommended back to their original place by our approach. Table VI reports the evaluation results for each system, the total number of recommended methods, the recommendations from the Gold Set, and the achieved recall. Our evaluation results shows a 57% average recall for methods in the Gold Set. This result is quite lower than the calibration, where we achieved 65% recall for the JHotDraw system (Table <ref type="table" target="#tab_3">IV</ref>). The FreeMind and Maven systems performed closer to our calibration (60% recall for both systems). Therefore, we claim that we still need to improve the approach to achieve better results. Although our approach considerably improved the quality of these systems, we cannot guarantee similar results in low-quality systems (further work).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>V. RELATED WORK</head><p>In this section, we highlight and discuss four studies that are closely related to our proposed restructuring approach. Mkaouer et al. <ref type="bibr" target="#b5">[6]</ref> propose an approach that searches for a sequence of refactoring actions to maximize the six QMOOD quality attributes while minimizing the number of refactoring actions. Although their approach covers more refactoring types, it does not analyze all possible refactoring options, which may lead to a sub-optimum restructuring. By contrast, our approach analyzes every possibility for the Move Method refactoring.</p><p>Moghadam and Cinnéide <ref type="bibr" target="#b6">[7]</ref> present a tool for refactoring based on three QMOOD quality attributes, called Code-Imp. They propose four search algorithms to maximize flexibility, understandability, and extensibility. Even though their tool supports many refactoring types, it does not support the Move Method refactoring, which is the refactoring we used in our approach.</p><p>Napoli et al. <ref type="bibr" target="#b7">[8]</ref> propose an approach to suggest Move Method refactoring opportunities in large object-oriented systems. They rely on conventional metrics-such as Fan-In, Fan-Out, LCOM, CBO, and a Jaccard similarity coefficient-to detect refactoring opportunities. However, their approach does not aim to recommend the refactorings that better improve the system quality, which contrasts the main goal of our approach.</p><p>Griffith et al. <ref type="bibr" target="#b2">[3]</ref> describe an approach to detect code smells by using CK (Chidamber-Kemerer) and size-oriented metrics, whereas our approach uses a more solid model. They employ a genetic algorithm to find the best refactoring sequence that removes the most number of code smells. While their approach outputs the refactoring in a UML class diagram, our approach allows the software architect to perform the recommended refactorings automatically in the source code.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>VI. FINAL REMARKS</head><p>In this paper, we proposed a search-based approach, to recommend Move Method refactorings based on QMOOD quality attributes. We calibrated our approach by testing five different criteria on the JHotDraw system. The best calibration achieved a f-score of 38%, which corresponds to a precision of 27% and a recall of 65%. Finally, we evaluated our approach in three open-source systems by randomly moving ten methods each. On average, our approach could move 57% of the methods back to their original class. Future work includes: (i) fine-grained calibration strategies to increase the f-score; (ii) other evaluation metrics used for recommendation systems, such as likelihood, recall rate@k, and feedback; (iii) other types of refactorings, such as Extract Class and Extract Method; and (iv) work with normalized values of the QMOOD quality attributes.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Listing 1 : 7 }Fig. 1 :</head><label>171</label><figDesc>Fig. 1: Move Method applied to our Example</figDesc><graphic coords="2,359.09,131.21,147.39,84.43" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>5 currentMetrics := calculateMetrics() 6 for each method m in methods do 7 if</head><label>567</label><figDesc>m can be automatically refactored to a class C then 8 potRefactor := potRefactor + {m, C} metrics) &gt; fitness(currentMetrics) then 19 candidates := candidates + {ref, metrics} 20 end 21 end /* find the refactoring with the best metrics */ 22 bestRefactoring := maxMetrics(candidates) 23 applyRefactoring(bestRefactoring) 24 potRefactor := potRefactor -{bestRefactoring} 25 recommendations := recommendations + {bestRefactoring} 26 currentMetrics := bestRefactoring.metrics 27 end 28 end</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head>TABLE I :</head><label>I</label><figDesc>Design Metrics for Design Properties</figDesc><table><row><cell>Design Metric</cell><cell>Design Property</cell></row><row><cell>DSC (Design Size in Classes)</cell><cell>Size</cell></row><row><cell>NOH (Number of Hierarchies)</cell><cell>Hierarchies</cell></row><row><cell>ANA (Average Number of Ancestors)</cell><cell>Abstraction</cell></row><row><cell>DAM (Data Access Metrics)</cell><cell>Encapsulation</cell></row><row><cell>DCC (Direct Class Coupling)</cell><cell>Coupling</cell></row><row><cell>CAM (Cohesion Among Methods of Class)</cell><cell>Cohesion</cell></row><row><cell>MOA (Measure of Aggregation)</cell><cell>Composition</cell></row><row><cell>MFA (Measures of Functional Abstraction)</cell><cell>Inheritance</cell></row><row><cell>NOP (Number of Polymorphic Methods)</cell><cell>Polymorphism</cell></row><row><cell>CIS (Class Interface Size)</cell><cell>Messaging</cell></row><row><cell>NOM (Number of Methods)</cell><cell>Complexity</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_1"><head>TABLE II :</head><label>II</label><figDesc>Equations for Quality Attributes</figDesc><table><row><cell>Quality Attribute</cell><cell>Equation</cell></row><row><cell>Reusability</cell><cell>-0.25*Coupling +0.25*Cohesion +0.5*Messaging +0.5*Size</cell></row><row><cell>Flexibility</cell><cell>+0.25*Encapsulation -0.25*Coupling +0.5*Composition +0.5*Polymorphism</cell></row><row><cell></cell><cell>-0.33*Abstraction +0.33*Encapsulation -0.33*Coupling</cell></row><row><cell>Understandability</cell><cell>+0.33*Cohesion -0.33*Polymorphism -0.33*Complexity</cell></row><row><cell></cell><cell>-0.33*Size</cell></row><row><cell>Functionality</cell><cell>+0.12*Cohesion +0.22*Polymorphism +0.22*Messaging +0.22*Size +0.22*Hierarchies</cell></row><row><cell>Extendibility</cell><cell>+0.5*Abstraction -0.5*Coupling +0.5*Inheritance +0.5*Polymorphism</cell></row><row><cell>Effectiveness</cell><cell>+0.2*Abstraction +0.2*Encapsulation +0.2*Composition +0.2*Inheritance +0.2*Polymorphism</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_2"><head>TABLE III :</head><label>III</label><figDesc>Quality Attributes for our Example</figDesc><table><row><cell></cell><cell>S</cell><cell>S'</cell><cell>S' -S</cell></row><row><cell>Reusability</cell><cell>1.4375</cell><cell>1.5000</cell><cell>0.0625</cell></row><row><cell>Flexibility</cell><cell>-0.1250</cell><cell>-0.1250</cell><cell>0.0000</cell></row><row><cell>Understandability</cell><cell>0.2000</cell><cell>0.2000</cell><cell>0.0000</cell></row><row><cell>Functionality</cell><cell>0.2500</cell><cell>0.2500</cell><cell>0.0000</cell></row><row><cell>Extendibility</cell><cell>0.6900</cell><cell>0.7200</cell><cell>0.0300</cell></row><row><cell>Effectiveness</cell><cell>-1.4025</cell><cell>-1.3190</cell><cell>0.0835</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_3"><head>TABLE IV :</head><label>IV</label><figDesc>Calibration Results</figDesc><table><row><cell>#</cell><cell>Description</cell><cell cols="3">Total Recs. Recs. from Gold Set Precision</cell><cell>Recall</cell><cell>F-score</cell></row><row><cell cols="2">1 (i) no quality attribute decreases; (ii) improve at least one attribute</cell><cell>28</cell><cell>2</cell><cell>7.14%</cell><cell>10.00%</cell><cell>8.33%</cell></row><row><cell cols="2">2 Same as #1 but using five attributes, i.e., ignore the attribute effectiveness</cell><cell>37</cell><cell>5</cell><cell>13.51%</cell><cell>25.00%</cell><cell>17.54%</cell></row><row><cell cols="2">3 The sum of quality attributes &gt; the sum of the previous measured attributes</cell><cell>56</cell><cell>11</cell><cell>19.64%</cell><cell>55.00%</cell><cell>28.94%</cell></row><row><cell cols="2">4 Same as #1 but using only flexibility, understandability, and extensibility</cell><cell>48</cell><cell>13</cell><cell>27.08%</cell><cell>65.00%</cell><cell>38.23%</cell></row><row><cell cols="2">5 Cohesion, coupling, and messaging cannot decrease</cell><cell>45</cell><cell>5</cell><cell>11.11%</cell><cell>25.00%</cell><cell>15.38%</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_4"><head>TABLE V :</head><label>V</label><figDesc>Subject Systems</figDesc><table><row><cell>System</cell><cell cols="3">Version # of classes # of methods</cell><cell>LOC</cell></row><row><cell>FreeMind</cell><cell>0.9.0</cell><cell>658</cell><cell>4,885</cell><cell>52,757</cell></row><row><cell>Maven</cell><cell>3.0.5</cell><cell>647</cell><cell>4,888</cell><cell>65,685</cell></row><row><cell>WCT</cell><cell>1.5.2</cell><cell>539</cell><cell>5,130</cell><cell>48,191</cell></row></table></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_5"><head>TABLE VI :</head><label>VI</label><figDesc>Recall Results</figDesc><table><row><cell>System</cell><cell cols="2">Total Recs. Recs. from Gold Set</cell><cell>Recall</cell></row><row><cell>FreeMind</cell><cell>28</cell><cell>6</cell><cell>60%</cell></row><row><cell>Maven</cell><cell>15</cell><cell>6</cell><cell>60%</cell></row><row><cell>WCT Average</cell><cell>8 17</cell><cell>5 5.7</cell><cell>50% 57%</cell></row></table></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_0">https://github.com/rterrabh/QMove</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">A hierarchical model for object-oriented design quality assessment</title>
		<author>
			<persName><forename type="first">J</forename><surname>Bansiya</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">G</forename><surname>Davis</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Transactions on Software Engineering</title>
		<imprint>
			<biblScope unit="volume">28</biblScope>
			<biblScope unit="issue">1</biblScope>
			<biblScope unit="page" from="4" to="17" />
			<date type="published" when="2002">2002</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<monogr>
		<title level="m" type="main">Refactoring: improving the design of existing code</title>
		<author>
			<persName><forename type="first">Martin</forename><surname>Fowler</surname></persName>
		</author>
		<imprint>
			<date type="published" when="1999">1999</date>
			<publisher>Addison-Wesley</publisher>
			<pubPlace>Boston</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">TrueRefactor: An automated refactoring tool to improve legacy system and application comprehensibility</title>
		<author>
			<persName><forename type="first">I</forename><surname>Griffith</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Wahl</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Izurieta</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">24th International Conference on Computer Applications in Industry and Engineering (CAINE)</title>
				<imprint>
			<date type="published" when="2011">2011</date>
			<biblScope unit="page" from="316" to="321" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Refactoring: Current research and future trends</title>
		<author>
			<persName><forename type="first">Tom</forename><surname>Mens</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Serge</forename><surname>Demeyer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Bart</forename><forename type="middle">Du</forename><surname>Bois</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Hans</forename><surname>Stenten</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Pieter</forename><surname>Van Gorp</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Electronic Notes in Theoretical Computer Science</title>
		<imprint>
			<biblScope unit="volume">82</biblScope>
			<biblScope unit="issue">3</biblScope>
			<biblScope unit="page" from="483" to="499" />
			<date type="published" when="2003">2003</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">A survey of software refactoring</title>
		<author>
			<persName><forename type="first">Tom</forename><surname>Mens</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Tom</forename><surname>Tourwé</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Transactions on Software Engineering</title>
		<imprint>
			<biblScope unit="volume">30</biblScope>
			<biblScope unit="issue">2</biblScope>
			<biblScope unit="page" from="126" to="139" />
			<date type="published" when="2004">2004</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">On the use of many quality attributes for software refactoring: a many-objective search-based software engineering approach</title>
		<author>
			<persName><forename type="first">Mohamed</forename><forename type="middle">Wiem</forename><surname>Mkaouer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Marouane</forename><surname>Kessentini</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Slim</forename><surname>Bechikh</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Mel</forename><forename type="middle">Ó</forename><surname>Cinnéide</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Kalyanmoy</forename><surname>Deb</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Empirical Software Engineering</title>
		<imprint>
			<biblScope unit="volume">21</biblScope>
			<biblScope unit="issue">6</biblScope>
			<biblScope unit="page" from="2503" to="2545" />
			<date type="published" when="2016">2016</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Code-imp: A tool for automated search-based refactoring</title>
		<author>
			<persName><forename type="first">Iman</forename><surname>Hemati</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Moghadam</forename></persName>
		</author>
		<author>
			<persName><forename type="first">Mel</forename><forename type="middle">Ó</forename><surname>Cinnéide</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">4th Workshop on Refactoring Tools (WRT)</title>
				<imprint>
			<date type="published" when="2011">2011</date>
			<biblScope unit="page" from="41" to="44" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Using modularity metrics to assist Move Method refactoring of large systems</title>
		<author>
			<persName><forename type="first">C</forename><surname>Napoli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Pappalardo</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Tramontana</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">7th International Conference on Complex, Intelligent, and Software Intensive Systems (CISIS)</title>
				<imprint>
			<date type="published" when="2013">2013</date>
			<biblScope unit="page" from="529" to="534" />
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
