Es gibt verschiedene Probleme, die sich vermischen und das Refactoring in dieser Umgebung zu einer Herausforderung machen. Darin gemischt sind einige nicht-technische Probleme ("aber das ist ein Managementproblem und ein Kampf, den ich noch nicht gewonnen habe").
Das erste Problem ist der lang laufende Zweig. Diese Zweige haben Schwierigkeiten, Änderungen außerhalb der Sicht des Entwicklers zu verfolgen. Um das zu erwähnen:
- Wenn der Code vollständig ist, versuchen Sie es noch einmal (lassen Sie den Kundensupport ihn sich ansehen, wenn er dies wünscht), führen Sie ihn jedoch schnell in die Entwicklung ein, damit andere Änderungen, die davon abhängen, erkannt werden und Änderungen, die Konflikte verursachen, frühzeitig erkannt werden in dem Prozess.
- Wenn ein Brach während des Refactorings aus irgendeinem Grund eine lange Lebensdauer hat, ist es in der Regel eine gute Praxis, aus dem Stable in den Zweig einzugliedern, um Änderungen und Refactoring zu übernehmen. Dies minimiert häufig Konflikte und Überraschungen beim Zusammenführen vom Feature-Zweig in den stabilen Zweig.
- Alle Integrationstests müssen für Releases durchgeführt werden - nicht für Features . In dieser Umgebung können Funktionen vollständig in das System integriert sein oder nicht. Es ist zwar möglich, die Funktion isoliert auf Fehler zu überprüfen, es werden jedoch keine Probleme bei der Veröffentlichung festgestellt.
- Vom Zeitpunkt der Code-Vervollständigung bis zur Zusammenführung (nennen wir es Entwicklung - Verzweigung von Master / Stable / Release hat seine eigenen Probleme, die neuesten Entwicklungsänderungen nicht zu übernehmen) sollte nicht zu lang sein. Je länger Sie warten, desto mehr Wissen geht verloren und desto schwerer kann der Code in andere Codezeilen integriert werden.
Ein weiteres Problem, das sich in dieses Problem mischt, ist das, auf das ich mit den obigen Punkten angespielt habe, die sich im Laufe der Zeit ändernde Rolle der Branche. Es beginnt als Entwicklungszweig, in dem sich Entwickler engagieren, und wird dann zu einem Testbereich (welche Tests werden hier durchgeführt, die für die gesamte Anwendung von Bedeutung sein können?), Der dann zu Stable zusammengeführt (und vermutlich veröffentlicht wird - oder?) Wird erneut getestet?).
Mit einer kürzeren Start-zu-Ende-Zeit des Features ist es für das Refactoring einfacher, von anderen Filialen abgeholt zu werden.
Ermutigen Sie Entwickler, die gesamte Umgebung zu nutzen. Nur das Auswählen von Änderungen kann zu ... sagen wir interessanten Entwicklerumgebungen führen. Während das Kirschpflücken seine Verwendung hat, kann es beunruhigend sein, Änderungen in einen Zweig zu ziehen.
Refactoring wird im Idealfall ständig durchgeführt, oder, wenn nicht immer, immer dann, wenn es zu einem gewissen Grad an Ausfallzeiten kommt. Verzweigen Sie, führen Sie ein einfaches Refactoring durch, führen Sie die Unit-Tests durch, um sicherzustellen, dass alles noch funktioniert (die Unit wurde getestet, richtig? Richtig? ), Und führen Sie sie dann wieder zu Stable zusammen. Geben Sie die Informationen an andere Entwickler weiter, um die von Ihnen überarbeiteten Änderungen in ihre eigenen Zweige zu übernehmen.
Für Entwickler ist es wichtig, die Qualität des Codes zu besitzen. Während die Richtung der Features von außen kommt und die Zeitzuweisungen oft nicht unsere eigene sind, ist Codequalität etwas, auf das man stolz sein und sich Zeit nehmen muss.
Bei der Suche nach Zeit für den Umgang mit technischen Schulden können die folgenden Fragen hilfreich sein:
Möglicherweise möchten Sie sich auch Tools wie Sonar ansehen, mit denen Sie die Bereiche des Codes identifizieren können, die für das Refactoring die meiste Arbeit erfordern. Das Plugin für technische Schulden kann verwendet werden, um auf die Ansammlung von Schulden im Laufe der Zeit in der Codebasis hinzuweisen.
Oft muss darauf hingewiesen werden, dass der ROI für den Umgang mit technischen Schulden eine schnellere Bearbeitungszeit für Features und Fehlerbehebungen des Entwicklungsteams darstellt.