Wie gehe ich mit Refactoring um, das länger als ein Sprint dauert?

49

Ich arbeite mit einer Codebasis, die mehr als 500 KB Codezeilen umfasst. Es muss dringend umgestaltet werden. Es wurden Refactoring-Bemühungen identifiziert, die länger dauern als der normale zweiwöchige Sprint. Diese können nicht in kleinere Aufgaben unterteilt werden, wie ich in anderen Antworten auf dieser Site gesehen habe. Das Produkt muss am Ende der Iteration funktionieren, und eine teilweise Umgestaltung wird das System in einem unbrauchbaren Zustand belassen, da die Abhängigkeit zwischen den Elementen schrecklich ist. Was wäre der beste Weg, um diese Hürde zu nehmen? Ich erwähne noch einmal, dass es keine Option ist, es in kleinere Teile zu zerlegen, was bereits geschehen ist.

Update: Die Leute brauchen anscheinend eine Erklärung, warum dies nicht in einen zweiwöchigen Sprint passt. Ein Sprint beinhaltet mehr als nur das Schreiben von Code. Wir haben keine Richtlinie ohne Tests. Diese Richtlinie existierte nicht immer und ein großer Teil der Codebasis hat sie nicht. Auch einige unserer Integrationstests sind noch manuelle Tests. Das Problem ist nicht, dass das Refactoring selbst so groß ist. Kleine Änderungen wirken sich auf viele Teile des Systems aus, und wir müssen sicherstellen, dass diese Teile weiterhin ordnungsgemäß funktionieren.

Wir können einen Sprint nicht verschieben oder verlängern, da wir monatliche Hotfixes haben. Daher kann diese Änderung, die sich über einen Sprint hinaus erstreckt, nicht verhindern, dass die andere Arbeit dem Hotfix hinzugefügt wird.

Refactoring vs Redesign: Nur weil unser Entwicklungsprozess nicht effizient genug ist, um dieses Refactoring in einem zweiwöchigen Zyklus durchzuführen, ist eine Umbenennung in Redesign nicht erforderlich. Ich würde gerne glauben, dass wir in Zukunft genau dieselbe Aufgabe in einem zweiwöchigen Zyklus erledigen können, wenn sich unser Prozess verbessert. Der fragliche Code musste sich in sehr langer Zeit nicht ändern und ist ziemlich stabil. Jetzt, da die Richtung des Unternehmens anpassungsfähiger wird, möchten wir, dass dieser Teil der Codebasis genauso anpassungsfähig ist wie der Rest. Welches erfordert Refactoring. Anhand der hier gegebenen Antworten wird deutlich, dass ein Gerüst fehlt, um dieses Refactoring im Zeitrahmen normaler Sprints durchführen zu können.

Antworten:

Ich werde den Branch-and-Merge-Ansatz ausführen, den Corbin March zum ersten Mal vorgeschlagen hat, damit wir mehr über diese Problembereiche erfahren und die fehlenden Tests identifizieren können. Ich denke, wir sollten in Zukunft den Ansatz verfolgen, den Buhb vorgeschlagen hat, die Bereiche zu identifizieren, in denen Tests fehlen, und diese zuerst implementieren und dann das Refactoring durchführen. Dies ermöglicht es uns, unseren normalen zweiwöchigen Sprintzyklus beizubehalten, so wie es viele hier gesagt haben, sollte dies beim Refactoring immer der Fall sein.

