„Refactoring" – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Versionsgeschichte interaktiv durchsuchen
[ungesichtete Version] [ungesichtete Version]
← Zum vorherigen Versionsunterschied Zum nächsten Versionsunterschied →
Inhalt gelöscht Inhalt hinzugefügt
"verringern" erscheint mir unsinnig. wo ist sonst die abgrenzung zur normalen implementation? daran ändert auch XP nichts. bitte in diskussion klären
Ragalla (Diskussion | Beiträge)
72 Bearbeitungen
Keine Bearbeitungszusammenfassung
Zeile 70: Zeile 70:
* [[Redesign (Software)]]
* [[Redesign (Software)]]


[[Kategorie:(削除) Programmiertechnik (削除ここまで)]]
[[Kategorie:(追記) Programmierung (追記ここまで)]]
[[Kategorie:Softwarearchitektur]]
[[Kategorie:Softwarearchitektur]]



Version vom 8. Mai 2006, 20:59 Uhr

Refactoring ist eine Bezeichnung für eine Vorgehensweise in der Informatik, spezieller der Softwareentwicklung, bei der die Lesbarkeit, Verständlichkeit, Wartbarkeit, Erweiterbarkeit und Struktur (der Funktionen und Klassen) eines Computerprogramms verbessert wird, ohne dabei die Funktionalität der Software zu verändern. Der Nutzen dieser Vorgehensweise liegt mittel- und langfristig darin, dass die Aufwände für die Fehleranalyse und funktionale Erweiterung deutlich reduziert werden können.

Refactoring wird deutsch meist unzutreffend mit Refaktorisierung und manchmal mit Refaktorierung bezeichnet.

Refactoring ist ein wichtiger Bestandteil des Extreme Programming.

Begriffsherkunft

