Ten years of JDeodorant: Lessons learned from the hunt for smells

Deodorants are different from perfumes, because they are applied directly on body and by killing bacteria they reduce odours and offer a refreshing fragrance. That was our goal when we first thought about "bad smells" in code: to develop techniques for effectively identifying and removing (i.e., deodorizing) code smells from object-oriented software. JDeodorant encompasses a number of techniques for suggesting and automatically applying refactoring opportunities on Java source code, in a way that requires limited effort on behalf of the developer. In contrast to other approaches that rely on generic strategies that can be adapted to various smells, JDeodorant adopts ad-hoc strategies for each smell considering the particular characteristics of the underlying design or code problem. In this retrospective paper, we discuss the impact of JDeodorant over the last ten years and a number of tools and techniques that have been developed for a similar purpose which either compare their results with JDeodorant or have built on top of JDeodorant. Finally, we discuss the empirical findings from a number of studies that employed JDeodorant to extract their datasets.

[1]  Sooyong Park,et al.  Decomposing class responsibilities using distance-based method similarity , 2015, Frontiers of Computer Science.

[2]  N. A. Diamantidis,et al.  Automated refactoring to the Null Object design pattern , 2015, Inf. Softw. Technol..

[3]  Gabriele Bavota,et al.  Identifying Extract Class refactoring opportunities using structural and semantic cohesion measures , 2011, J. Syst. Softw..

[4]  Katsuro Inoue,et al.  c-JRefRec: Change-based identification of Move Method refactoring opportunities , 2017, 2017 IEEE 24th International Conference on Software Analysis, Evolution and Reengineering (SANER).

[5]  Ricardo Terra,et al.  JMove: A novel heuristic and tool to detect move method refactoring opportunities , 2018, J. Syst. Softw..

[6]  Jose Pereira dos Reis,et al.  Code Smells Incidence: Does It Depend on the Application Domain? , 2016, 2016 10th International Conference on the Quality of Information and Communications Technology (QUATIC).

[7]  Gabriele Bavota,et al.  Automating extract class refactoring: an improved method and its evaluation , 2013, Empirical Software Engineering.

[8]  Mauricio A. Saca Refactoring improving the design of existing code , 2017, 2017 IEEE 37th Central America and Panama Convention (CONCAPAN XXXVII).

[9]  Ricardo Terra,et al.  Recommending Move Method refactorings using dependency sets , 2013, 2013 20th Working Conference on Reverse Engineering (WCRE).

[10]  Apostolos Ampatzoglou,et al.  Size and cohesion metrics as indicators of the long method bad smell: An empirical study , 2015, PROMISE.

[11]  Eleni Stroulia,et al.  Identification and application of Extract Class refactorings in object-oriented systems , 2012, J. Syst. Softw..

[12]  Alexander Chatzigeorgiou,et al.  Identification of extract method refactoring opportunities for the decomposition of methods , 2011, J. Syst. Softw..

[13]  Keith Cassell,et al.  Using Clustering Techniques to Guide Refactoring of Object-Oriented Classes , 2012 .

[14]  Gabriele Bavota,et al.  In medio stat virtus: Extract class refactoring through nash equilibria , 2014, 2014 Software Evolution Week - IEEE Conference on Software Maintenance, Reengineering, and Reverse Engineering (CSMR-WCRE).

[15]  Naoyasu Ubayashi,et al.  Using Analytics to Quantify Interest of Self-Admitted Technical Debt , 2016, QuASoQ/TDA@APSEC.

[16]  Gabriele Bavota,et al.  Mining Version Histories for Detecting Code Smells , 2015, IEEE Transactions on Software Engineering.

[17]  Gabriele Bavota,et al.  A two-step technique for extract class refactoring , 2010, ASE.

[18]  Chao Li,et al.  Domino Effect: Move More Methods Once a Method is Moved , 2016, 2016 IEEE 23rd International Conference on Software Analysis, Evolution, and Reengineering (SANER).

[19]  Nan Niu,et al.  Supporting requirements to code traceability through refactoring , 2013, Requirements Engineering.

[20]  Kim Mens,et al.  Analyzing Code Evolution to Uncover Relations between Bad Smells , 2015 .

[21]  Alexander Chatzigeorgiou,et al.  JDeodorant: Identification and Removal of Type-Checking Bad Smells , 2008, 2008 12th European Conference on Software Maintenance and Reengineering.

[22]  Francesca Arcelli Fontana,et al.  Impact of refactoring on quality code evaluation , 2011, WRT '11.

[23]  Marco Tulio Valente,et al.  Why we refactor? confessions of GitHub contributors , 2016, SIGSOFT FSE.

[24]  Emad Shihab,et al.  Detecting and quantifying different types of self-admitted technical Debt , 2015, 2015 IEEE 7th International Workshop on Managing Technical Debt (MTD).

[25]  Gabriele Bavota,et al.  Supporting extract class refactoring in Eclipse: The ARIES project , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[26]  Alexander Chatzigeorgiou,et al.  Ranking Refactoring Suggestions Based on Historical Volatility , 2011, 2011 15th European Conference on Software Maintenance and Reengineering.

