Maintenance tends to degrade the structure of software, ultimately making maintenance more costly. At times, then, it is worthwhile to manipulate the structure of a system to make changes easier. However, it is shown that manual restructuring is an error-prone and expensive activity. By separating structural manipulations from other maintenance activities, the semantics of a system can be held constant by a tool, assuring that no errors are introduced by restructuring. To allow the maintenance team to focus on the aspects of restructuring and maintenance requiring human judgment, a transformation-based tool can be provided--based on a model that exploits preserving data flow-dependence and control flow-dependence--to automate the repetitive, error-prone, and computationally demanding aspects of restructuring. A set of automatable transformations is introduced; their impact on structure is described, and their usefulness is demonstrated in examples. A model to aid building meaning-preserving restructuring transformations is described, and its realization in a functioning prototype tool for restructuring Scheme programs is discussed.
Cited By
- Altoyan N and Batory D (2022). On Proving the Correctness of Refactoring Class Diagrams of MDE Metamodels, ACM Transactions on Software Engineering and Methodology, 32:2, (1-42), Online publication date: 30-Apr-2023.
- Lau J, Sivaraman A, Zhang Q, Gulzar M, Cong J and Kim M HeteroRefactor Proceedings of the ACM/IEEE 42nd International Conference on Software Engineering, (493-505)
- Akiki P (2019). To var or not to var: how do C# developers use and misuse implicit and explicit typing?, Software Quality Journal, 27:3, (1175-1207), Online publication date: 1-Sep-2019.
- Kim J, Batory D and Gligoric M Code transformation issues in move-instance-method refactorings Proceedings of the 3rd International Workshop on Refactoring, (17-22)
- Tsantalis N, Mansouri M, Eshkevari L, Mazinanian D and Dig D Accurate and efficient refactoring detection in commit history Proceedings of the 40th International Conference on Software Engineering, (483-494)
- Hempel B, Lubin J, Lu G and Chugh R Deuce Proceedings of the 40th International Conference on Software Engineering, (654-664)
- Steimann F (2018). Constraint-Based Refactoring, ACM Transactions on Programming Languages and Systems, 40:1, (1-40), Online publication date: 31-Mar-2018.
- Kim J, Batory D and Dig D Refactoring Java Software Product Lines Proceedings of the 21st International Systems and Software Product Line Conference - Volume A, (59-68)
- Lúcio L, Amrani M, Dingel J, Lambers L, Salay R, Selim G, Syriani E and Wimmer M (2016). Model transformation intents and their properties, Software and Systems Modeling (SoSyM), 15:3, (647-684), Online publication date: 1-Jul-2016.
- Kim J, Batory D, Dig D and Azanza M Improving refactoring speed by 10X Proceedings of the 38th International Conference on Software Engineering, (1145-1156)
- Reia R and Menezes Leitão A Refactoring Dynamic Languages Proceedings of the 9th European Lisp Symposium on European Lisp Symposium, (5-12)
- Schuster C, Disney T and Flanagan C Macrofication Proceedings of the 25th European Symposium on Programming Languages and Systems - Volume 9632, (644-671)
- Okur S Understanding, refactoring, and fixing concurrency in C# Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering, (898-901)
- Lin Y, Okur S and Dig D Study and refactoring of Android asynchronous programming Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering, (224-235)
- Milea N, Jiang L and Khoo S Vector abstraction and concretization for scalable detection of refactorings Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering, (86-97)
- Overbey J, Behrang F and Hafiz M A foundation for refactoring C with macros Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering, (75-85)
- Milea N, Jiang L and Khoo S Scalable detection of missed cross-function refactorings Proceedings of the 2014 International Symposium on Software Testing and Analysis, (138-148)
- Vakilian M and Johnson R Alternate refactoring paths reveal usability problems Proceedings of the 36th International Conference on Software Engineering, (1106-1116)
- Fenske W, Thüm T and Saake G A taxonomy of software product line reengineering Proceedings of the 8th International Workshop on Variability Modelling of Software-Intensive Systems, (1-8)
- Raychev V, Schäfer M, Sridharan M and Vechev M (2013). Refactoring with synthesis, ACM SIGPLAN Notices, 48:10, (339-354), Online publication date: 12-Nov-2013.
- Raychev V, Schäfer M, Sridharan M and Vechev M Refactoring with synthesis Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications, (339-354)
- Vakilian M, Chen N, Zilouchian Moghaddam R, Negara S and Johnson R A compositional paradigm of automating refactorings Proceedings of the 27th European conference on Object-Oriented Programming, (527-551)
- Radpour S, Hendren L and Schäfer M Refactoring MATLAB Proceedings of the 22nd international conference on Compiler Construction, (224-243)
- Kim M, Zimmermann T and Nagappan N A field study of refactoring challenges and benefits Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering, (1-11)
- Amrani M, Dingel J, Lambers L, Lúcio L, Salay R, Selim G, Syriani E and Wimmer M Towards a model transformation intent catalog Proceedings of the First Workshop on the Analysis of Model Transformations, (3-8)
- Steimann F and von Pilgrim J Constraint-Based refactoring with foresight Proceedings of the 26th European conference on Object-Oriented Programming, (535-559)
- Foster S, Griswold W and Lerner S WitchDoctor: IDE support for real-time auto-completion of refactorings Proceedings of the 34th International Conference on Software Engineering, (222-232)
- Feldthaus A, Millstein T, Møller A, Schäfer M and Tip F Tool-supported refactoring for JavaScript Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications, (119-138)
- Feldthaus A, Millstein T, Møller A, Schäfer M and Tip F (2011). Tool-supported refactoring for JavaScript, ACM SIGPLAN Notices, 46:10, (119-138), Online publication date: 18-Oct-2011.
- Steimann F Constraint-based model refactoring Proceedings of the 14th international conference on Model driven engineering languages and systems, (440-454)
- Steimann F, Kollee C and von Pilgrim J A refactoring constraint language and its application to eiffel Proceedings of the 25th European conference on Object-oriented programming, (255-280)
- Meng N, Kim M and McKinley K Systematic editing Proceedings of the 32nd ACM SIGPLAN Conference on Programming Language Design and Implementation, (329-342)
- Meng N, Kim M and McKinley K (2011). Systematic editing, ACM SIGPLAN Notices, 46:6, (329-342), Online publication date: 4-Jun-2011.
- Kim M, Cai D and Kim S An empirical investigation into the role of API-level refactorings during software evolution Proceedings of the 33rd International Conference on Software Engineering, (151-160)
- Schäfer M, Sridharan M, Dolby J and Tip F Refactoring Java programs for flexible locking Proceedings of the 33rd International Conference on Software Engineering, (71-80)
- Tip F, Fuhrer R, Kieżun A, Ernst M, Balaban I and De Sutter B (2011). Refactoring using type constraints, ACM Transactions on Programming Languages and Systems, 33:3, (1-47), Online publication date: 1-Apr-2011.
- Schaefer M and de Moor O (2010). Specifying and implementing refactorings, ACM SIGPLAN Notices, 45:10, (286-301), Online publication date: 17-Oct-2010.
- Schaefer M and de Moor O Specifying and implementing refactorings Proceedings of the ACM international conference on Object oriented programming systems languages and applications, (286-301)
- Schäfer M, Dolby J, Sridharan M, Torlak E and Tip F Correct refactoring of concurrent java code Proceedings of the 24th European conference on Object-oriented programming, (225-249)
- Shonle M, Griswold W and Lerner S Addressing common crosscutting problems with Arcum Proceedings of the 8th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering, (64-69)
- Murphy-Hill E and Black A Breaking the barriers to successful refactoring Proceedings of the 30th international conference on Software engineering, (421-430)
- Sultana N and Thompson S Mechanical verification of refactorings Proceedings of the 2008 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation, (51-60)
- Tip F Refactoring using type constraints Proceedings of the 14th international conference on Static Analysis, (1-17)
- Monteiro M and Fernandes J Towards a catalogue of refactorings and code smells for aspectj Transactions on Aspect-Oriented Software Development I, (214-258)
- Balaban I, Tip F and Fuhrer R Refactoring support for class library migration Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (265-279)
- O'Connor A, Shonle M and Griswold W Star diagram with automated refactorings for Eclipse Proceedings of the 2005 OOPSLA workshop on Eclipse technology eXchange, (16-20)
- Balaban I, Tip F and Fuhrer R (2005). Refactoring support for class library migration, ACM SIGPLAN Notices, 40:10, (265-279), Online publication date: 12-Oct-2005.
- Hannemann J, Murphy G and Kiczales G Role-based refactoring of crosscutting concerns Proceedings of the 4th international conference on Aspect-oriented software development, (135-146)
- Leitão A (2004). Detection of Redundant Code Using RD, Software Quality Journal, 12:4, (361-382), Online publication date: 1-Dec-2004.
- Hannemann J, Fritz T and Murphy G Refactoring to aspects Proceedings of the 2003 OOPSLA workshop on eclipse technology eXchange, (74-78)
- Eloff J Software restructuring Proceedings of the 2002 annual research conference of the South African institute of computer scientists and information technologists on Enablement through technology, (83-92)
- Mens T (2002). A State-of-the-Art Survey on Software Merging, IEEE Transactions on Software Engineering, 28:5, (449-462), Online publication date: 1-May-2002.
- Kataoka Y, Notkin D, Ernst M and Griswold W Automated Support for Program Refactoring using Invariants Proceedings of the IEEE International Conference on Software Maintenance (ICSM'01)
- Tokuda L and Batory D (2001). Evolving Object-Oriented Designs with Refactorings, Automated Software Engineering, 8:1, (89-120), Online publication date: 1-Jan-2001.
- Griswold W, Chen M, Bowdidge R, Cabaniss J, Nguyen V and David Morgenthaler J (1998). Tool Support for Planning the Restructuring of Data Abstractions in Large Systems, IEEE Transactions on Software Engineering, 24:7, (534-558), Online publication date: 1-Jul-1998.
- Bowdidge R and Griswold W (1997). How Software Engineering Tools Organize Programmer Behavior During the Task of Data Encapsulation, Empirical Software Engineering, 2:3, (221-267), Online publication date: 1-Mar-1997.
- Griswold W, Chen M, Bowdidge R and Morgenthaler J (1996). Tool support for planning the restructuring of data abstractions in large systems, ACM SIGSOFT Software Engineering Notes, 21:6, (33-45), Online publication date: 1-Nov-1996.
- Griswold W Just-in-time architecture Joint proceedings of the second international software architecture workshop (ISAW-2) and international workshop on multiple perspectives in software development (Viewpoints '96) on SIGSOFT '96 workshops, (8-11)
- Griswold W, Chen M, Bowdidge R and Morgenthaler J Tool support for planning the restructuring of data abstractions in large systems Proceedings of the 4th ACM SIGSOFT symposium on Foundations of software engineering, (33-45)
- Griswold W and Notkin D (1995). Architectural Tradeoffs for a Meaning-Preserving Program Restructuring Tool, IEEE Transactions on Software Engineering, 21:4, (275-287), Online publication date: 1-Apr-1995.
- Müller H, Tilley S and Wong K Understanding software systems using reverse engineering technology perspectives from the Rigi project Proceedings of the 1993 conference of the Centre for Advanced Studies on Collaborative research: software engineering - Volume 1, (217-226)
- Opdyke W and Johnson R Creating abstract superclasses by refactoring Proceedings of the 1993 ACM conference on Computer science, (66-73)
Index Terms
- Program restructuring as an aid to software maintenance
Recommendations
Automated assistance for program restructuring
Maintenance tends to degrade the structure of software, ultimately making maintenance more costly. At times, then, it is worthwhile to manipulate the structure of a system to make changes easier. However, manual restructuring is an error-prone and ...
Software restructuring: implementing a code abstraction transformation
SAICSIT '02: Proceedings of the 2002 annual research conference of the South African institute of computer scientists and information technologists on Enablement through technologySoftware restructuring is a form of perfective maintenance that modifies the structure of a program's source code. Its goal is increased maintainability to better facilitate other maintenance activities, such as adding new functionality to, or correcting ...