Wo ich arbeite, muss ich oft in einem alten System (.NET 1) entwickeln (und Fehler beheben), dessen Code vollständige Spaghetti sind - ohne Rücksicht auf Variablennamen, Programmstruktur oder Kommentare.
Aus diesem Grund brauche ich Ewigkeiten, um zu verstehen, welche Bits geändert werden müssen, und ich "kaputt" oft die vorhandene Software, weil ich eine Änderung vorgenommen habe. Ich möchte wirklich wirklich ein paar Monate (mit Kollegen) damit verbringen, es zu überarbeiten, aber bestehende Entwickler können die Notwendigkeit nicht erkennen - und denken auch nicht, dass dafür Zeit ist (das System ist riesig).
Ich fürchte, ich muss an seinem Code arbeiten, da es Tage dauert, um etwas zu reparieren, nur um herauszufinden, dass ich etwas anderes kaputt gemacht habe. Das lässt mich offensichtlich inkompetent aussehen - wie kann ich damit umgehen?
quelle
Antworten:
Schreiben Sie Tests für die Teile, an denen Sie arbeiten. Sie können einen Workflow ausprobieren, der ungefähr so aussieht:
Wenn Sie Ihre Tests nicht wegwerfen, werden Sie im Laufe der Zeit eine Testsuite erstellen, die die wichtigsten (und / oder flüchtigen) Teile der Anwendung abdecken sollte, und Änderungen daran werden einfacher und sicherer.
Möglicherweise ist es auch hilfreich, effektiv mit Legacy-Code von Michael Feathers zu arbeiten.
quelle
Ich mag folgen Uncle Bob Martin ‚s Boy Scout - Regel :
"Wenn Sie ein großes, unordentliches Vermächtnis haben, müssen Sie nur ... aufhören, die Unordnung zu machen und sie aufzuräumen.
Dies bedeutet nicht, dass Sie Ihre Manager in einen Konferenzraum rufen und ihnen mitteilen, dass Sie in den nächsten drei Monaten keine Funktionen bereitstellen werden, während Sie den Code überarbeiten. Mach das nicht! Es bedeutet vielmehr, dass Sie die „Pfadfinder-Regel“ übernehmen und jedes Modul etwas sauberer prüfen als beim Auschecken.
Von Iteration zu Iteration und von Release zu Release werden Sie dieses System bereinigen und ihm weiterhin neue Features und Funktionen hinzufügen. Es geht nicht anders."
quelle
Sie können dem Manager erklären, dass Korrekturen, die Stunden dauern sollten, aufgrund der Unordnung in der Codebasis Tage dauern. Die anderen Entwickler sehen keine Notwendigkeit für ein Refactoring, wenn sie die ursprünglichen Entwickler sind - sie kennen das System in- und auswendig, aber das Management sollte wissen, dass dort ein Risiko besteht, wenn diese Entwickler jemals gehen und ihr Wissen mitnehmen.
Ein vollständiges Refactoring ist normalerweise nicht möglich. Daher wird häufig ein kleines Refactoring gleichzeitig durchgeführt - ein paar Methoden oder ein Modul. Wenn es mehrere Tage dauert, um eine Lösung zu finden, können Sie möglicherweise gleichzeitig ein kleines Refactoring des problematischen Moduls einfügen.
quelle
Müssen Sie wirklich Monate damit verbringen, den Code zu überarbeiten? Oder können Sie den Code überarbeiten, während Sie Änderungen vornehmen? Wenn Sie beispielsweise feststellen, dass die Foo-Methode geändert werden muss, können Sie die Gelegenheit nutzen, die Foo-Methode umzugestalten. Und wenn Sie ein Dutzend anderer Methoden durchlaufen müssen, um herauszufinden, dass Foo das Problem ist, können Sie Kommentare in diesen Methoden hinterlassen, damit Sie oder jemand anderes in Zukunft weiß, was der Code tun soll. Das bedeutet natürlich, dass es immer noch einen Stapel Spaghetti-Code gibt, aber Sie können zumindest die Codebasis in die richtige Richtung bewegen und es sich später leichter machen. Es wird ein großer Verkauf sein, mehrere Monate Zeit zu haben, um Code umzugestalten, da dies bedeutet, dass Sie während der gesamten Zeit nichts liefern, was der Endbenutzer möchte.
Wenn Sie Unit-Tests erstellen (oder hoffentlich die vorhandene Testsuite erweitern), ist es weniger wahrscheinlich, dass Sie versehentlich etwas kaputt machen.
quelle
Ein weiterer Tipp. Wenn sich die Insekten manifestieren und nach dem Anlegen des Verbandes nicht aufhören!
Fragen Sie die fünf Gründe, nehmen Sie die rote Pille und sehen Sie, wie tief das Kaninchenloch ist, und beheben Sie die Grundursache (und den Weg dort unten).
Sie lernen viel über das System. Es hilft bei der Priorisierung, was repariert und umgestaltet werden soll. Und nach ein paar solchen Fahrten haben Sie einige solide "Stützbalken", um den monolithischen Haufen Spaghetti zu stärken.
quelle
Sie können auch alten Code beibehalten, bis Sie absolut sicher sind, dass Ihre Änderungen schalldicht sind. Nur wenn alle Ihre Änderungen vorliegen, können Sie sie zur Laufzeit umschalten und schnell den Ort eines neuen Regressionsfehlers bestimmen:
quelle
Eine Sache:
Never change any existing code if you are not sure what effect change would have on complete application.
quelle