[27]  Alejandro Zunino,et al.  Using bad smell-driven code refactorings in mobile applications to reduce battery usage , 2015 .

[28]  Alexander Chatzigeorgiou,et al.  JDeodorant: Identification and Removal of Feature Envy Bad Smells , 2007, ICSM.

[29]  Emmanouel A. Giakoumakis,et al.  Automated refactoring to the Strategy design pattern , 2012, Inf. Softw. Technol..

[30]  Alexander Chatzigeorgiou,et al.  Identification of Move Method Refactoring Opportunities , 2009, IEEE Transactions on Software Engineering.

[31]  D. Verloop,et al.  Code Smells in the Mobile Applications Domain , 2013 .

[32]  Gabriele Bavota,et al.  Recommending Refactoring Operations in Large Software Systems , 2014, Recommendation Systems in Software Engineering.

[33]  N. A. Diamantidis,et al.  Automated refactoring of super-class method invocations to the Template Method design pattern , 2017, Inf. Softw. Technol..

[34]  Davood Mazinanian,et al.  Clone Refactoring with Lambda Expressions , 2017, 2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE).

[35]  Ricardo Terra,et al.  Recommending automated extract method refactorings , 2014, ICPC 2014.

[36]  Paramvir Singh,et al.  An Empirical Investigation into Code Smell Elimination Sequences for Energy Efficient Software , 2016, 2016 23rd Asia-Pacific Software Engineering Conference (APSEC).

[37]  Gabriele Bavota,et al.  Methodbook: Recommending Move Method Refactorings via Relational Topic Models , 2014, IEEE Transactions on Software Engineering.

[38]  Andrea De Lucia,et al.  A textual-based technique for Smell Detection , 2016, 2016 IEEE 24th International Conference on Program Comprehension (ICPC).

[39]  Eleni Stroulia,et al.  JDeodorant: identification and application of extract class refactorings , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[40]  Ralph Johnson,et al.  design patterns elements of reusable object oriented software , 2019 .

[41]  Davood Mazinanian,et al.  Assessing the Refactorability of Software Clones , 2015, IEEE Transactions on Software Engineering.

[42]  Yuanfang Cai,et al.  Interactive and guided architectural refactoring with search-based recommendation , 2016, SIGSOFT FSE.

[43]  Tom Mens,et al.  A survey of software refactoring , 2004, IEEE Transactions on Software Engineering.

[44]  Jehad Al Dallal Identifying refactoring opportunities in object-oriented code: A systematic literature review , 2015, Inf. Softw. Technol..

[45]  Jörg Sander,et al.  Decomposing object-oriented class modules using an agglomerative clustering technique , 2009, 2009 IEEE International Conference on Software Maintenance.

[46]  Gabriele Bavota,et al.  Detecting bad smells in source code using change history information , 2013, 2013 28th IEEE/ACM International Conference on Automated Software Engineering (ASE).

[47]  Alexander Chatzigeorgiou,et al.  Identification of Refused Bequest Code Smells , 2013, 2013 IEEE International Conference on Software Maintenance.

[48]  Arvinder Kaur,et al.  Predicting software change-proneness with code smells and class imbalance learning , 2016, 2016 International Conference on Advances in Computing, Communications and Informatics (ICACCI).

[49]  Gabriele Bavota,et al.  How Can I Use This Method? , 2015, 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering.

[50]  Alexander Chatzigeorgiou,et al.  Identification of refactoring opportunities introducing polymorphism , 2010, J. Syst. Softw..

[51]  Jing Xu,et al.  GEMS: An Extract Method Refactoring Recommender , 2017, 2017 IEEE 28th International Symposium on Software Reliability Engineering (ISSRE).

[52]  Alexander Chatzigeorgiou,et al.  Identification of Extract Method Refactoring Opportunities , 2009, 2009 13th European Conference on Software Maintenance and Reengineering.

[53]  Andrea De Lucia,et al.  [Journal First] The Scent of a Smell: An Extensive Comparison Between Textual and Structural Smells , 2018, 2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE).

[54]  Nikolaos Tsantalis,et al.  Unification and refactoring of clones , 2014, 2014 Software Evolution Week - IEEE Conference on Software Maintenance, Reengineering, and Reverse Engineering (CSMR-WCRE).

[55]  Yang Liu,et al.  Dynamic and Automatic Feedback-Based Threshold Adaptation for Code Smell Detection , 2016, IEEE Transactions on Software Engineering.

[56]  Anas Abdin,et al.  Empirical Evaluation of the Impact of Object-Oriented Code Refactoring on Quality Attributes: A Systematic Literature Review , 2018, IEEE Transactions on Software Engineering.

[57]  Apostolos Ampatzoglou,et al.  Identifying Extract Method Refactoring Opportunities Based on Functional Relevance , 2017, IEEE Transactions on Software Engineering.