6 Stimmen

Führen Sie Refactoring in kleinen Schritten durch?

Nachdem ich Fowlers "Refactoring" eine Weile gelesen habe, ertappe ich mich immer noch oft dabei, dass ich denke: "Ich hätte das in kleineren Schritten machen sollen." -- auch wenn ich meinen Code nicht kaputt gemacht habe.

Refactoring in kleinen Schritten ist sicher, kostet aber Zeit. Es ist ein Kompromiss zwischen Geschwindigkeit und Risiko - ich versuche, die Art und Weise, wie ich refaktorisiere, strategisch zu wählen.

Dennoch: Die meiste Zeit mache ich Refactorings in größeren Schritten. Wenn ich einen Teil von Fowlers "Mechanics"-Abschnitt nehme und vergleiche, wie ich arbeite, stelle ich vielleicht fest, dass ich oft zwei oder fünf Schritte auf einmal vorwärts springe. Das heißt nicht, dass ich ein Refactoring-Guru bin. Mein Code bleibt vielleicht 5 bis 60 Minuten lang kaputt oder unkompilierbar.

Führen Sie Refactoring in kleineren Schritten durch und versuchen Sie, unversehrten Code in kürzeren Abständen zu produzieren? Und: Sind Sie dabei erfolgreich?

7voto

mmcdole Punkte 88559

Martin Fowler scheint dem Ansatz des kleinen, schrittweisen Refactorings zugeneigt zu sein. Nach der Lektüre seines Buches macht er jedoch gelegentlich einige drastische Schritte, aber nur mit Unit-Tests zur Absicherung des Codes.

Refactoring ist eine kontrollierte Technik zur Verbesserung des Designs einer bestehenden Codebasis. Im Wesentlichen handelt es sich dabei um eine Reihe von kleinen verhaltenserhaltenden Transformationen, von denen jede "zu klein ist, um sich zu lohnen". Der kumulative Effekt jeder dieser Transformationen ist jedoch ziemlich signifikant. Indem man sie in kleinen Schritten durchführt, verringert man das Risiko, Fehler einzuführen. Außerdem vermeiden Sie, dass das System während der Umstrukturierung kaputt geht - so können Sie ein System über einen längeren Zeitraum hinweg schrittweise umstrukturieren. - Martin Fowler

4voto

Dave Ray Punkte 38948

Ich versuche es :) Der Drang, dem ich beim Refactoring am meisten widerstehen muss, ist, währenddessen andere Änderungen vorzunehmen. Angenommen, ich überarbeite einen Code und entdecke etwas Unzusammenhängendes im Code. Ich muss mich bewusst bemühen, das nicht auch noch zu "reparieren". Ich notiere es und mache weiter. Zum einen lenkt es von der eigentlichen Aufgabe ab. Es verschmutzt auch Ihren Änderungssatz, so dass Ihre Commit-Nachricht nun mehrere scheinbar zufällige Änderungen dokumentieren muss.

3voto

krosenvold Punkte 73093

Ja, immer. Ich denke, das Wesentliche beim Refactoring ist die Auswahl der Schritte, mit denen man beginnt.

Ich finde, das Wichtigste beim Refactoring großer Änderungen ist immer, dass man eine einigermaßen klare Vorstellung davon hat, wo man hin will. Dann betrachten Sie Ihr bestehendes System und versuchen Sie herauszufinden, welche Teile Sie einführen können, bei denen die Wahrscheinlichkeit einer radikalen Änderung am geringsten ist. Dann können Sie diese kontrolliert und gut getestet einführen.

Sie müssen also in der Nähe der Unannehmlichkeiten arbeiten. Man greift nicht immer direkt von vorne an, sondern hackt manchmal nur kleine Stücke ab. Normalerweise warte ich und greife den "großen Preis" erst nach ein paar Runden an, in denen ich kleinere Gemeinheiten weggehackt habe. Aber ich weiß donde Ich möchte gehen.

Das Schöne an dieser Arbeitsweise ist, dass man den Fortschritt beibehalten kann. Man muss nie die Entwicklung unterbrechen, um ein Refactoring durchzuführen". Es gibt wohl Fälle, in denen das Anhalten die richtige Situation ist, aber die meiste Zeit ist das nicht der Fall.

Der Gedanke dahinter ist, dass man, wenn man mit dem Einlösen des Preisgeldes "anfängt", die nächsten X Tage mit der Schufterei verbringt. Und es besteht das Risiko, dass du kneifst oder es nicht klappt - oder du verbringst 6 Monate statt einer Woche. Wenn Sie sich zuerst um die Plackerei kümmern, können Sie den Preis mit weniger Risiko einkassieren. Und Ihr Code wird sich im Laufe der Zeit verbessern. Manchmal reicht es aus, die Hälfte der Arbeit zu erledigen, weil man das Problem besser versteht. Manchmal war Ihre Vorstellung davon, wo Sie hinwollten, ein wenig verpfuscht, und Sie können Ihr Ziel neu ausrichten, während Sie vorankommen.

Aber die Versuchung ist groß, direkt auf die Belohnung zu warten.

1voto

Otávio Décio Punkte 72052

Ich neige dazu, die meiste Zeit in großen Schritten zu refaktorisieren, damit ich den Wald vor lauter Bäumen sehen kann. Es ist eine Art "Bewusstseinsstrom" der Programmierung. Solange Sie Ihre letzte Arbeitsversion sicher in der Quellcodeverwaltung Ihrer Wahl haben...

0voto

Hier ist der "Rot-Grün-Refactor"-Ansatz nützlich. In jeder Phase können Sie überprüfen, ob das Verhalten Ihres Codes unverändert ist, und das Refactoring muss nur das neue Verhalten integrieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X