Angesichts eines kleinen Projekts, das darauf abzielt, der Anwendung neue Funktionen hinzuzufügen, berühren die eingeführten Änderungen vorhandenen Code, wobei diese in bestimmten Bereichen aktualisiert werden. Während der Implementierung habe ich festgestellt, dass einige dieser Codes, die aktualisiert wurden, Kandidaten für das Refactoring haben.
Ist dies ein angemessener Zeitpunkt für eine Umgestaltung, für die wiederum Regressionstests für die betroffenen Komponenten erforderlich wären (wodurch möglicherweise ein Umfang eingeführt wird, der ursprünglich nicht Teil des Projekts war)? Oder sollte ich die Funktionalität verschieben, vervollständigen und möglicherweise ein separates Projekt für das Refactoring haben (obwohl ich etwas zögerlich bin, da Geschäftsbenutzer ein Projekt, das keine Funktionalität hinzufügt, möglicherweise nicht vollständig sponsern, es sei denn, sie legen Wert auf die Wartbarkeit des Codes ...)?
quelle
Antworten:
Absolut.
Refactoring sollte für ein funktionierendes und "passierendes" Projekt durchgeführt werden. Wenn alle Ihre Tests (auf Geräte-, System- und Akzeptanzstufe) bestanden sind, wissen Sie, dass Ihr Produkt die Anforderungen erfüllt. Wenn Sie den Refactor durchführen, können Sie weiterhin bestätigen, dass alle Tests weiterhin bestanden werden. Wenn ein Test fehlschlägt, haben Sie etwas falsch gemacht und müssen es korrigieren. Wenn Sie fehlgeschlagene Tests haben, sollten Sie diese vor dem Refactoring korrigieren, damit Sie immer sicherstellen können, dass Ihr Refactoring die Funktionalität des Systems nicht verändert.
Dies ist auch ein perfekter Zeitpunkt für das Refactoring, vorausgesetzt, Sie haben die Zeit und die Ressourcen, um das Refactoring durchzuführen und dennoch pünktlich und budgetgerecht zu liefern. Durch das Refactoring wird es einfacher, Ihr System zu verstehen und zu warten. Wenn Sie also noch mehr neue Funktionen hinzufügen, wird es einfacher. Sie müssen gegen Code Rot und Software-Entropie kämpfen .
Wie Joel Etherton in den Kommentaren hervorhebt , müssen Sie den Umfang des Refactorings verwalten. Konzentrieren Sie sich auf das Refactoring der Teile des Systems, denen Sie in Kürze Features hinzufügen werden, und führen Sie Refactorings durch, die das Arbeiten mit oder das Hinzufügen der neuen Features erleichtern. Mithilfe von statischen Analysen, Metriktools und Codeüberprüfungen können Sie Bereiche identifizieren, die am kritischsten sind. Sie möchten keine Fristen verpassen, weil Sie das Refactoring durchgeführt haben - Sie müssen dem Kunden weiterhin einen Mehrwert bieten.
Sie erwähnen, dass der Kunde beim Refactoring keinen Wert sieht. In der Regel kümmert sich der Kunde nicht um die Qualität des Codes, sondern um das Produkt. Refactoring erleichtert es Ihnen, eine hohe Produktqualität aufrechtzuerhalten und weiterhin ein Produkt zu liefern, das den sich ändernden Anforderungen des Kunden entspricht. Versuchen Sie, die Zeit für das Refactoring in Ihren Zeitplan aufzunehmen (der Kunde möchte X-Funktionen in Y-Tagen, versuchen Sie festzustellen, ob Sie keine Y + Z-Tage oder XN-Features erhalten, damit Sie Zeit für Design, Refactoring und Implementierung aufwenden können), wenn Sie dies möchten können.
quelle
Erwägen Sie die Beantwortung der folgenden Fragen, dann fällt es Ihnen leicht, die Entscheidung zu treffen. Die Weisheit "Repariere es nicht, wenn es nicht kaputt ist" ist verlockend, gilt aber nicht immer für die professionelle Arbeit.
0-Gibt es eine Kundenbeschwerde über diesen Code?
1-Ist dies für die Funktionalität der Anwendung erforderlich?
2-Ist der aktuelle Code schädlich?
3-Lohnen sich die Kosten für Änderungen?
4-Könnten Sie sich die Kosten leisten?
5-Ist dies die beste Nutzung Ihrer Fähigkeiten für die Organisation?
6-Würden Ihre Änderungen erfordern, dass Ihr Benutzer die neue Änderung erneut installiert - Könnten Sie dies gegenüber dem Kunden rechtfertigen?
7-Könnten Sie das Risiko einer schlechten Lösung tolerieren?
8-Wirkt sich die Änderung auf anderen Code außerhalb Ihres Projekts aus?
9-Ist dies ein sich entwickelndes Produkt oder ein stabiles Produkt? Wenn es sich weiterentwickelt, könnten Sie die Änderungen in die nächste Version aufnehmen?
quelle
Refactor bald, Refactor oft.
Wenn Sie es sich leisten können (Zeit, Geld usw.), sollten Sie es tun.
Ich sage dies, weil Ihnen manchmal die Zeit ausgeht oder Sie sagen, dass Sie kein Geld für eine Code-Wartungsintervention erhalten oder Ihr Projekt so schnell wie möglich abschließen möchten, und im Allgemeinen, weil das Refactoring Ressourcen benötigt. Abgesehen davon ist es immer ein guter Zeitpunkt für das Refactoring.
Sie möchten einen aktuellen Code, und wenn Sie der Meinung sind, dass Ihr Code tatsächlich einige Änderungen benötigt, insbesondere wenn Sie neue Funktionen hinzufügen, sollten Sie ihn ändern.
Vergessen Sie nicht, dass Sie mit einem Versionskontrollsystem Ihr Projekt tatsächlich in einen neuen Zweig einteilen können, sodass Sie Ihren aktuellen Code überhaupt nicht beeinflussen.
quelle
Wenn das Refactoring zur Implementierung der neuen Funktionalität benötigt wird, sollte es im Rahmen der neuen Entwicklung durchgeführt und berücksichtigt werden.
Das Duplizieren von Code kostet Sie (sowohl Sie persönlich als auch das Unternehmen) auf lange Sicht mehr, da Änderungen an einem Ort und nicht an einem anderen vorgenommen werden.
Sie benötigen eine Reihe von Tests - entweder automatisierte Komponententests oder Regressionstests, die Sie ausführen können, um zu beweisen, dass Sie keine Probleme mit der vorhandenen Funktionalität eingeführt haben.
Wenn das Refactoring nur ein "nice to do" ist - dh es befindet sich nicht in Code, der direkt von der neuen Funktionalität betroffen ist, dann würde ich es in Ruhe lassen. Sie führen eine Änderung ein, um sie zu ändern.
quelle
Es klingt so, als würde das Umgestalten des Codes das Hinzufügen der neuen Funktionen erleichtern. Das ist die Theorie. Nehmen Sie dies in den Umfang der neuen Funktionen auf. Auf diese Weise erhalten Sie eher ein Buy-In von Geschäftsbenutzern. In diesem Fall sollten Sie in der Lage sein, zwingende Argumente vorzubringen und die Zeit für das Refactoring zu rechtfertigen. Hoffentlich werden sie verstehen, dass dies ein notwendiger Teil des Entwicklungsprozesses ist und weniger Einwände hat. Möglicherweise können Sie diesen direkten Nutzen nicht immer nachweisen.
quelle