Charles Lambert
quelle
23
Als Randnotiz ist dies per Definition eine groß angelegte Neugestaltung, keine Umgestaltung . Ich hoffe, Sie nehmen das nicht als Trottel - IMHO ist es wichtig, eine klare Terminologie zu verwenden, um Kommunikationsprobleme zu vermeiden :-)
Péter Török
9
@Charles, "Refactoring wird normalerweise in kleinen Schritten durchgeführt. Nach jedem kleinen Schritt verbleibt ein funktionell unverändertes Arbeitssystem. " Zitiert von der Seite, die ich oben verlinkt habe.
Péter Török
2
@Charles: Refactoring kann immer schrittweise durchgeführt werden, während das System weiterhin funktioniert. Fügen Sie einen großen Kommentar "Refactoring in Bearbeitung" oben in die Klasse / das Paket / das Modul ein, die / das überarbeitet werden soll, und führen Sie die Teile nacheinander aus. Wenn Sie eine Zwischenfreigabe schneiden, während sich das Objektmodell im Übergang befindet, ist das in Ordnung.
Sean McMillan
7
Wenn Sie so große Schritte ausführen, dass Sie nicht regelmäßig über einen funktionierenden Code verfügen, ist dies genau die Definition dafür, wann das Refactoring zu einem Redesign wird. Bitte ärgern Sie sich nicht über Leute, die Sie wegen Ihres Missbrauchs des Wortes angerufen haben. Es ist nichts Falsches daran, nach einem Redesign zu fragen. Die Kommentatoren versuchen lediglich anzuzeigen, dass Sie nicht die gewünschten Antworten erhalten, weil Sie das Wort missbrauchen, was bereits geschehen ist.
Jprete
5
Ich weiß, dass das Thema ein bisschen verfremdet ist, aber Sie haben mich neugierig gemacht, was die Umstände sind, die eine Umgestaltung in kleinen Schritten unmöglich machen. Bitte teilen Sie uns diesbezüglich weitere Hintergründe mit.
Buhb

Antworten:

14

Wenn Sie den Luxus haben, das Refactoring zu verzögern, empfehle ich, die nächsten Iterationen auf das Hinzufügen von Komponententests und automatisierten Integrationstests zu konzentrieren, bis Sie die Codebasis bequem refactoren und dann in einem Sprint refactoren können.

Buhb
quelle
68

Mein Vorschlag:

  1. Erstellen Sie eine Niederlassung
  2. Täglich vom Trunk in Ihre Filiale einbinden und Konflikte lösen.
  3. Arbeite bis es fertig ist. Ihre Niederlassung befindet sich möglicherweise außerhalb der Kernentwicklung für mehrere Sprints.
  4. Gehen Sie zurück zum Kofferraum.

An der Tatsache, dass es wahrscheinlich hässlich wird, führt kein Weg vorbei. Ich beneide dich nicht. Wenn Sie ein Projekt drastisch ändern, ist es meiner Erfahrung nach einfacher, die fortlaufende Entwicklung in das neue Paradigma einzubeziehen, als das neue Paradigma irgendwie in einen jetzt geänderten Stamm einzubinden, nachdem alles abgeschlossen ist. Trotzdem wird es weh tun.

Corbin March
quelle
1
Wir haben über diesen Ansatz gesprochen, und wenn keine anderen Ideen auftauchen, bevor wir ihn in Angriff nehmen, ist dies das, was wir vorhaben.
Charles Lambert
3
Ich befürchte, Sie werden viel Aufwand haben, der zwischen Stamm und Zweig hin und her verschmilzt, wenn Sie eine so gründliche Umgestaltung durchführen möchten.
Giorgio
In den meisten Fällen (hoffentlich) wirken sich diese zusammengeführten Änderungen nicht auf den fraglichen Code aus. Es würde mir nichts ausmachen, den Zeitplan für diese Änderung zu verlängern, wenn dies ein zuverlässiges Ergebnis gewährleisten würde.
Charles Lambert
1
In Anbetracht der Volatilität, die Ihre Präsentation nahe legt, sollten Sie vielleicht Git in Betracht ziehen , da dies diese Art von spekulativem Verzweigen und Zusammenführen erleichtert.
John Tobler
1
@Giorgio: Ich auch, die tägliche Zusammenführung scheint ein bisschen paranoid zu sein, aber dann kommt es wirklich auf die Teamgröße an. Je mehr Leute, desto mehr Änderungen und desto häufiger sollten Sie fusionieren. Täglich scheint die unterste Grenze zu sein, wenn Sie Zeit zur Arbeit haben möchten.
Matthieu M.
40

