ABSTRACT
Refactoring consists of improving the internal structure of the code without changing the external behavior of a software system. However, the task of refactoring is very costly in the development of an information system. Thus, many tools have been proposed to support refactoring the source code. In order to find tools cited in the literature, this work presents a Systematic Literature Mapping about refactoring. As a result, this paper summarizes the refactoring tools that have been published in the last 5 years in terms of the tool profiles developed, which programming languages have support for refactoring and which are the main refactoring strategies that are handled by tools. It has been identified that publications on refactoring have remained constant over the past 5 years. Also, most of the refactoring works describe tools, being they for systems written in the Java language, that perform code refactoring automatically and the main refactorings are: Move Method, Pull Up Method, Extract Class and Code Clone. Finally, we performed an analysis of the data returned by the DBLP library. As a result, it was observed that the papers returned by the DBLP have a high level of similarity with the other research bases studied.
- Jehad Al Dallal. 2015. Identifying refactoring opportunities in object-oriented code: A systematic literature review. Information and Software Technology 58 (2015), 231--249.Google ScholarCross Ref
- Gabriele Bavota, Andrea De Lucia, Andrian Marcus, and Rocco Oliveto. 2014. Automating extract class refactoring: an improved method and its evaluation. Empirical Software Engineering (2014), 1617--1664. Google ScholarDigital Library
- O. Chaparro, G. Bavota, A. Marcus, and M. D. Penta. 2014. On the Impact of Refactoring Operations on Code Quality Metrics. In ICSME. 456--460. Google ScholarDigital Library
- Jehad Al Dallal. 2017. Predicting move method refactoring opportunities in object-oriented code. IST (2017), 105--120.Google Scholar
- Asger Feldthaus and Anders Moller. 2013. Semi-automatic Rename Refactoring for JavaScript. SIGPLAN (2013), 323--338. Google ScholarDigital Library
- W. Fenske, J. Meinicke, S. Schulze, S. Schulze, and G. Saake. 2017. Variant-preserving refactorings for migrating cloned products to a product line. In International Conference on Software Analysis, Evolution and Reengineering (SANER). 316--326.Google Scholar
- Martin Fowler and Kent Beck. 1999. Refactoring: improving the design of existing code. Addison-Wesley Professional. Google ScholarDigital Library
- Maria Anna G. Gaitani, Vassilis E. Zafeiris, N.A. Diamantidis, and E.A. Giakoumakis. 2015. Automated refactoring to the Null Object design pattern. IST (2015), 33--52. Google ScholarDigital Library
- Adnane Ghannem, Ghizlane El Boussaidi, and Marouane Kessentini. 2014. Model refactoring using examples: a search-based approach. JSEP (2014), 692--713. Google ScholarDigital Library
- Y. Gil and M. Orrù. 2017. The Spartanizer: Massive automatic refactoring. In SANER. 477--481.Google Scholar
- Milos Gligoric, Farnaz Behrang, Yilong Li, Jeffrey Overbey, Munawar Hafiz, and Darko Marinov. 2013. Systematic Testing of Refactoring Engines on Real Software Projects. In ECOOP. Google ScholarDigital Library
- Alex Gyori, Lyle Franklin, Danny Dig, and Jan Lahoda. 2013. Crossing the Gap from Imperative to Functional Programming Through Refactoring. In ESEC/FSE. 543--553. Google ScholarDigital Library
- Ah-Rim Han and Doo-Hwan Bae. 2013. Dynamic profiling-based approach to identifying cost-effective refactorings. IST (2013), 966--985. Google ScholarDigital Library
- Ah-Rim Han, Doo-Hwan Bae, and Sungdeok Cha. 2015. An efficient approach to identify multiple and independent Move Method refactoring candidates. IST (2015), 53--66. Google ScholarDigital Library
- H. C. Jiau, L. W. Mar, and J. C. Chen. 2013. OBEY: Optimal Batched Refactoring Plan Execution for Class Responsibility Redistribution. TSE (2013), 1245--1263. Google ScholarDigital Library
- Salim Kebir, Isabelle Borne, and Djamel Meslati. 2017. A genetic algorithm-based approach for automated refactoring of component-based software. IST (2017), 17--36. Google ScholarDigital Library
- R. Khatchadourian and H. Masuhara. 2017. Automated Refactoring of Legacy Java Software to Default Methods. In ICSE. 82--93. Google ScholarDigital Library
- Raffi Khatchadourian and Hidehiko Masuhara. 2017. Defaultification Refactoring: A Tool for Automatically Converting Java Methods to Default. In ASE. 984--989. Google ScholarDigital Library
- Djamel Eddine Khelladi, Reda Bendraou, and Marie-Pierre Gervais. 2016. AD-ROOM: A Tool for Automatic Detection of Refactorings in Object-oriented Models. In ICSE.Google Scholar
- J. Kim, D. Batory, and D. Dig. 2015. Scripting parametric refactorings in Java to retrofit design patterns. In ICSME. 211--220. Google ScholarDigital Library
- Jongwook Kim, Don Batory, Danny Dig, and Maider Azanza. 2016. Improving Refactoring Speed by 10X. In ICSE. 1145--1156. Google ScholarDigital Library
- Miryung Kim, Thomas Zimmermann, and Nachiappan Nagappan. 2012. A field study of refactoring challenges and benefits. In SIGSOFT. 50. Google ScholarDigital Library
- G. P. Krishnan and N. Tsantalis. 2013. Refactoring Clones: An Optimization Problem. In ICSME. 360--363. Google ScholarDigital Library
- J. Liebig, A. Janker, F. Garbe, S. Apel, and C. Lengauer. 2015. Morpheus: Variability-Aware Refactoring in the Wild. In ICSE. 380--391. Google ScholarDigital Library
- Y. Lin and D. Dig. 2015. Refactorings for Android Asynchronous Programming. In ASE. 836--841.Google Scholar
- Y. Lin, S. Okur, and D. Dig. 2015. Study and Refactoring of Android Asynchronous Programming (T). In ASE. 224--235.Google Scholar
- Yu Lin, Cosmin Radoi, and Danny Dig. 2014. Retrofitting Concurrency for Android Applications Through Refactoring. In SIGSOFT. 341--352. Google ScholarDigital Library
- H. Liu, Q. Liu, Y. Liu, and Z. Wang. 2015. Identifying Renaming Opportunities by Expanding Conducted Rename Refactorings. TOSEM (2015), 887--900.Google Scholar
- Usman Mansoor, Marouane Kessentini, Manuel Wimmer, and Kalyanmoy Deb. 2017. Multi-view refactoring of class and activity diagrams using a multi-objective evolutionary algorithm. SQJ (2017), 473--501. Google ScholarDigital Library
- Philip Mayer and Andreas Schroeder. 2013. Towards Automated Cross-language Refactorings Between Java and DSLs Used by Java Frameworks. In WRT. 5--8. Google ScholarDigital Library
- Philip Mayer and Andreas Schroeder. 2014. Automated Multi-Language Artifact Binding and Rename Refactoring between Java and DSLs Used by Java Frameworks. In ECOOP, Richard Jones (Ed.). 437--462. Google ScholarDigital Library
- Davood Mazinanian, Nikolaos Tsantalis, and Ali Mesbah. 2014. Discovering Refactoring Opportunities in Cascading Style Sheets. In SIGSOFT. 496--506. Google ScholarDigital Library
- Davood Mazinanian, Nikolaos Tsantalis, Raphael Stein, and Zackary Valenta. 2016. JDeodorant: Clone Refactoring. In ICSE. 613--616. Google ScholarDigital Library
- Ş. Medeleanu and P. F. Mihancea. 2016. NullTerminator: Pseudo-Automatic Refactoring to Null Object Design Pattern. In ICSME. 601--603.Google Scholar
- Mohamed Wiem Mkaouer, Marouane Kessentini, Mel Ó Cinnéide, Shinpei Hayashi, and Kalyanmoy Deb. 2017. A robust multi-objective approach to balance severity and importance of refactoring opportunities. ESE (2017), 894--927. Google ScholarDigital Library
- M. Mondal, C. K. Roy, and K. A. Schneider. 2014. Automatic Identification of Important Clones for Refactoring and Tracking. In SCAM. 11--20. Google ScholarDigital Library
- R. Morales, A. Sabane, P. Musavi, F. Khomh, F. Chicano, and G. Antoniol. 2016. Finding the Best Compromise Between Design Quality and Testing Effort During Refactoring. In SANER. 24--35.Google Scholar
- H. A. Nguyen, H. V. Nguyen, T. T. Nguyen, and T. N. Nguyen. 2013. Output-Oriented Refactoring in PHP-Based Dynamic Web Applications. In ICSME. 150--159. Google ScholarDigital Library
- Ali Ouni, Marouane Kessentini, Houari Sahraoui, Katsuro Inoue, and Kalyanmoy Deb. 2016. Multi-Criteria Code Refactoring Using Search-Based Software Engineering: An Industrial Case Study. TOSEM (2016), 23:1--23:53. Google ScholarDigital Library
- Ali Ouni, Marouane Kessentini, Mel Ó Cinnéide, Houari Sahraoui, Kalyanmoy Deb, and Katsuro Inoue. 2017. MORE: A multi-objective refactoring recommendation approach to introducing design patterns and fixing code smells. JSEP (2017), 1843--1863.Google ScholarCross Ref
- Mati Shomrat and Yishai A. Feldman. {n. d.}. Detecting Refactored Clones. In ECOOP, Giuseppe Castagna (Ed.). 502--526. Google ScholarDigital Library
- Danilo Silva, Ricardo Terra, and Marco Tulio Valente. 2014. Recommending Automated Extract Method Refactorings. In ICPC. 146--156. Google ScholarDigital Library
- Danilo Silva, Nikolaos Tsantalis, and Marco Tulio Valente. 2016. Why we refactor? confessions of github contributors. In SIGSOFT. ACM, 858--870. Google ScholarDigital Library
- D. Silva and M. T. Valente. 2017. RefDiff: Detecting Refactorings in Version Histories. In MSR. 269--279. Google ScholarDigital Library
- B. Tao and J. Qian. 2014. Refactoring Java Concurrent Programs Based on Synchronization Requirement Analysis. In ICSME. 361--370. Google ScholarDigital Library
- N. Ujihara, A. Ouni, T. Ishio, and K. Inoue. 2017. c-JRefRec: Change-based identification of Move Method refactoring opportunities. In SANER. 482--486.Google Scholar
- J. von Pilgrim, B. Ulke, A. Thies, and F. Steimann. 2013. Model/code co-refactoring: An MDE approach. In ASE. 682--687. Google ScholarDigital Library
- W. Wang and M. W. Godfrey. 2014. Recommending Clones for Refactoring Using Design, Context, and History. In ICSME. 331--340. Google ScholarDigital Library
- Claes Wohlin. 2014. Guidelines for snowballing in systematic literature studies and a replication in software engineering. In Proceedings of the 18th international conference on evaluation and assessment in software engineering. ACM, 38. Google ScholarDigital Library
- Claes Wohlin, Per Runeson, Martin Höst, Magnus C Ohlsson, Björn Regnell, and Anders Wesslén. 2012. Experimentation in software engineering. Springer Science & Business Media. Google ScholarCross Ref
- Zhenchang Xing and Eleni Stroulia. 2006. Refactoring practice: How it is and how it should be supported-an eclipse case study. In ICSME. 458--468. Google ScholarDigital Library
- Jifeng Xuan, Benoit Cornu, Matias Martinez, Benoit Baudry, Lionel Seinturier, and Martin Monperrus. 2016. B-Refactoring: Automatic test code refactoring to improve dynamic analysis. IST (2016), 65--80. Google ScholarDigital Library
- J. Yang, K. Hotta, Y. Higo, and S. Kusumoto. 2015. Towards purity-guided refactoring in Java. In ICSME. 521--525. Google ScholarDigital Library
- Vassilis E. Zafeiris, Sotiris H. Poulias, N.A. Diamantidis, and E.A. Giakoumakis. 2017. Automated refactoring of super-class method invocations to the Template Method design pattern. IST (2017), 19--35.Google Scholar
Recommendations
Refactoring Tools: Fitness for Purpose
Refactoring tools can improve the speed and accuracy with which developers create and maintain software—but only if they are used. In practice, tools are not used as much as they could be; this seems to be because sometimes they do not align with the ...
Improving Usability of Software Refactoring Tools
ASWEC '07: Proceedings of the 2007 Australian Software Engineering ConferencePost-deployment maintenance and evolution can account for up to 75% of the cost of developing a software system. Software refactoring can reduce the costs associated with evolution by improving system quality. Although refactoring can yield benefits, ...
Interaction awareness for aspect refactoring
AOAsia '13: Proceedings of the 8th international workshop on Advanced modularization techniquesAspect Refactoring includes two phases: aspect mining and aspect extraction. Aspect mining is used to identify crosscutting concerns from the OO program. Aspect extraction extracts the identified crosscutting concerns from the OO program and refactors ...
Comments