A survey of software refactoring

We provide an extensive overview of existing research in the field of software refactoring. This research is compared and discussed based on a number of different criteria: the refactoring activities that are supported, the specific techniques and formalisms that are used for supporting these activities, the types of software artifacts that are being refactored, the important issues that need to be taken into account when building refactoring tool support, and the effect of refactoring on the software process. A running example is used to explain and illustrate the main concepts.

[1]  Alejandra Garrido,et al.  Challenges of refactoring C programs , 2002, IWPSE '02.

[2]  Paulo Borba Refactoring and Code Generation Tools for AspectJ , 2002 .

[3]  Oscar Nierstrasz,et al.  A meta-model for language-independent refactoring , 2000, Proceedings International Symposium on Principles of Software Evolution.

[4]  Thorsten Sturm,et al.  Refactoring Browser for UML , 2002, NetObjectDays.

[5]  Jan Wloka,et al.  Tool-Supported Discovery and Refactoring of Structural Weaknesses in Code , 2002 .

[6]  E. B. Swanson,et al.  Software maintenance management , 1980 .

[7]  Oscar Nierstrasz,et al.  Object-oriented reengineering patterns , 2004, Proceedings. 26th International Conference on Software Engineering.

[8]  Stéphane Ducasse,et al.  A language independent approach for detecting duplicated code , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[9]  Ralf Lämmel,et al.  Towards generic refactoring , 2002, RULE '02.

[10]  Paul L. Bergstein,et al.  Object-preserving class transformations , 1991, OOPSLA '91.

[11]  Bennet P. Lientz,et al.  Software Maintenance Management: A Study of the Maintenance of Computer Application Software in 487 Data Processing Organizations , 1980 .

[12]  Mary Jean Harrold,et al.  Slicing object-oriented software , 1996, Proceedings of IEEE 18th International Conference on Software Engineering.

[13]  Arie van Deursen,et al.  Identifying objects using cluster and concept analysis , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[14]  Robert L. Glass Maintenance: Less Is Not More , 1998, IEEE Softw..

[15]  F. Bravo,et al.  The Frechet Contingency Array Problem is Max-Plus Linear , 2009, 0904.2244.

[16]  Marian Vittek Refactoring browser with preprocessor , 2003, Seventh European Conference onSoftware Maintenance and Reengineering, 2003. Proceedings..

[17]  Chris Dollin,et al.  Object-oriented development: the fusion method , 1994 .

[18]  Walter Zimmer,et al.  On the computer aided introduction of design patterns into object-oriented systems , 1998, Proceedings Technology of Object-Oriented Languages. TOOLS 27 (Cat. No.98EX224).

[19]  Jean-Marc Jézéquel,et al.  Refactoring UML Models , 2001, UML.

[20]  Tom Mens,et al.  A formal foundation for object-oriented software evolution , 2001, Proceedings IEEE International Conference on Software Maintenance. ICSM 2001.

[21]  Arie van Deursen,et al.  Refactoring test code , 2001 .

[22]  James M. Boyle,et al.  Using knowledge-based transformations to reverse-engineer COBOL programs , 1996, Proceedings of the 11th Knowledge-Based Software Engineering Conference.

[23]  Jens Uwe Pipka Refactoring in a "Test First"-World , 2002 .

[24]  Nobuki Tokura,et al.  A reorganization framework of the object-oriented class hierarchy , 1995, Proceedings 1995 Asia Pacific Software Engineering Conference.

[25]  Takeo Imai,et al.  A quantitative evaluation of maintainability enhancement by refactoring , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[26]  Huiqing Li,et al.  Tool support for refactoring functional programs , 2003, Haskell '03.

[27]  Don Batory,et al.  Automated Software Evolution via Design Pattern Transformations , 1995 .

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

[29]  Václav Rajlich,et al.  Reengineering object-oriented code , 1998, Proceedings. International Conference on Software Maintenance (Cat. No. 98CB36272).

[30]  John C. Grundy,et al.  Inconsistency Management for Multiple-View Software Development Environments , 1998, IEEE Trans. Software Eng..

[31]  Hartmut Ehrig,et al.  Concurrent semantics of algebraic graph transformations , 1999 .

[32]  Claus Lewerentz,et al.  Metrics Based Refactoring , 2001, CSMR.

[33]  Reiko Heckel,et al.  Confluence of Typed Attributed Graph Transformation Systems , 2002, ICGT.

[34]  Tom Mens,et al.  A declarative evolution framework for object-oriented design patterns , 2001, Proceedings IEEE International Conference on Software Maintenance. ICSM 2001.

[35]  Arun Lakhotia,et al.  Restructuring programs by tucking statements into functions , 1998, Inf. Softw. Technol..

[36]  Oscar Nierstrasz,et al.  Finding refactorings via change metrics , 2000, OOPSLA '00.