Nicht jede Aufgabe kann in einem (künstlichen) zweiwöchigen Sprint erledigt werden, daher ist gesunder Menschenverstand gefragt. Wenn es nicht mehr abgebaut werden kann und es getan werden muss, steigen Sie einfach ein und tun Sie es. Der Prozess ist nicht wichtiger als das Endergebnis und sollte eher als Richtlinie als als ein Gesetz angesehen werden, das niemals gebrochen werden darf.

Chris Card
quelle
3
Ihre Antwort sind sehr gute Informationen zum Thema. Ich bin hier, um "loszulegen und es zu tun", wie Sie sagen. Ich habe die Frage in der Hoffnung gestellt, Informationen zu erhalten, damit ich entweder einen Prozess entwickeln kann, der parallel zu meinem vorhandenen Prozess abläuft, oder den aktuellen Prozess irgendwie modifizieren kann, um meine aktuelle Situation zu lösen. Ich muss den Entwicklern etwas mitteilen, damit sie Richtlinien haben, innerhalb derer sie arbeiten können, da dies mindestens zwei weitere Male geschehen wird.
Charles Lambert
+1 für "Der Prozess ist nicht wichtiger als das Endergebnis und sollte eher als Richtlinie als als ein Gesetz angesehen werden, das niemals gebrochen werden darf." - Die Leute scheinen das wirklich zu vergessen.
Bjarke Freund-Hansen
32

Führe einfach einen Sprint von 3, 4 oder 5 Wochen durch. Wen interessiert das? Sie sind offensichtlich davon überzeugt, dass in kürzerer Zeit nichts getan werden kann. Hören Sie also auf, dagegen anzukämpfen.

Erzählen Sie Ihren Kollegen von der Royal Society of Blind Agile Adherance nichts.

JeffO
quelle
Aus organisatorischen Gründen (monatliche Hotfixes) scheinen 2-Wochen-Sprints ziemlich schwer zu ändern zu sein.
Steve Bennett
10

Ich empfehle, mit dem Buch Working Effectively with Legacy Code von Michael Feathers zu beginnen. Er behandelt eine Vielzahl von Techniken, um den Umfang von Änderungen des Refactoring-Stils zu verringern.

kdgregory
quelle
Ein gutes Buch, aber ich glaube nicht, dass es das Aufteilen von Refactoring auf mehrere Sprints abdeckt.
Adam Lear
4
Ich gebe hier +1, weil es wahrscheinlich das beste Buch ist, mit dem Sie anfangen zu lernen, wie der Titel sagt, effektiv mit Legacy-Code zu arbeiten. Es ist relevant für jemanden, der diese Frage stellt und nicht versteht, was damit zusammenhängt, Dinge in kleinere Schritte zu unterteilen.
Charles Lambert
@Anna - dann möchten Sie vielleicht Kapitel 25 (erneut) lesen, in dem es um Techniken geht, mit denen sich die Arten von Kupplungen lösen lassen, die kleine Änderungen verhindern.
kdgregory
@ kdgregory Fair genug. :) Stört es dich, das zu deiner Antwort hinzuzufügen, um sie noch besser zu machen?
Adam Lear
7

Wenn wir in unserem Shop umfangreiche Refactoring- oder Rewriting-Aufgaben haben, die nicht in einem Release-Fenster ausgeführt werden können, belassen wir die Funktionalität im System wie sie ist. Wir beginnen jedoch mit den neuen, überarbeiteten Legoblock-Funktionen, wenn es die Zeit erlaubt. Schließlich erreichen wir einen Zustand, in dem genügend Legoblöcke erstellt wurden, sodass ein Sprint genügend Zeit bietet, um die Legoblöcke in die Anwendung einzustecken und für die Benutzer einzuschalten.

