Refactoring

Refactoring (auch Refaktorisierung , Refaktorierung oder Restrukturierung ) bezeichnet in der Software-Entwicklung stirbt manuelle oder Automatisierte Strukturverbesserung von Quelltexten unter Beibehaltung Dezember beobachtbaren Programmverhalten. Dabei Soll sterben Lesbarkeit , Verständlichkeit, Wartbarkeit und Erweiterbarkeit verbessert Werden, with the Ziel, die jeweiligen Aufwand für Fehleranalyse und funktional Erweiterung Deutlich zu sterben.

Refactoring ist ein zentraler Agild Software Software . Dort wird meistens von „continuierendem“ Refactoring [1] oder “ kompromisslosem “ Refactoring [2] gesprochen. Refactoring ist im Prozess der Software-Entwicklung, die eine der Hauptkomponenten des Moduls ist Integration von Software-Entwicklungsprogrammen und Anwendungen. Phase beschrieben.

Begriffsherkunft

Der Begriff Würde zum Ersten Mal in Einer Arbeit von Ralph Johnson und William Opdyke 1990 gebraucht ( „Refactoring: Eine Hilfe in Anwendungs – Frameworks Gestaltung und Evolving objektorientierte Systeme“ In:. Proceedings of Symposion über Objektorientierte Programmierung Praktische Anwendungen betonend (SOOPPA ), September 1990). Opdyke promovierte 1992 zu ihnen Thema.

Diese Ideen waren die Idee einer Software-Refactory, das Umgestalten von Computerprogrammen.

Die unzutreffende Übersetzung Refaktorisierung stammt Aus einer Verwechslung mit Einer Hauf zitierten Analogie, sterben nicht ursprünglich Begriffsinhalt Krieg: Refactoring ist eine art, ein Programm so zu modifizieren, that Verborgen Struktur offengelegt Werden, ohne sterben Funktionalität zu ÄNDERN. Dies, so gibt (fälschlichen) Analogieschluss , entsprechende sie vorgehen , wo Faktorisierung von Polynomen in der Mathematik .

Vorgehensweisen

Refactor wird hauptsächlich auf uncheinen Stellen im Code (siehe Code-Smell ) angewendet. Dabei wird der Quelltext eines Computerprogramms übersetzt, wobei die tätähliche Programmfunktion entarretierte bleiben soll. Die Umgestaltung des Quelltextes folgt Meist folgenden Standpunkten:

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

Die Gesichtspunkte Dezember Refactoring Hängen eng mit den daraus resultierenden vorteil zusammen. Das Refactoring hat ein Analogon in der Mathematik in Einer Vorgehensweise, sterben als algebraische Umformungbezeichnet Wird, bei der das Ziel der Umformung ebenfalls Eine bessere Lesbarkeit, Verständlichkeit und gegebenenfalls Erweiterbarkeit (Dec Helenglei Chung Systems) ist. Aus diesem Grunde Ist Funktional Sprachen ( Lisp , Haskell , Ocaml , Erlang und so weiter) wesentlich besser geeignet, ein Refactoring durchzuführen, wenn sie Auf einem Mathematischen Paradigma der Programmierung basieren.

Dieser Refactor wird erleichtert und unterstützt durch:

  • Unit – Tests , sterben als Regressionstest Beschichtete can that du das verhalten des Programm unter Gleichen bedingungen nicht Geändert hat und Durch das Refactoring nicht versehentlich Fehler in Hollywood gerechnet wurde,
  • Arbeitswoche, speziell integrierte Entwicklungsumgebungen , die zu den beliebtesten Flüchtlingen der Welt gehören,
  • Functional Programming Speeches (Unter anderm, Code of Functions Language with Mathematical Methods of Correction of Prerequisites),
  • Eine Programmiersprache mit Einem String Typsystem (z. B. bei der Programmiersprache Ocaml ), Welches schon im Vorfeld (zur Compile-Time) viele Fehlern ausschließt, Weil es Dafür sorgt that sterben Unterschrift (Interface) Samen bleibt, Struktur Auch Wenn Der ( Implementierung) sich anderes. Dies erspart viele Unit – Tests schon im Vorfeld (da es viele Fehlerquellen ausschließen).

Mögliche Refactorings

