A formal pattern language for refactoring of Lisp programs

Refactoring tools are extremely important to prevent errors in legacy systems restructuring. Unfortunately, to be effective, these tools require huge computer resources that cause unacceptable inefficiencies or limit the size of the restructured programs or even the programming language expressiveness. Previous approaches also made it difficult for the programmer to extend the tool with new refactoring operations. Pattern languages exist that describe several techniques to refactor a program. However, they are usually described at a very abstract level that is understandable only by a human programmer and that is hard to implement in refactoring tools. We present a formal pattern language that solves these problems. The pattern language is used to define refactoring operations that can be as powerful as is computationally possible but that are very, easy to write. The language simplicity also allows for the automatic learning of new refactoring operations from the observation of manual code transformations.

[1]  David Gries,et al.  Specification and Transformation of Programs: A Formal Approach to Software Development , 1990 .

[2]  Stéphane Ducasse,et al.  A Pattern Language for Reverse Engineering , 1999, EuroPLoP.

[3]  Sonya E. Keene,et al.  Object-oriented programming in COMMON LISP - a programmer's guide to CLOS , 1989 .

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

[5]  Ansgar Radermacher,et al.  Support for Design Patterns Through Graph Transformation Tools , 1999, AGTIVE.

[6]  Cristina Cifuentes,et al.  A Methodology for Decompilation , 1993 .

[7]  Ralph E. Johnson,et al.  Refactoring and Aggregation , 1993, ISOTAS.

[8]  William F. Opdyke,et al.  Refactoring object-oriented frameworks , 1992 .

[9]  Jonathan Rees,et al.  Revised3 report on the algorithmic language scheme , 1986, SIGP.

[10]  W. Rapaport,et al.  The SNePS family , 1992 .

[11]  William G. Griswold Program restructuring as an aid to software maintenance , 1992 .

[12]  William G. Griswold,et al.  Computer-aided vs. manual program restructuring , 1992, SOEN.

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

[14]  R. Kent Dybvig,et al.  Revised5 Report on the Algorithmic Language Scheme , 1986, SIGP.

[15]  Harold Abelson,et al.  Revised5 report on the algorithmic language scheme , 1998, SIGP.

[16]  Peter Norvig,et al.  Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp , 1991 .

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

[18]  Alan Bawden,et al.  Quasiquotation in Lisp , 1999, PEPM.

[19]  Fábio Bauermann Leitão UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA DE PRODUÇÃO DESENVOLVIMENTO E AVALIAÇÃO DE UMA FERRAMENTA COMPUTACIONAL MULTIMEIOS UTILIZADA NO AUXÍLIO AO APRENDIZADO DE PROJETOS DE EXPERIMENTOS BÁSICOS , 2000 .

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

[21]  John David Morgenthaler,et al.  Static analysis for a software transformation tool , 1998 .