Genauer gesagt, teilen wir große Funktionen unter Verwendung neuer Namen auf oder überarbeiten sie. Am Ende verwenden wir dann unser umbenanntes, überarbeitetes Werk anstelle des fiesen alten Codes.

Amy Anuszewski
quelle
Dies ist eine gute Idee, aber es würde ein hohes Maß an Kommunikation erfordern, um sie umzusetzen. Wenn ich zum Beispiel beim Codieren eine Methode identifiziere, die nirgendwo verwendet wird und die nicht öffentlich ist, werde ich sie entfernen.
Charles Lambert
5

Setzen Sie einen Sprint ein, um herauszufinden, wie der Code während des Refactors ordnungsgemäß funktioniert. Dies kann die Form von veralteten Methoden und Klassen, Wrappern, Adaptern und dergleichen annehmen. Ihr Refactoring kann den Code für kurze Zeit schmutziger machen, um langfristig sauberer zu sein. das ist okay. Im Moment sagst du, dass es nicht geht. Ich halte das nicht für richtig - überlegen Sie, wie Ihr Prozess aussehen würde, wenn er durchgeführt werden könnte , und welche Schritte Sie unternehmen können, um dies zu erreichen. Dann tauch ein.

Carl Manaster
quelle
Das alles haben wir schon getan. Aus diesem Grund habe ich klar zum Ausdruck gebracht, dass es nicht abgebaut werden kann.
Charles Lambert
"Ja wirklich?" Sie haben einen ganzen Sprint damit verbracht, einfach zu planen, wie Sie eine Umstrukturierung durchführen können, ohne Ihr System zu beschädigen, und haben nichts gefunden? Es fällt mir schwer zu glauben, dass ein engagierter Planungssprint nichts hervorgebracht hat. Vielleicht müssen Sie einen Berater hinzuziehen (und nein, ich bin keiner und versuche nicht, einen Auftritt zu bekommen).
Carl Manaster
1
Ich sagte nichts dergleichen. Ich sagte, wir haben einen Prozess durchlaufen, der dem ähnlich ist, den Sie beschrieben haben, und sind am anderen Ende mit einem Code herausgekommen, der nicht in einem einzigen Sprint überarbeitet werden kann.
Charles Lambert
Ich sagte: "Setzen Sie einen Sprint ein, um herauszufinden, wie der Code auch während des Refactors ordnungsgemäß funktioniert." Sie sagten: "Wir haben das alles bereits getan." Sagst du jetzt etwas anderes? Es tut mir leid, wenn das umstritten klingt, aber ich verstehe nicht.
Carl Manaster
5

+1 auf die Antwort von Corbin March, genau das habe ich mir gedacht. Es hört sich so an, als ob Ihre Codebasis ein bisschen hässlich ist und es mehr als einen einzelnen Sprintzyklus braucht, um sie zu bereinigen.
So wie Corbin sagte:

  1. verzweige es in ein "Refactoring-Projekt"
  2. Testen Sie Ihren Branchenwechsel
  3. Bewerben Sie sich in Ihrer Testumgebung für QS-Tests
  4. Führen Sie es schrittweise wieder in den Kofferraum ein, bis das Refactoring abgeschlossen ist.

Ich bin mir sicher, dass Sie keine Probleme haben werden, dies an Ihren Entwickler-Manager zu verkaufen. Wenn es Ihren PMs schwer fällt, es zu sehen, dann erklären Sie ihnen, dass Rom nicht an einem Tag gebaut wurde und räumen Sie den Müll auf, der in Roms Müll geworfen wurde Straßen werden auch nicht an einem Tag fertig sein. Das Refactoring wird eine Weile dauern, aber es lohnt sich im Endeffekt in Bezug auf eine einfachere Wartung, schnellere Erweiterungsversionen, weniger Produktionstickets und ein besser erfülltes SLA.

