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.