Der Begriff wurde zum ersten Mal in einer Arbeit von Ralph Johnson und William Opdyke 1990 gebraucht ("Refactoring: An aid in designing application frameworks and evolving object-oriented systems. In: Proceedings of Symposion on Object-Oriented Programming Emphasizing Practical Applications (SOOPPA), September 1990)). Opdyke promovierte 1992 über das Thema.

Sie entwickelten die Idee einer Software-Refactory, die das Umgestalten (eben das re-factoring) von Software-Programmen erleichtern sollte.

Die unzutreffende Übersetzung Refaktorisierung stammt aus einer Verwechslung mit einer häufig zitierten Analogie, die ursprünglich nicht Begriffsinhalt war: Refactoring ist eine Art, ein Programm so zu modifizieren, dass verborgene Strukturen offengelegt werden, ohne die Funktionaliät zu ändern: Dies, so der (fälschliche) Analogieschluss, entspreche dem Vorgehen der Faktorisierung von Polynomen in der Mathematik.

Vorgehensweise

Beim Refactoring wird der Quelltext eines Computerprogramms umgestaltet, wobei die tatsächliche Programmfunktion unverändert bleiben soll. Die Umgestaltung des Quelltextes erfolgt meist nach folgenden Gesichtspunkten:

  • Lesbarkeit
  • Übersichtlichkeit
  • Verständlichkeit
  • Erweiterbarkeit
  • Vermeidung von Redundanz
  • Testbarkeit

Die Gesichtspunkte des Refactorings hängen eng mit den daraus resultierenden Vorteilen zusammen.

Das Refactoring wird erleichtert und unterstützt durch:

  • Ein tiefes Verständnis des eingesetzten Programmierparadigmas, z.B. OOP
  • Unit-Tests, die als Regressionstests belegen können, dass das Programm sich immer noch gleich verhält und durch das Refactoring nicht versehentlich Fehler eingeführt wurden
  • Werkzeuge, insbesondere integrierte Entwicklungsumgebungen, die eine Unterstützung bei der Durchführung von Refactorings anbieten.

Mögliche Refactorings

Folgendes sind besonders häufig eingesetzte Refactorings:

  • Änderung eines Symbolnamens.
  • Verschieben eines Symbols in ein anderes Modul, z.B. eine Methode in eine andere Klasse.
  • Aufteilung eines Moduls (z.B. Paket, Klasse, Methode) in mehrere kleinere Module oder Zusammenlegung kleinerer Module zu einem größeren.
  • Im weitesten Sinne auch die Umformatierung eines Quelltextes, z.B. mit einem Beautifier
  • Bei geänderten Geschäftsprozessen bei Darstellung mittels der Unified Modeling Language UML kann mittels "Refactoring" der Programmcode geändert werden. Dadurch wird eine robuste und stabile Systemarchitektur geschaffen, da unübersichtliche Änderungen nicht im Code initiiert werden müssen.

Vorteile

Refactoring dient der Verbesserung der Wartbarkeit des Designs in der Art, dass es für den Programmierer leichter wird, den bestehenden Code funktional zu erweitern oder an anderer Stelle wiederzuverwenden. Dies versucht man zu erreichen, indem man den Code bezüglich folgender Kriterien verbessert:

  • Lesbarkeit, so dass möglichst viele Programmierer verstehen, was der Code tatsächlich macht
  • Testbarkeit (siehe Unit-Test), so dass es möglich wird, die korrekte Arbeitsweise des Codes für die Zukunft durch Regressionstests abzusichern
  • Modularität und Redundanz, so dass konkrete Problemlösungen von anderer Stelle genutzt werden können und nicht mehrfach implementiert sind

Im üblichen Softwareentwicklungszyklus ist ein fortwährender Kreislauf von Spezifikation, Design, Implementierung und Tests vorgesehen. Nach jedem Durchlauf kann das Softwareprodukt immer wieder neu in diesen Kreislauf einsteigen. Mit den klassischen Techniken hieß das jedoch, dass nach einer Änderung der Spezifikation oder einem Redesign oft Teile oder sogar das ganze Programm völlig neu geschrieben werden mussten. Refactoring erlaubt dem Entwickler diesen Zyklus permanent im Kleinen ablaufen zu lassen, und so sein Produkt kontinuierlich zu verbessern.

Risiken und deren Handhabung

Refactoring wird nur auf funktionierendem Code ausgeführt (dessen Funktionalität soll ja erhalten bleiben). Dies beinhaltet aber auch das Risiko ungewünschter Änderungen und Fehler. Um dieses Risiko zu vermeiden (oder wenigstens zu minimieren) verwendet man verschiedene Regeln, die den Prozess des Refaktorisierens ungefährlicher machen.

Zuerst sollte man eine Reihe automatisch ablaufender Unit-Tests haben. Diese werden vor der Refactoring angewandt, und man beginnt erst, wenn die Tests alle funktionieren. Dies stellt sicher, dass das Programm richtig läuft. Nach Ausführung des Refactoring wird wieder die Testsuite ausgeführt. So kann man Fehler beim Refactoring sofort erkennen.

Weiterhin gilt das Prinzip der kleinen Änderungen. Wenn man nur wenig verändert, dann kann man auch wenig zerstören. Meistens kann man komplexe Refactorings, die man plant, in einfache kleine Einheiten zerlegen. Vor und nach jedem Schritt wird wieder durch die Tests die Integrität des Systems geprüft. Durch die Verwendung automatisierter Refactoring-Funktionen (wie sie z.B. von Eclipse oder Borland Delphi 2005 zur Verfügung gestellt werden) lassen sich ebenfalls Fehlerquellen effektiv ausschließen sowie der eigene Arbeitsaufwand minimieren.

Schließlich gibt es einen Katalog von Refactoring-Mustern, die ähnlich wie die Entwurfsmuster eingesetzt werden, um Fehler zu vermeiden. Dabei ist in jedem Muster eine Reihe von Parametern definiert. Da wäre erstmal das Ziel des Musters (Methode extrahieren, Klasse umbenennen, etc.) und dazu dann eine Reihe von Arbeitsanweisungen, die für diese Aktion ausgeführt werden müssen. Viele dieser Muster können heutzutage automatisch von Werkzeugen umgesetzt werden. Man trifft als Softwareentwickler nur noch die Entscheidung, welches Muster worauf angewendet wird, um den Quelltext zu verbessern.

Literatur

siehe auch

Abgerufen von „https://de.wikipedia.org/w/index.php?title=Refactoring&oldid=16467685"