bkdraper
quelle
1
Ich habe alle Munition, die ich brauche, um alle dazu zu überreden. Ich brauche nur einen offiziellen Ausführungsplan, wenn ich ihn vorlege. Aus den Antworten hier habe ich keinen Zweifel, dass ich eine wiederholbare Lösung finden werde.
Charles Lambert
4

Obwohl die Neugestaltung, die Sie wirklich durchführen möchten, eine große Aufgabe ist, wäre es möglich, kleinere Teile umzugestalten, um einzelne Abhängigkeiten zu lösen oder zu entkoppeln? Sie wissen, wenn Sie Zweifel haben, fügen Sie Indirektion hinzu. Jede dieser Entkopplungen sollte eine kleinere Aufgabe sein als die Mammutaufgabe, die Sie nicht ausführen können.

Sobald die Abhängigkeiten entfernt sind, sollten Sie in der Lage sein, die verbleibenden Refactoring-Aufgaben aufzulösen, die innerhalb von Sprints verfügbar sein sollen.

Matthew Flynn
quelle
3

In dem Projekt, für das ich gerade arbeite, verwenden wir 4-wöchige Sprints. Und manchmal können wir eine User Story nicht beenden und starten sie im folgenden Sprint neu.

Allerdings sollte es meiner Meinung nach möglich sein, ein Refactoring in kleinere Storys aufzuteilen, die in einen 4-wöchigen Sprint passen. Wenn Sie den Code nicht innerhalb von 4 Wochen in einen konsistenten Zustand versetzen können, habe ich das Gefühl, dass Sie Ihre Anwendung umschreiben, anstatt sie umzugestalten.

Giorgio
quelle
Ein 4-wöchiger Sprint sollte es abdecken. Wir können die aktuellen 2-wöchigen Sprints jedoch nicht aufgrund anderer Fehlerbehebungen usw. stoppen. Dies müsste sich also über mehr als einen Sprint erstrecken. Das ist der Kern meines Problems.
Charles Lambert
Wie ich bereits sagte, verwenden wir 4-Wochen-Sprints. Wenn eine Story nicht in 4 Wochen fertig ist, planen wir sie einfach für den nächsten Sprint. Können Sie das System am Ende eines zweiwöchigen Sprints zumindest in einem konsistenten Zustand halten (und dann während des folgenden Sprints fortfahren)?
Giorgio
Kein überprüfbarer konsistenter Zustand.
Charles Lambert
Ich muss meine Welle zu den Anstrengungen hinzufügen, die andere unternommen haben, um zu hoffen, dass Sie ein anderes Wort finden, anstatt "refactoring". Refactoring ist klar definiert, und sein Umfang ist viel unmittelbarer und kurzfristiger als das massive und zeitaufwändige Umgestalten und Neuprogrammieren, das Sie durchführen müssen.
John Tobler
2

Ich empfehle, dass bestimmte Aufgaben, die länger als der zweiwöchige Sprintzyklus dauern, für ein anderes Mal ausgeführt werden. Ihr Team hat festgestellt, dass eine Umgestaltung erforderlich ist, und das ist wichtig. Manchmal gibt es keine andere Möglichkeit ... und ja, das ist scheiße.

Wenn die Zeit gekommen ist, um mit dem Refactoring zu beginnen, werden Sie einfach die normalen Sprints aussetzen. Du hast keine Wahl. Verwenden Sie die intelligente Versionskontrolle - Verzweigen, Umgestalten, Testen, Zusammenführen. Es gibt immer einen Zeitpunkt, an dem das Refactoring einiger großer Projekte Vorrang vor Features hat. Nach Möglichkeit würde ich auch versuchen, die Bedenken für eine bessere Flexibilität zu trennen.