Folgen Sie Sind BESONDERS Hauf eingesetzte Refactoring:

  • Änderung eines Symbols
  • Verschieben eines Symbols in einem Modul, z. B. Methode in einer anderen Klasse
  • Aufteilung Ein Module (z. B. Paket, Klasse, Methode) in Mehr kleineren Module oder Zusammenlegung Kleinert Module zu Einem Händler.
  • Im Test Tests Sinne auch Umformatierung eines Quelltextes, z. B. mit einem Beautifier
  • Bei der Modellierung von Sprache UML kann das Programm „Refactoring“ verwendet werden. Es wird eine robuste und stabile Systemarchitektur, da unübersichtliche Änderungen nicht im Code initiiert wurden.
  • Wenden von Funktionen hat die Funktionale Programmierung
  • Der Leser (Refactor) der Gemeinde abstrahierte das Logik Mehrer Modul in Funktionen. (Funktionalität parametrisiertes Modul, Modul als Parameter und Modul als Ergebnis liefern.)

Vorteile und Nachteile

vorteile

Refactoring sollte durch das Programm für Design in der Kunst zur Verfügung gestellt werden, welches für den Programmering Guide, den bekanntesten Code Functional oder den anderen, des Wierderzuverwendens gedacht ist. Dies bedeutet, dass der Code besonders kritisch ist.

  • Lesbarkeit , so dass möglichste Programmierte verstehen, war de Code tatsächlich erledigt
  • Modularität und Redundanz , so dass konkrete Problemlösungen von anderer Stelle möglich sind und nicht mehr implementiert sind
  • Kopplung und Kohasion , hat zukünftige Änderungen durch lokale Auswirkungen
  • Testing Unit ( Siehe Unit-Test ) , so dass es möglich ist, die korrekten Regeln für die Zukunft durch Regression Tests abzuschliessen

Im üblichen Softwareentwicklungszyklus ist ein fortwährender Kreislauf von Spezialisierung , Design , Implementierung und Tests vorgesehen. Nach jedem Durchlauf können die Software-Produkte immer im Kreislauf gefunden werden. Mit der Technik Klassisches Hiesse das jedoch that nach Einer Änderung der Spezifikation oder Einems Redesign oft Teile oder Sogara Das ganze Programm völlig neu geschrieben Werden mußten. Refactoring ist Ihr Entwickler diesen Zyklus dauerhaft im Rahmen des Prozesses zu beenden, und so sein Produkt kontinuierlich zu verbessern.

nachteile

Auf der andre Seite gibt es Die Komplikation, unser aller für das Unternehmen und sein Umfeld:

  • Eventueller Zeitvertreib ohne dabei zu sein, aber auch von „Wiegende Aufgaben“ ablenkt.
  • Durch das Refactoring können neue, unterwartete Fehler entstehen.
  • Interpretation und Testaufwand.
  • Geschmacksfrage, die die Programmstruktur verwendet.
  • Abstimmungsaufwand zwischen jedem Programmierer, der ein Mitglied der Zeit auswirken soll.

Diese Gene können variieren und sind nicht Bestandteil von Refactoring.

Risiken und der Handhaben

Refactoring wird nur auf funktionierenden Code ausgeführt (seine Funktionalität ist immer gleich). Dies schließt auch das Risiko ungewünschter Änderungen und Fehler ein. Um zu of this Risiko vermeiden (oder wenigstens zu minimieren) used eine verschiedene Regeln , stirbt den Prozess des Refaktorisierens ungefährlicher machen.

Zuerst soll man eine Reihe automatisch mehr ausgiebige Unit Tests erhalten . Diese wurden für das Refactoring verwendet und Sie beginnen, Tests mit allen Funktionen zu ersetzen. Zusätzlich können Sie mit Hilfe eines Programms feststellen, dass die Testabdeckung überprüft und getestet wird. Dies stellt sicher, dass das Programmticht leuft. Nach Durchführung des Refactoring wird wieder die Testsuite ausgeführt. So können Sie Fehler beim Refactoring sofort erkennen. Wenn Unit-Tests das Refactoring sicher machen können, senken Unit-Tests die Risiken von Refactorings.

Das Prinzip der kleinen Änderungen. Wenn Sie Ihre Meinung ändern, können Sie nicht warten, gern geschehen, gern geschehen. Andere schweißen, um den Fehler zu finden und einen Finder zu finden. Meistens können Refactorings, die Pflanzen, in einfachen kleinen Einheiten zerlegen. Vor und nach jedem Schritt wird durch die Tests die Integrität des Systems geprüft. Durch sterben verwendung Automatisierter Refactoring-Funktion (Wie sie z. B. von Eclipse – oder Borland Delphi ab Version 2005 zur verfügung Gestellt Werden) lassen sich ebenfalls Fehlerquellen wirksam ausschließen Sowie der eigene Arbeitsaufwand minimiert.