[37]  Reiko Heckel,et al.  Graph Grammars with Negative Application Conditions , 1996, Fundam. Informaticae.

[38]  Tom Mens,et al.  Identifying refactoring opportunities using logic meta programming , 2003, Seventh European Conference onSoftware Maintenance and Reengineering, 2003. Proceedings..

[39]  Deepak Gupta,et al.  A Formal Framework for On-line Software Version Change , 1996, IEEE Trans. Software Eng..

[40]  David W. Binkley,et al.  Program slicing , 2008, 2008 Frontiers of Software Maintenance.

[41]  Keith H. Bennett,et al.  Formal Methods to Aid the Evolution of Software , 1995, Int. J. Softw. Eng. Knowl. Eng..

[42]  Wolfgang De Meuter,et al.  Optimizing Object-Oriented Languages Through Architechtural Transformations , 1999, CC.

[43]  Kent L. Beck,et al.  Extreme programming explained - embrace change , 1990 .

[44]  Leon Moonen,et al.  Java quality assurance by detecting code smells , 2002, Ninth Working Conference on Reverse Engineering, 2002. Proceedings..

[45]  Giancarlo Succi,et al.  Extreme Programming Perspectives , 2002 .

[46]  Serge Demeyer,et al.  Maintainability versus Performance: What's the Effect of Introducing Polymorphism ? , 2003 .

[47]  Don Roberts,et al.  Practical analysis for refactoring , 1999 .

[48]  Tadashi Kanamori,et al.  Preservation of Stronger Equivalence in Unfold/Fold Logic Program Transformation , 1990, Theor. Comput. Sci..

[49]  Patrick Nixon,et al.  Composite Refactorings for Java Programs , 2000 .

[50]  Susan Horwitz,et al.  Semantics-preserving procedure extraction , 2000, POPL '00.

[51]  William G. Griswold,et al.  Automated support for program refactoring using invariants , 2001, Proceedings IEEE International Conference on Software Maintenance. ICSM 2001.

[52]  Arie van Deursen,et al.  The Video Store Revisited – Thoughts on Refactoring and Testing , 2002 .

[53]  Alberto Pettorossi,et al.  Semantics preserving transformation rules for Prolog , 1991, PEPM '91.

[54]  Stéphane Ducasse,et al.  Understanding software evolution using a combination of software visualization and software metrics , 2002, Obj. Logiciel Base données Réseaux.

[55]  Paul L. Bergstein Maintenance of object-oriented systems during structural evolution , 1997 .

[56]  Ivan Moore,et al.  Automatic inheritance hierarchy restructuring and method refactoring , 1996, OOPSLA '96.

[57]  Bashar Nuseibeh,et al.  Restructuring requirements specifications for managing inconsistency and change: a case study , 1998, Proceedings of IEEE International Symposium on Requirements Engineering: RE '98.

[58]  J. Chris Miller,et al.  Implications of automated restructuring of COBOL , 1987, SIGP.

[59]  Hisao Tamaki,et al.  Unfold/Fold Transformation of Logic Programs , 1984, ICLP.

[60]  Ralf Lämmel Reuse by Program Transformation , 1999, Scottish Functional Programming Workshop.

[61]  Bernhard Ganter,et al.  Formal Concept Analysis: Mathematical Foundations , 1998 .

[62]  Magdalena Balazinska,et al.  Advanced clone-analysis to support object-oriented system refactoring , 2000, Proceedings Seventh Working Conference on Reverse Engineering.

[63]  William G. Griswold,et al.  Automated assistance for program restructuring , 1993, TSEM.

[64]  Mel Ó Cinnéide,et al.  A methodology for the automated introduction of design patterns , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[65]  William G. Griswold,et al.  Tool support for planning the restructuring of data abstractions in large systems , 1996, SIGSOFT '96.

[66]  Václav Rajlich,et al.  Restructuring legacy C code into C++ , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[67]  Ladan Tahvildari,et al.  A metric-based approach to enhance design quality through meta-pattern transformations , 2003, Seventh European Conference onSoftware Maintenance and Reengineering, 2003. Proceedings..

[68]  Eduardo Casais The Automatic Reorganization of Object Oriented Hierarchies - A Case Study , 1994 .

[69]  Leon Sterling,et al.  A Notion of Map between Logic Programs , 1990, ICLP.

[70]  William L. Scherlis Systematic Change of Data Representation: Program Manipulations and a Case Study , 1998, ESOP.

[71]  Ralph E. Johnson,et al.  A Refactoring Tool for Smalltalk , 1997, Theory Pract. Object Syst..

[72]  Tom Mens,et al.  Using Description Logic to Maintain Consistency between UML Models , 2003, UML.

[73]  Tom Mens,et al.  Towards Automating Source-Consistent UML Refactorings , 2003, UML.

