Roots of Refactoring

Refactoring is a new name for a transformational approach to iterative software development. Originally focused on class diagrams, it is now commonly associated with object-oriented programming languages like Java. In this article, we trace some of the conceptual roots and the ideas behind refactoring, and sketch its relation to other techniques, such as behavioral and structural refinement or compiler optimization. Based on these observations, we firmly believe that improved and adapted refactoring techniques will belong to the methodical tool set of tomorrow’s software engineers.

[1]  Edsger W. Dijkstra,et al.  Notes on structured programming , 1970 .

[2]  D. L. Parnas,et al.  On the criteria to be used in decomposing systems into modules , 1972, Software Pioneers.

[3]  Friedrich L. Bauer,et al.  Algorithmic Language and Program Development , 1982, Texts and Monographs in Computer Science.

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

[5]  Friedrich Ludwig Bauer,et al.  The wide spectrum language CIP-L , 1985 .

[6]  José Meseguer,et al.  Principles of OBJ2 , 1985, POPL.

[7]  Friedrich L. Bauer,et al.  The Munich Project CIP: Volume I: The Wide Spectrum Language CIP-L , 1985 .

[8]  David Harel,et al.  Statecharts: A Visual Formalism for Complex Systems , 1987, Sci. Comput. Program..

[9]  Barry W. Boehm,et al.  A spiral model of software development and enhancement , 1986, Computer.

[10]  Nancy A. Lynch,et al.  An introduction to input/output automata , 1989 .

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

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

[13]  J. Dieudonne Mathematics-- the music of reason , 1992 .

[14]  Michael A. Jackson,et al.  Software requirements and specifications - a lexicon of practice, principles and prejudices , 1995 .

[15]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[16]  Bernhard Rumpe,et al.  Formale Methodik des Entwurfs verteilter objektorientierter Systeme , 1996, Datenbank Rundbr..

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

[18]  TUM-I 9729 Mai,et al.  The Specification of System Components by State Transition Diagrams * ) , 1997 .

[19]  Peter Scholz,et al.  Design of reactive systems and their distributed implementation with statecharts , 1998 .

[20]  Ralph-Johan Back,et al.  Refinement Calculus , 1998, Graduate Texts in Computer Science.

[21]  S. Jones,et al.  A Transformation-Based Optimiser for Haskell , 1998, Sci. Comput. Program..

[22]  Bernhard Rumpe,et al.  Refinement of Pipe-and-Filter Architectures , 1999, World Congress on Formal Methods.

[23]  Martin Fowler. Refactoring Improving the Design of Existing Code , 1999 .

[24]  Jan Philipps,et al.  Step by Step to Histories , 2000, AMAST.

[25]  Alexander Pretschner,et al.  Model based testing in evolutionary software development , 2001, Proceedings 12th International Workshop on Rapid System Prototyping. RSP 2001.

[26]  Manfred Broy,et al.  Specification and Development of Interactive Systems , 2001, Monographs in Computer Science.

[27]  Pretschner,et al.  Model Based Testing with Constraint Logic Programming: First Results and Challenges , 2001 .