Schließlich Gibt es einen Katalog von Refactoring- mustern , sterben ähnlich Wie die Entwurfsmuster eingesetzt Werden, um Fehler zu vermeiden. Dies ist in jedem Fall eine Reihe von Parameter definiert. Da wäre erstmal das Ziel des Muster ( Methode extrahiert, Klasse umbenennen, etc.) und dazu Dann Eine Reihe von Arbeitsanweisungen , stirbt für this Aktion ausgeführt Werden Müssen. Viele of this Muster can heutzutage automatically von Werkzeug umgesetzt Werden. Du magst Softwareentwickler auch nicht, dass Entscheidung, Welches Muster wird angewendet werden, um den QuelltextZu verbessern. Aufgrund der Tatsache, dass die Mechanismen oft weder richtig noch fehleranfällig sind. Ich bin mir sicher, dass der Herbst so schlecht kommen wird, zu einem Problem, das sich ändern kann. Eines der wichtigsten Probleme, das effizienteste Testen ist immer nach dem Refactoring überhaupt.

Beispiel

Dieser Java- Code vor dem Refactoring enthält eine temporäre Variable, die für verschiedene Threads geändert werden soll.

 Doppel x = 2 * ( Breite + Höhe );
 System . aus . println ( "Umfang:" + x );
 x = Breite * Höhe ;
 System . aus . Drucken ( "Fläche:" + x );

Durch Refactoring wird für jeden der Verwendungszwecke eine unterschiedliche Variable deklariert, die jeweils einen aussagekräftigen Namur

 doppelte Ausdehnung = 2 * ( Breite + Höhe );
 System . aus . println ( "Scope:" + scope );
 doppelte flaeche = breite * hoehe ;
 System . aus . println ( "Fläche:" + flaeche );

Durch weiteres Refactoring können beide Prämissen eliminiert werden.

Nachteile:

  • Bedeutung der Ausdrücke wird unklar.
  • Ausdrücke können schlechter im Debugger zugelassen werden.

Der Code of Conduct ist weder der Schlechter noch der Compiler der Common Common Subexpression Elimination der 1990er Jahre, der auch die Live-Variablenanalyse steuert .

 System . aus . println ( "Größe:" + ( 2 * ( Breite + Höhe )));
 System . aus . println ( "Fläche:" + ( breite * höhe ));

Man könnte die Berechnung auch in einer Klasse durchführen und diese anwenden:

 Rechteck rechteck = neues Rechteck ( breit , hohe );
 System . aus . println ( "Umfang" + Rechteck . umfang () );
 System . aus . println ( "Fläche:" + rechteck . flaeche () );
 System . aus . println ( "Eckenanzahl:" + rechteck . ecken () );
 System. aus . println ( "diagonal" + Rechteck . Diagonale ( 0 , 1 ) );

Literatur

  • Martin Fowler : Refactoring. Wer ist der Designer der Software ? Addison Wesley Verlag, ISBN 3-8273-1630-8 .
  • Robert C. Martin: Clean Code: Refactoring, Muster, Tests und Technologien für Sauber Code . mitp, frechen 2009, ISBN 978-3-8266-5548-7 .
  • William C. Wake : Refactoring Arbeitsbuch . , ISBN 0-321-10929-5 .
  • Ch. Bommer, M. Spindler, V. Barr: Softwarewartung – Grundgesetz, Management und Wartungstechniken , dpunkt.verlag, Heidelberg 2008, ISBN 3-89864-482-0
  • Joshua Kerievsky: Refactoring zu Patterns (= Programmiererwahl ). 1. Auflage. Addison Wesley, 2006, ISBN 978-3-8273-2503-7 (englisch, industriallogic.com [abgeraufen am 14. März 2013] Originaltitel: Refactoring to Patterns .).

Werkzeuge

  • bicyclerpair Refactoringwerkzeug für Python

Weblinks

  • Was ist das Refactoring? – c2.com Artikel (Englisch)
  • Refactoring Motivation, Herleitung und Demonstration in Eclipse
  • Übersetzung von Fowlers Refactoring Katalog
  • Wer wird unwürdiger Quelltext schreiben? von roedy green (englisch)
  • MF Bliki: Refactoring (englisch)
  • Smells to Refactorings Kurzanleitung (PDF; 116 KB)
  • Refactoring Katalog von Martin Fowler

Einzelstunden

  1. Hochspringen↑ Floyd Marinescu, Abel Avram: Domain-getriebenes Design schnell . Hrsg.: C4Media. InfoQ, 2007, ISBN 978-1-4116-0925-9 , S. 57-59 ( englisch , infoq.com [abgerufen am 7. März 2013]).
  2. Hochspringen↑ Portland Pattern Repository : Gnadenlos umgestalten. Abgerufen am 7. März 2013 (deutsch).