Skip to main content

Abstract

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 argue that improved and adapted refactoring techniques will belong to the methodical tool set of tomorrow’s software engineers.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 129.00
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 169.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info
Hardcover Book
USD 169.99
Price excludes VAT (USA)
  • Durable hardcover edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. B.W. Boehm. A spiral model of software development and enhancement. Software Engineering Notes, 11 (4), 1994.

    Google Scholar 

  2. M. Broy. The specification of system components by state transition diagrams. Technical Report TUM-I9729, Institut für Informatik, TU München, 1997.

    Google Scholar 

  3. K. Beck. Extreme Programming Explained: Embrace Change. Addison Wesley, 1999.

    Google Scholar 

  4. F.L. Bauer, R. Berghammer, M. Broy, W. Dosch, F. Geiselbrechtinger, R. Gnatz, E. Hangel, W. Hesse, B. Krieg-Bruckner, A. Laut, T. Matzner, B. Möller, F. Nicki, H. Partsch, P. Pepper, K. Samelson, M. Wirsing, and H. Wössner. The Munich Project CIP, Vol 1: The Wide Spectrum Language CIP-L. LNCS 183. Springer-Verlag, 1985.

    Google Scholar 

  5. M. Broy, F. Dederichs, C. Dendorfer, M. Fuchs, T.F. Gritzner, and R. Weber. The Design of Distributed Systems — An Introduction to FOCUS. Technical Report SFB 342/2/92 A, Technische Universität München, 1993. http://www4.informatik.tumuenchen.de/reports/TUM-I9202.ps.gz.

    Google Scholar 

  6. M. Broy, C. Facchi, R. Grosu, R. Hettler, H. Hußmann, D. Nazareth, F. Regensburger, O. Slotosch, and K. Stolen. The Requirement and Design Specification Language SPECTRUM, An Informal Introduction, Version 1.0, Part 1. Technical Report TUM-I9312, Technische Universität München, 1993.

    Google Scholar 

  7. M. Breitling and J. Philipps. Step by step to histories. In AMAST 2000, LNCS 1816, 2000.

    Google Scholar 

  8. BR2001] J. Brant and D. Roberts. Refactoring browser tool. http://st-www. cs. uiuc. edu/-hrant, 2001.

    Google Scholar 

  9. M. Broy and K. Stolen. Specification and Development of Interactive Systems. Springer, 2001.

    Google Scholar 

  10. R.-J. Back and J. von Wright. Refinement Calculus. Springer, 1998.

    Google Scholar 

  11. F. L. Bauer and H. Wössner. Algorithmic Language and Program Development. Springer, 1982.

    Google Scholar 

  12. E.W. Dijkstra. Notes on structured programming. In C.A.R. Hoare O. Dahl, E.W. Dijkstra, editor, Structured Programming. Academic Press, 1971.

    Google Scholar 

  13. J. Dieudonne. Mathematics — The Music of Reason. Springer, 1992.

    Google Scholar 

  14. M. Fowler. Refactoring. Improving the Design of Existing Code. Addison-Wesley, 1999.

    Google Scholar 

  15. K. Futatsugi, J. Goguen, J.-P. Jouannaud, and J. Meseguer. Principles of OBJ2. In B. Reid, editor, Proceedings of 12th ACM Symposium on Principles of Programming Languages, Association for Computing Machinery, pages 52–66, 1985.

    Google Scholar 

  16. G1999] J. Goguen. Hidden algebra for software engineering. In Conference on Discrete Mathematics and Theoretical Computer Science,volume 21 of Australian Computer Science Communications,pages 35–59. Springer, 1999.

    Google Scholar 

  17. G2001] UML Group. Unified Modeling Language. Version 1.4, Object Management Group (OMG), www.omg.org, 2001.

    Google Scholar 

  18. J. Gosling, B. Joy, and G. Steele. The Java Language Specification. Addison-Wesley, 1996.

    Google Scholar 

  19. D. Harel. Statecharts: a visual formalism for complex systems. Science of Computer Programming, 8: 231–274, 1987.

    Article  MathSciNet  MATH  Google Scholar 

  20. M. Jackson. Software Requirements and Specifications — a lexicon of practice, principles and prejudices. Addison Wesley, 1995.

    Google Scholar 

  21. S.L. Peyton Jones and A. Santos. A transformation-based optimiser for Haskell. Science of Computer Programming, 32 (1–3): 3–47, September 1998.

    Article  MATH  Google Scholar 

  22. H. Kilov. Business Models: A Guide for Business and IT. Prentice Hall, 2002.

    Google Scholar 

  23. C. E. Leiserson and J. B. Saxe. Retiming synchronous circuitry. Algorithmica,6(1):5–35, August 1991.

    Google Scholar 

  24. N. A. Lynch and M. R. Tuttle. An introduction to input/output au-tomata. CWI Quarterly, 3 (2): 219–246, 1989.

    MathSciNet  Google Scholar 

  25. W. Opdyke. Refactoring Object-Oriented Frameworks. PhD thesis, University of Illinois at Urbana-Champaign, 1992.

    Google Scholar 

  26. D. L. Parnas. On the criteria to be used in decomposing systems into modules. Communications of the ACM, 15: 1053–1058, 1972.

    Article  Google Scholar 

  27. A. Pretschner and H. Lötzbeyer. Model Based Testing with Constraint Logic Programming: First Results and Challenges. In 2nd ICSE Intl. Workshop on Automated Program Analysis, Testing, and Verification (WAPATV’01), 2001.

    Google Scholar 

  28. A. Pretschner, H. Lötzbeyer, and J. Philipps. Model Based Testing in Evolutionary Software Development. In Proc. 11th IEEE Intl. Workshop on Rapid System Prototyping (RSP’01), 2001.

    Google Scholar 

  29. J. Philipps and B. Rumpe. Refinement of information flow architectures. In M. Hinchey, editor, ICFEM’97. IEEE CS Press, 1997.

    Google Scholar 

  30. J. Philipps and B. Rumpe. Refinement of pipe and filter architectures. In FM’99, LNCS 1708, pages 96–115, 1999.

    Google Scholar 

  31. J. Philipps and B. Rumpe. Roots of Refactoring. In K. Baclayski and H. Kilov, editors, Tenth OOPSLA Workshop on Behavioral Semantics. Tampa Bay, Florida, USA. Northeastern University, 2001.

    Google Scholar 

  32. B. Rumpe. Formale Methodik des Entwurfs verteilter objektorientierter Systeme. PhD thesis, Technische Universität München, 1996.

    Google Scholar 

  33. B. Rumpe. A Note on Semantics (with an Emphasis on UML). In B. Rumpe H. Kilov, editor, Second ECOOP Workshop on Precise Behavioral Semantics, I9813. Technische Universität München, June 1998.

    Google Scholar 

  34. B. Rumpe and V. Thurner. Refining Business Processes. In Ian Simmonds H. Kilov, B. Rumpe, editor, Seventh OOPSLA Workshop on Precise Behavioral Semantics, I9820. Technische Universität München, June 1998.

    Google Scholar 

  35. P. Scholz. Design of Reactive Systems and their Distributed Implementation with Statecharts. PhD thesis, Technische Universität München, 1998.

    Google Scholar 

  36. M. Shaw and D. Garlan. Software Architecture. Prentice Hall, 1996.

    Google Scholar 

  37. N. Wirth. Program development by stepwise refinement. Communications of the ACM, 14: 221–227, 1971.

    Article  MATH  Google Scholar 

  38. J. Warmer and A. Kleppe. The Object Constraint Language. Addison Wesley, Reading, Mass., 1998.

    Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2003 Springer Science+Business Media Dordrecht

About this chapter

Cite this chapter

Philipps, J., Rumpe, B. (2003). Refactoring of Programs and Specifications. In: Kilov, H., Baclawski, K. (eds) Practical Foundations of Business System Specifications. Springer, Dordrecht. https://doi.org/10.1007/978-94-017-2740-2_15

Download citation

  • DOI: https://doi.org/10.1007/978-94-017-2740-2_15

  • Publisher Name: Springer, Dordrecht

  • Print ISBN: 978-90-481-6367-0

  • Online ISBN: 978-94-017-2740-2

  • eBook Packages: Springer Book Archive

Publish with us

Policies and ethics