[74]  Frank Tip,et al.  Refactoring for generalization using type constraints , 2003, OOPSLA '03.

[75]  Ladan Tahvildari,et al.  A methodology for developing transformations using the maintainability soft-goal graph , 2002, Ninth Working Conference on Reverse Engineering, 2002. Proceedings..

[76]  A.M. Leitdo,et al.  A formal pattern language for refactoring of Lisp programs , 2002, Proceedings of the Sixth European Conference on Software Maintenance and Reengineering.

[77]  Robert S. Arnold Tutorial on software restructuring , 1986 .

[78]  Tom Mens,et al.  Formalising Behaviour Preserving Program Transformations , 2002, ICGT.

[79]  Jay Banerjee,et al.  Semantics and implementation of schema evolution in object-oriented databases , 1987, SIGMOD '87.

[80]  Dirk Janssens,et al.  A Hierarchical Program Representation for Refactoring , 2003, Electron. Notes Theor. Comput. Sci..

[81]  Tor Guimaraes,et al.  Managing application program maintenance expenditures , 1983, CACM.

[82]  Paolo Tonella,et al.  Concept Analysis for Module Restructuring , 2001, IEEE Trans. Software Eng..

[83]  Giuseppe Visaggio,et al.  Extracting Reusable Funtions by Flow Graph-Based Program Slicing , 1997, IEEE Trans. Software Eng..

[84]  Frank Tip,et al.  Reengineering class hierarchies using concept analysis , 1998, SIGSOFT '98/FSE-6.

[85]  Paul W. Oman,et al.  Using metrics to evaluate software system maintainability , 1994, Computer.

[86]  Niklaus Wirth,et al.  Program development by stepwise refinement , 1971, CACM.

[87]  Bernhard Rumpe,et al.  Refinement of information flow architectures , 1997, First IEEE International Conference on Formal Engineering Methods.

[88]  Neil D. Jones,et al.  Stepwise Development of Operational and Denotational Semantics for Prolog , 1984, International Conference on Spoken Language Processing.

[89]  B. Rumpe,et al.  Roots of Refactoring , 2001 .

[90]  Alberto Pettorossi,et al.  Rules and strategies for transforming functional and logic programs , 1996, CSUR.

[91]  Bashar Nuseibeh,et al.  Leveraging Inconsistency in Software Development , 2000, Computer.

[92]  P. Jeremaes,et al.  Fusion: a second generation object-oriented analysis and design method , 1993 .

[93]  Frank W. Calliss Problems with automatic restructurers , 1988, SIGP.

[94]  Don S. Batory,et al.  Evolving Object-Oriented Designs with Refactorings , 2004, Automated Software Engineering.

[95]  Linda M. Seiter,et al.  Automating the Evolution of Object-Oriented Systems , 1996, ISOTAS.

[96]  R. A. Lakshmi-Ratan,et al.  The Lucent Technologies Softswitch — Realizing the promise of convergence , 1999, Bell Labs Technical Journal.

[97]  James H. Cross,et al.  Reverse engineering and design recovery: a taxonomy , 1990, IEEE Software.

[98]  George Loizou,et al.  The role of constructors in the context of refactoring object-oriented systems , 2003, Seventh European Conference onSoftware Maintenance and Reengineering, 2003. Proceedings..

[99]  Farhad Arbab,et al.  Restructuring sequential Fortran code into a parallel/distributed application , 1996, 1996 Proceedings of International Conference on Software Maintenance.

[100]  Václav Rajlich,et al.  A model for change propagation based on graph rewriting , 1997, 1997 Proceedings International Conference on Software Maintenance.

[101]  Antonio Paulo Teles de Menezes Correia Leitao,et al.  A Formal Pattern Language for Refactoring of Lisp Programs , 2002, CSMR.

[102]  Andrea Zisman,et al.  Inconsistency Management in Software Engineering: Survey and Open Research Issues , 2000 .

[103]  Albert Zündorf,et al.  Rewriting poor Design Patterns by good Design Patterns , 1997 .

[104]  Dennis Gannon,et al.  Sage++: An Object-Oriented Toolkit and Class Library for Building Fortran and C++ Restructuring Tool , 1994 .

[105]  David Sands,et al.  Total correctness by local improvement in the transformation of functional programs , 1996, TOPL.

[106]  Keith H. Bennett,et al.  Maintenance and abstraction of program data using formal transformations , 1996, 1996 Proceedings of International Conference on Software Maintenance.

[107]  Martin Fowler,et al.  Refactoring - Improving the Design of Existing Code , 1999, Addison Wesley object technology series.

[108]  Gabriele Taentzer,et al.  Coordinated Distributed Diagram Transformation for Software Evolution , 2003, Software Evolution Through Transformations @ ICGT.