Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:lehre:programmierkonzepte:ptb2023:18:index

18. Refactoring

Themen
Motivation und Voraussetzungen
Wann sollte man refaktorieren?
Strategien und Vorgehen beim Refactoring
Zusammenhang mit Entwurfsmustern
Folien
PDF
Glossar
PDF


Zentrale Aspekte

  • Refactoring ist die Verbesserung der internen Struktur
    existierenden Codes ohne Änderung seiner Funktionalität.
  • Zeitdruck ist kein Argument gegen Refactoring.
    Unterlassen verursacht später (erheblich) mehr Aufwand.
  • Refactoring ist eine Frage der Professionalität.
    Es sollte langsam, wohlüberlegt und sorgfältig umgesetzt werden.
  • Gute Tests und eine ausreichende Testabdeckung
    sind zwingende Voraussetzung für erfolgreiches Refactoring.
  • Gute IDEs unterstützen auch komplexere Refactoring-Schritte
    und steigern so die Produktivität und Codequalität.

Fragen zur Vertiefung und Wiederholung

Diese Fragen dienen der persönlichen Beschäftigung mit der Thematik, werden aber nicht separat in der Vorlesung besprochen.

  • Was ist Refactoring?
  • Wann sollte man Code refaktorieren, wann nicht?
  • Was ist ein wesentlicher Aspekt von Refactoring?
  • Warum ist Refactoring so wesentlich für gleichbleibend hohe Codequalität?
  • Was sind zwingende Voraussetzungen für erfolgreiches Refactoring?
  • Nennen Sie mindestens drei Beispiele für konkrete Refactoring-Schritte auf unterschiedlichen Ebenen von Code.
  • Warum ist Refactoring in fast allen Fällen dem kompletten Neuentwurf vorzuziehen?
  • Welche Gemeinsamkeiten können Sie zwischen Refactoring und guter wissenschaftlicher Praxis erkennen?
  • Welche Rolle spielen IDEs für das Refactoring? Welches Qualitätskriterium für IDEs lässt sich daraus ableiten?

Weiterführende Literatur

Eine kommentierte und handverlesene Liste mit weiterführender Literatur zum Thema. Die Auswahl ist zwangsläufig subjektiv.

Der „Klassiker“ zum Thema ist ist das Buch von Martin Fowler [Fowler, 1999Fowler, Martin (1999): Refactoring. Improving the Design of Existing Code, Addison-Wesley Longman, Boston]. Es entstand, bevor testgetriebene Entwicklung wirklich populär wurde, verweist aber gleichwohl auf die Notwendigkeit sauberer Unittests und einer hohen Testabdeckung als Voraussetzung für erfolgreiches Refactoring. (Darüber hinaus ist Fowler schon damals mit dem Konzept der testgetriebenen Entwicklung vertraut.) Fowler bringt gleich am Anfang des Buches ein ausführliches, schrittweises Beispiel, so dass man ihm geradezu beim Refactoring zusehen kann.

Eine gute Zusammenfassung von Refactoring findet sich in Kapitel 25 von [mcconnell-s-18.4]. McConnell fasst hier viele der Strategien aus [Fowler, 1999Fowler, Martin (1999): Refactoring. Improving the Design of Existing Code, Addison-Wesley Longman, Boston] sehr knapp zusammen.

Von Robert Martin gibt es unterschiedlich ausführliche Beschreibungen von Refactoring anhand konkreter Codebeispiele, eher kurz ist Kapitel 5 in [martin-rc-18.3], ausführlicher Kapitel 14 in [martin-rc-18.8]. Sehr knapp und ohne Beispiele ist Abschnitt 33 in [Hunt, 1999Hunt, Andrew; Thomas, David (1999): The Pragmatic Programmer, Addison-Wesley, Boston]. Wer eine deutsche Beschreibung vorzieht, wird in Kapitel 15 von [passig-k-18.3] fündig.

Der Zusammenhang zwischen Entwurfsmustern [Gamma, 1995Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995): Design Patterns. Elements of Reusable Object-Oriented Software, Addison-Wesley, Boston] und Refactoring [Fowler, 1999Fowler, Martin (1999): Refactoring. Improving the Design of Existing Code, Addison-Wesley Longman, Boston] wird von Kerievsky [kerievsky-j-18.5] hergestellt. Er präsentiert in seinem Buch einen Katalog von Refactorings zu, in Richtung von und weg von Entwurfsmustern.

Die Frage der „richtigen“ Metapher für das Programmieren wird von vielen Autoren diskutiert. Hunt und Thomas [Hunt, 1999Hunt, Andrew; Thomas, David (1999): The Pragmatic Programmer, Addison-Wesley, Boston] betonen sehr den handwerklichen Aspekt. Ein sehr lesenswerter Essay zum Verhältnis von Ingenieurswissenschaften und Softwareentwicklung, insbesondere hinsichtlich des Wesens von Code als Entwurf, ist „What Is Software Design“ von Jack W. Reeves, abgedruckt im Anhang von [martin-rc-18.3]. Wieder einen anderen Aspekt, nämlich den der Kunst, betonen Donald Knuth mit seinem monumentalen Werk „The Art of Computer Programming“ und in seiner Nachfolge Raymond [raymond-es-18.4] und Graham [graham-p-18.0], letzterer insbesondere in seinem titelgebenden Essay „Hackers and Painters“.

Aktuell (im November 18.8) ist das Buch „Refactoring“ von Martin Fowler in einer zweiten Auflage erschienen. Dazu gibt es ein Interview auf Heise.de mit Martin Fowler.

  • Fowler, Martin (1999): Refactoring. Improving the Design of Existing Code, Addison-Wesley Longman, Boston
  • Gamma, Erich; Helm, Richard; Johnson, Ralph; Vlissides, John (1995): Design Patterns. Elements of Reusable Object-Oriented Software, Addison-Wesley, Boston
  • Hunt, Andrew; Thomas, David (1999): The Pragmatic Programmer, Addison-Wesley, Boston
de/lehre/programmierkonzepte/ptb2023/18/index.txt · Zuletzt geändert: 2023/08/25 11:02 von 127.0.0.1