IAbstrakt
quelle
Wir können es nicht für immer aufschieben, und Ihre Antwort bezieht sich nicht auf die Durchführung des Refactorings.
Charles Lambert
@ Charles: "Für ein anderes Mal geplant." ;) Ich habe nicht gesagt, das Projekt abzubrechen.
IAbstrakter
2

Nachdem ich kürzlich dasselbe Problem mit einem Teil unserer Codebasis (die auch etwas größer ist) durchgearbeitet habe, hoffe ich, dass ich ein paar Einblicke mit Ihnen teilen kann. In meiner Situation wurde die Codebasis von einem anderen Team entwickelt, sodass niemand von den ursprünglichen Entwicklern an diesem Refactoring beteiligt war. Meine Erfahrung mit der Codebasis betrug ungefähr 1 Jahr, und ein anderer Entwickler hatte 2 Jahre damit zu tun.

Gestatten Sie mir zwei kleine Anmerkungen zu den anderen Antworten:

  • Das Verzweigen hilft Ihnen dabei, einen Spielplatz für sich selbst einzurichten, aber führen Sie niemals Ihre Änderungen am Stamm in einem großen Änderungssatz zusammen. Sie werden ernsthafte Probleme mit dem Rest des Teams bekommen.
  • Sie müssen es schrittweise tun, und es kann getan werden. Keine Ausreden. Lesen Sie das Thema Effizientes Arbeiten mit Legacy-Code von Anfang bis Ende. Lies es nochmals.
  • Zu glauben, man könne es schaffen, ist ein Trugschluss. Obwohl es mehr Arbeit zu sein scheint, ist es viel einfacher, es schrittweise zu erledigen.

Es wird nicht unbemerkt bleiben, wenn Sie zwei Wochen oder länger nicht reserviert sind. Sie müssen sicherstellen, dass Sie vom Projektmanagement und vor allem vom Team unterstützt werden. Wenn sich das Team nicht für dieses Refactoring engagiert (und dies bedeutet, tun Sie es jetzt, nicht in ferner Zukunft), werden Sie in Schwierigkeiten geraten.

Mach es nicht alleine, benutze die Paarprogrammierung. Dies bedeutet nicht unbedingt, dass Sie die ganze Zeit vor derselben Tastatur sitzen müssen, sondern dass Sie kleine und enge Aufgaben (z. B. Schreibtests, die das Verhalten dieser Klasse erfassen) einzeln ausführen können.

Führen Sie ein Scratch Refactoring durch und behandeln Sie es als solches. (Eine Art "Wegwerf" -Prototyp-Refactoring, das "Wegwerf" -Bit ist wichtig!) Ehrlich gesagt ist es unwahrscheinlich, dass Sie alle Auswirkungen Ihres Refactorings kennen. Ein Scratch Refactoring hilft Ihnen in gewisser Hinsicht:

  • Sie werden Teile des Systems entdecken, von denen Sie nie gewusst haben, dass sie existieren.
  • Sie haben einen viel besseren Überblick darüber, wie Module miteinander verbunden sind
  • Sie werden eine neue Art der Gruppierung Ihres Systems in Module entdecken, die sich wahrscheinlich stark von Ihrem derzeitigen Verständnis unterscheidet. Besprechen Sie die Erkenntnisse mit Ihrem Partner. Versuchen Sie, Ihre neue Sicht zu destillieren. Schreiben Sie ein kurzes Architektur-Whitepaper (oder zeichnen Sie ein Diagramm), in dem steht, wo sich die Dinge gerade befinden und wo sie logisch zusammengehören sollten.

Wenn Sie Ihr Scratch Refactoring abgeschlossen haben, werden Sie hoffentlich feststellen, dass Sie nicht einfach alles ändern können. Sie werden sich schlecht fühlen, es ist nur ein großes, fettes Durcheinander und Sie können nicht einfach einen Schalter umlegen und dafür sorgen, dass es funktioniert. Dies ist, was mir passiert ist, es könnte in Ihrer Situation anders sein.

