CSC/ECE 517 Fall 2009/wiki1a 9 DS
REFACTORING TOOLS
Definition
Refactoring[1] is defined as the technique by which the existing body of the code is restructured by changing the inner structure and preserving its external behavior. The tools which are used to achieve this purpose are commonly known as Refactoring Tools.
Refactoring tools are provided as Integrated Development Environment (IDE) features currently and are available for all popular programming languages. For instance, the common IDEs that provide the refactoring tools are IBM’s Eclipse, Sun’s Netbeans and IntelliJ’s IDEA. For further information, an academic thesis “Refactoring Tools and Complementary Techniques” focuses on the survey made on the comparison of refactoring tools usage in IDEs.
Overview
This deals with the academic underpinnings of refactoring starting from its evolution and the initiatives taken to improve the current generation of refactoring tools. It also throws lights up on various books, academic thesis, conferences and workshops on the topic of refactoring.
Academic Underpinnings
Motivation
The first official thesis on the area of refactoring leads back to 1992 when Bill Opdyke finished his thesis on the topic "Refactoring Object-Oriented Frameworks"[2]. Bill Opdyke was working in Bell Laboratories developing electronic switching systems. When he started to pursue his doctoral studies he wanted it to be related to practical business applications. That is when he narrowed down on this topic which led to the official shaping of the cloud refactoring.
The Basic motivation behind the emergence of refactoring was the software re-usability and cutting down cost involved in restructuring software for various purposes. Thus refactoring leads to software reuse in future.
Though it might appear that refactoring began in research labs it actually emerged on an ad-hoc basis when object-oriented programmers came across situations where they felt the need for change in object oriented software. Refactoring actually has its roots way back. Factoring was a key technique in Forth Language from its birth in 70’s. Absence of appropriate syntax made it not possible to extract the best use out of it. Ralph Johnson was the first person to use the name refactoring in print. Along with Bill Opdyke he published a paper on refactoring in 1990.
Etymology
The first known use of the term “refactoring” appeared in “Refactoring: An Aid in Designing Application Frameworks and Evolving Object-Oriented Systems” by Ralph Johnson and Bill Opdyke in 1990. But Refactoring as a function and as technique was almost certainly used before then.
More Works
Lot of work has been done on this area which includes the thesis work “Practical Analysis for refactoring” by Donald Bradley Roberts. It focuses on several ways to make a refactoring tool that is both fast enough and reliable enough to be useful. In another thesis work “Refactoring as Formal Refinements” by Márcio Cornélio throws light on algebraic technique that presents refactoring as behavior preserving transformation. For list of other thesis works and papers refer to the external links.
Books on Refactoring
Various books are available on the topic of refactoring these days. The initial list of books includes “Refactoring: Improving the Design of Existing Code“ by Martin Flower and Refactoring to Patterns, by Joshua Kerievsky and many more books on this topic. For listing of books refer to the external links on books on refactoring.
Initiatives taken to improve current generation of refactoring tools
Web Portal
Various initiatives like conferences, workshops are conducted by Organizations like Institute of Electrical and Electronics Engineers (IEEE), Associate for Computing Machinery (ACM) to improve the current generation of refactoring tools. The first initiative taken to improve the current generation of refactoring tools is creating the refactoring research web portal ([3]). This research web portal includes a collection links and articles that provide the researchers and industrial engineers an up-to-date knowledge on refactoring.
Workshops and Conferences
The second initiative taken is, organizing workshops which serve as a forum to bring researchers and tool vendors together for collaborative efforts in developing the refactoring tools. This initiative has been taken with the motive to develop the tool support for refactoring efficiently by combining the state-of-the-art research with the challenges from real-time applications. The benefits of such workshops by collaborating the researchers and tool vendors are, to develop the tools in a short period of time and eliminating the redundant works by other researchers and tool vendors. The workshops on refactoring tools are being conducted annually at various places
The first workshop on refactoring tools was conducted on July 31st 2007 in conjunction with European Conference on Object-Oriented Programming (ECOOP) at Berlin. Various papers like automated refactoring for improved cohesion, reuse based refactoring tools, Engineering reusability for software refactoring tools and others were presented and discussed. The proceedings of the first workshop can be found as a TU Berlin Technical Report, ISSN 1436-9915.
The second workshop on refactoring tools was conducted on October 19th 2008 in conjunction with Object-Oriented Programming Systems, Languages and Applications (OOPSLA) at Nashville, Tennessee. Various papers that were accepted and discussed were Cross Language Refactoring for Eclipse plug-ins, Tool support for refactoring functional programs, Towards a Refactoring guideline using code clone classification and others. More accepted papers at the second workshop can be found at [4]. The interest in research in refactoring tools has increased to a greater extent that more papers were submitted and more researchers and tool vendors like JetBrains, Microsoft participated at the workshop.
The third workshop on refactoring tools is going to be held on October 25-29, 2009 in conjunction with Object-Oriented Programming Systems, Languages and Applications (OOPSLA) at Orlando, Florida. The papers have been invited for the topics which include language-independent transformation frameworks, language-independent analysis frameworks and analytical representations.
Other Initiatives
Apart from workshops held specifically for refactoring tools, other conferences have been organized by Automated Software Engineering (ASE), International Conference on Software Engineering (ICSE), Foundations of Software Engineering (FSE) wherein papers on refactoring have been presented and awarded the best paper award.
In addition to the workshops and conferences, the weekly contest on refactoring “Refactor It! The Weekly Book Giveaway” has been started by Billy McCafferty to increase the awareness and interest among the software developers, students and other programming communities. Various groups like Software Architecture Group (SAG) at University of Illinois at Urbana-Champaign, Program Analysis and Transformation (PAT) group at IBM TJ Watson Research Center have been organized at Universities and Organizations to conduct research in refactoring tools and to improve the current generation of refactoring tools. More details about various groups and people can be found at [5]
External Links
Refactor It contest [6]
Code It Software [7]
Books
Refactoring Workbook - William.C.Wake [8]
Refactoring to Patterns - [9]
Refactoring Databases : Evolutionary Database Design - [10]
Professional Refactoring in Visual Basic - [11]
CoreJ2EE Patterns - [12]
References
Thesis Works
William F. Opdyke, Refactoring object-oriented frameworks, University of Illinois at Urbana-Champaign, Champaign, IL, 1992 [13]
Refactoring as Formal Refinements- Marico Lopes Cornelio [14]
Practical Analysis for Refactoring – Donald B Roberts, University of Illinois at Urbana-Champaign Champaign, IL, USA[15]
Refactoring Tools and Complementary Techniques - Martin Drozdz, Derrick G Kourie, Bruce W Watson, Andrew Boake Espresso Research Group, Department of Computer Science, University of Pretoria, Pretoria, South Africa 0001 [16]
Other Papers/Conferences
William F. Opdyke and Ralph E. Johnson. Refactoring: An aid in designing application frameworks and evolving object-oriented systems. In Proceedings of Symposium on Object- Oriented Programming Emphasizing Practical Applications (SOOPPA), September 1990.
Refactoring, Reuse & Reality, Bill Opdyke, Lucent Technologies/ Bell Labs, Copyright 1999, Lucent Technologies[17]
First workshop on refactoring in conjunction with ecoop Berlin 07 [18]
Second ACM Workshop on Refactoring Tools (WRT'08)[19]
Accepted papers for WRT’08 [20]
Third ACM Workshop on Refactoring Tools (WRT'09)[21]
ACM SIGSOFT 2006 / FSE 14[22]
29th Int. Conference on Software Engineering® 20 - 26 May 2007[23]
21st IEEE/ACM International Conference on Automated Software Engineering[24]
Web
Refactoring Info[25]
www.refactoring.com [26]
Refactoring at AllExperts [27]