Refaktorierung

Aus Eclipse
Wechseln zu: Navigation, Suche

◄== zurück zur Übersichtsseite


Unter Refactoring (in deutsch auch Refaktorierung) versteht man die Änderung des Sourcecodes eines Programms, ohne seine Semantik (Bedeutung) zu ändern.
Refactoring wird von Softwareentwicklern benutzt, um ihren "in die Jahre gekommenen" Sourcecode für andere verständlicher oder eleganter zu gestalten.

Geschichte

Der Begriff wurde zum ersten Mal 1990 in einer Forschungsarbeit von Ralph Johnson und William Opdyke gebraucht. Dafür erstellten sie eine Software-Refactory, die das Umgestalten von Software erleichtern sollte.[1] Der Schwerpunkt dieser Arbeit war die Bedeutung des Refactorings im Design von Frameworks.

Bill Opdyke schrieb eine Doktorarbeit über Refactoring. John Brant und Don Roberts entwickelten den RefactoringBrowser für Smalltalk. Don Roberts schrieb 1999 darüber eine Doktorarbeit. ▲___zum Seitenanfang

Bedingungen

  • Das Programm muss nach einem Refactoring noch kompilierbar sein, insbesondere müssen dazu die Syntaxregeln der Sprachspezifikation eingehalten werden.
  • Die Refaktorisierung soll bedeutungserhaltend sein, das Programm also sein nach außen sichtbares Verhalten nicht ändern.

▲___zum Seitenanfang

Ziele und Vorteile

Gründe für Refactoring können sein:

  • bessere Lesbarkeit bzw. Verständlichkeit
  • Vereinfachen der Bedingungen (z.B. Auflösen stark verschachtelter If-Blöcke)
  • bessere Organisation der Daten
  • bessere Organisation der Methoden
  • bessere Organisation der Typen durch Generalisierung

weitere Ziele:

  • Software-Fäulnis
    Sourcecode ist in der Regel einer ständigen Veränderung unterworfen. Gründe dafür sind Änderung der Vorgaben, Fehlerkorrekturen, innere Strukturänderungen, etc. Nach einiger Zeit "verkommt" der Sourcecode; man spricht von Software-Fäulnis (software decay).
  • deprecated Code
    Wenn eine neue Version der Programmiersprache neue Konzepte anbietet (z.B. Generics ab Java 1.5), die benutzt werden sollen, unterstützen Entwicklungstools (z.B. Eclipse) den Programmierer, indem die ungenauen, veralteten oder nicht mehr erwünschten (deprecated) Konstrukte automatisch mit Warnings versehen werden. Der Programmierer wird auf notwendige Änderungen im Sourcecode aufmerksam gemacht.

Ganz wichtig ist Refactoring bei agilen Entwicklungsprozessen, wie z.B. Extreme Programming.

Die Aufgabe, die sich dem Programmierer stellt, ist ein (aus welchen Gründen auch immer) verbesserungswürdiges Design des Sourcecodes in n Schritten in ein besseres Design zu transformieren. Größere Refactorings sollten dabei in mehrere kleinere zerlegt werden, um den Überblick zu bewahren und das Fehlerpotential zu reduzieren.

Refactoring-Tools nehmen dem Programmierer die sich oft wiederholende und deshalb fehlerträchtige Aufgabe ab, Änderungen im Sourcecode durchzuführen. Soll beispielsweise ein Klassenname aussagekräftiger gestaltet werden, muss nicht nur der Klassenname samt Dateinamen in der Klassendefinition geändert werden, sondern auch alle Referenzen auf diese Klasse im ganzen Workspace. ▲___zum Seitenanfang

Nachteile

Oft ist die Motivation eines Entwicklers ziemlich niedrig, wenn es darum geht, seinen Sourcecode zu ändern (eigene Erfahrung). Es gibt natürlich auch detailverliebte Entwickler, die am bereits funktionierenden Code noch endlos feilen, um ihn zu verbessern. Fest steht, dass Refactoring (dies gilt auch für die Dokumentation) Zeit in Anspruch nimmt und auf den ersten Blick keinen praktischen Nutzen zu haben scheint, denn es entstehen damit keine zusätzlichen Funktionen oder funktionale Verbesserungen am Programm. Sowohl der ersten Gruppe der Entwickler als auch der Projektleitung fehlt es dann oft an Einsicht in die Notwendigkeit des Refactoring.
▲___zum Seitenanfang

Begriffsabgrenzung

Refactoring sollte nicht mit der mathematischen Faktorisierung der Polynome verwechselt werden. Eine Parallele lässt sich damit jedoch herstellen:
Wenn ein Programm aus einer Menge von Faktoren besteht, dann ist es faktorisiert. Ändert man dieses Programm, nimmt etwas weg oder fügt etwas hinzu, dann wird die ursprüngliche Faktorisierung verändert bzw. gestört. Um das Programm wieder verständlicher bzw. lesbarer und strukturierter zu machen, sollte man es refaktorisieren. ▲___zum Seitenanfang

Siehe auch

Lesenswertes zu Refactorings


  1. Artikel Refactoring In: Wikipedia, Die freie Enzyklopädie (in Deutsch).

◄== zurück zur Übersichtsseite