Mein Partner und ich hatten jedoch ein viel besseres Verständnis für unser System. Nun konnten wir einzelne, kleinere (wenn auch noch große) Umgestaltungen identifizieren. Wir haben unsere Vision des Systems in einem Diagramm festgehalten und sie mit dem Team geteilt, zusammen mit den Rückständen, die wir zur Umsetzung dieser Vision entwickelt haben. Gestützt auf einen gemeinsamen Konsens haben wir entschieden, welche Elemente wir im Verlauf der nächsten Iteration implementieren werden.

Eine letzte Sache, die uns geholfen hat, war die Verwendung eines großen Whiteboards. Es gibt zu viele Dinge, um sie im Kopf zu behalten. Es ist äußerst wichtig, dass Sie Notizen machen. Schreiben Sie sich am Ende des Tages eine Kurznotiz, in der Sie festhalten, was Sie heute getan haben und morgen tun möchten. Es hilft, große Zeiten zu entspannen, und Sie brauchen eine entspannte Zeit, wenn Sie mit der Aufgabe Schritt halten möchten. Viel Glück!

Johannes Rudolph
quelle
1

Starten Sie ein Wartungsfenster, in dem keine weitere Entwicklung durchgeführt wird. Führen Sie das Redesign durch und setzen Sie dann die Entwicklungs-Sprints fort.

Christopher Mahan
quelle
0

Wir haben zwei Arten von Arbeiten zur Hand:

  1. Mannstundenarbeiten
  2. Genie funktioniert

Refactoring besteht in der Regel aus der ersten Art von Arbeit, da viele Methoden bekannt sind , bereits für Entwickler wie DRY , SRP , OCP , DI usw. Wenn also ein Projekt , um zwei Monate dauern Refactoring werden, es einfach zwei Monate in Anspruch nimmt , gibt es kein weg daran vorbei. Daher würde ich vorschlagen, das ursprüngliche Projekt nicht umzugestalten und an der aktuellen Situation arbeiten zu lassen. Hören Sie auf, neue Anfragen und Anforderungen von Interessengruppen und Produktbesitzern zu erhalten . Lassen Sie dann das Team an dem Projekt arbeiten, bis es überarbeitet und einsatzbereit ist.

Saeed Neamati
quelle
0

Ein Vorschlag, der möglicherweise Abhilfe schafft: Wenn Sie nicht genügend Zeit haben, um den Code zu überarbeiten und innerhalb des zweiwöchigen Sprints erneut zu testen, sollten Sie zunächst einige andere kleine Änderungen am Code vornehmen, damit Sie sich konzentrieren können beim Schreiben von Tests für den ersten oder den zweiten Sprint. Möglicherweise können Sie mehrere nicht getestete Clients des Codes identifizieren, den Sie umgestalten möchten. Wählen Sie einen Kunden aus, und nehmen Sie einige andere Änderungen vor, die Sie dazu zwingen, Tests für diesen Kunden zu schreiben. Sobald Sie mit dem Code aus der Arbeit vertraut sind, mehr Tests durchgeführt haben und möglicherweise ein paar kleinere Umgestaltungen vorgenommen haben, sind Sie in einer viel besseren Position, um das Umgestalten und das (jetzt einfachere) Verfahren durchzuführen ) beide in einer Iteration testen.

Ein weiterer Ansatz besteht darin, eine Kopie des fehlerhaften Codes zu erstellen, ihn umzugestalten und die Clients nacheinander in den neuen Code zu verschieben. Diese Arbeit kann über Iterationen aufgeteilt werden.

Und nicht aufgeben: Akzeptieren Sie nicht, dass ein großes Refactoring nicht in kleinere Schritte zerlegt werden kann. Der einfachste / schnellste / beste Ansatz kann länger dauern als eine Iteration. Das bedeutet jedoch nicht, dass es keine Möglichkeit gibt, iterationsgroße Chunks zu erstellen.

Jeff Grigg
quelle