Gibt es einen Punkt, an dem die Kosten für das Refactoring die Kosten für das Neuschreiben übersteigen?

8

Wir haben einen wirklich schockierenden Code, der als Rahmen für die nächste Generation an meinem derzeitigen Arbeitsplatz angepriesen wird.

Tatsache ist, es gibt nur eine Person dieser Meinung und das ist der Typ, der das meiste geschrieben hat. Der Rest der Abteilung hat den Eindruck, dass es schlecht codiert ist, ein Pita zum Debuggen und nur ein bisschen Nack im Allgemeinen.

Der Typ, der es geschrieben hat, hat eine ziemlich einflussreiche Position beim Management, also sind sie auf dieser Seite des Lagers.

Wir haben dem Management (echte) Bedenken aufgezeigt, aber offensichtlich sind sie nicht bereit, mehr Zeit in ein Projekt zu investieren, das nicht direkt zum Endergebnis beiträgt.

In diesem Framework sind mehrere Anwendungen implementiert, so dass jedes Refactoring diese Anwendungen umfassen muss.

Das Ganze ist so ineinander verschlungen, dass wir nicht einfach eine Implementierung einer bestimmten Klasse herausreißen und sie so umschreiben können, dass selbst einfache Änderungen an Core API ein großes Projekt bedeuten.

Es hat jedoch 3 Jahre Live-Bereitstellung und viele Bugfixes, Eckfälle und Randbedingungen sind vorgesehen.

Schreiben wir Teile neu und versuchen, das zu reformieren, da es sich um mehrere große Projekte handelt, die mit der Zeit umgestaltet werden, was wahrscheinlich noch weitere drei Jahre dauern wird, um sie in Form zu bringen, oder schreiben wir einfach unsere spezifischen Anforderungen neu eines bestehenden Frameworks?

    
Mike 23.02.2009, 10:01
quelle

6 Antworten

5

Etwas umzuschreiben ist fast immer eine schlechte Idee - du verbringst Monate damit, bis du fertig bist. Und das setzt voraus, dass Sie nicht dem Second-System-Effekt anheim fallen und dass Sie tatsächlich beenden.

Refactoring ist mit ziemlicher Sicherheit die richtige Antwort. Ich habe keine Erfahrung mit PHP-Refactoring (ich mache C ++ und C #), daher kann ich keinen konkreten Rat geben. Sie müssen mit kleinen Schritten fortfahren.

  • Identifizieren Sie zuerst die Teile des Codes, die Sie am meisten beleidigen. Für mich in C ++ sind dies globale Variablen.
  • Zweitens, machen Sie kleine Refactorings, um jeweils ein Problem zu entfernen. Um zu vermeiden, dass ältere Clients dieses Codes beschädigt werden, müssen Sie möglicherweise eine Fassade einfügen. Entweder Sie können dem alten Code eine neue Fassade hinzufügen, oder Sie können dem neuen Code eine alte Fassade hinzufügen.
  • Drittens und am wichtigsten, wenn Sie nicht wirklich überzeugt sind, stellen Sie sicher, dass Sie eine solide Reihe von Komponententests für den Code haben, den Sie umgestalten möchten.

Aber: Lass nicht alles fallen, um den Code neu zu schreiben. Refactor allmählich. Es wird dich ein wenig verlangsamen, aber du wirst immer noch Wert liefern, während du mitgehst.

Siehe diesen Artikel , der Ihnen helfen wird Erklären Sie Ihrem Management die technischen Schulden. Es wird auch erklären, warum sie sich nicht darum kümmern.

    
Roger Lipscombe 23.02.2009, 10:12
quelle
1

Der Vorteil des Neuschreibens besteht darin, dass Sie alle neuen Elemente in der Analysephase berücksichtigen und ein Modell erstellen können, das besser an die aktuellen Anforderungen angepasst ist. Auf der anderen Seite, wenn es nur schlecht codiert, nicht schlecht entworfen, hat es keinen Sinn, komplett neu zu schreiben. Säubern Sie einfach den Code / refactor.

    
vartec 23.02.2009 11:00
quelle
0

das ist eine wirklich schwierige Entscheidung zu treffen ...

Das Problem, das ich hier sehe, ist, dass das Framework für eine lange Zeit benutzt und repariert wird, so dass viel Wissen darin steckt und die Qualität für die laufenden Projekte offensichtlich akzeptabel ist. Wenn Sie es also von Grund auf neu schreiben, mit all den Anforderungen, die Sie kennen, können Sie sicher sein, dass Sie etwas vergessen werden, was bereits funktioniert hat (schwer, das einem Kunden oder Ihrem Chef zu erklären;))

es zu refaktorisieren - es ist auch eine schwierige Aufgabe, da es nur einen gibt, der wirklich die Zusammenhänge innerhalb des Codes kennt - wer will das nicht ändern ...

gibt es drei Optionen:

  • lebe damit
  • überzeuge den Typen, dass Refactoring benötigt wird, damit jeder es nicht nur benutzen / pflegen kann
  • Überzeugen Sie das Management, dass eine Neufassung erforderlich ist, aber dies wird denjenigen, der gegen eine Neufassung / Umgestaltung ist, wirklich verärgern

Wie auch immer Sie es formulieren - es ist eine schlechte Situation für alle ... denn mit der Zeit wird derjenige, der für den Rahmen verantwortlich ist, selbst damit fertig werden müssen und dann ist es wahrscheinlich zu spät.

    
Gambrinus 23.02.2009 10:15
quelle
0

Auf einer kleinen Ebene, ja: Stellen Sie eine neue Version einer Funktion bereit, vergewissern Sie sich, dass sie sowohl mit dem neuen als auch mit dem alten funktioniert, entfernen Sie das alte. Das ist oft genug schneller als das Refactoring der Funktion selbst. Aber auf dieser Ebene ist es Refactoring:)

Die strategischen Kosten eines Neuschreibens übersteigen praktisch immer das Refactoring.

Sie können nicht liefern. Sie müssen die alte Version beibehalten, während Sie die neue entwickeln. Wenn die Finanzen sagen, dass Sie das Neuschreibprojekt abbrechen müssen, haben Sie nichts erreicht - Ihre Arbeitscode-Basis ist in einem schlechten Zustand, als ob nichts jemals getan wurde. Vermutlich sogar noch schlimmer, da alle Änderungen blockiert waren, weil "wir das wegwerfen werden, wenn das Neuschreiben sowieso beendet ist".

Ja Szenarien, in denen das Neuschreiben billiger ist, können konstruiert werden:

  • Die ursprüngliche Codebasis ist so spaghettiert, dass jede lokale Änderung scheinbar nicht verwandte Merkmale unterbricht.
  • Sie haben ein wirklich tolles neues Team, viel besser als die alten Kerle, aber sie haben keine Erfahrung mit der existierenden Codebasis, und die existierende Codebasis ist ein Durcheinander, oder in einer Sprache, die sie nicht kennen, oder so so wie das.

Dennoch zeigt die Erfahrung, dass Code aus einem bestimmten Grund schlecht ist, und es sind nicht immer die Codierer, und wenn Sie die Ursachen nicht identifizieren und ändern, wird das Neuschreiben eine Übung in der Wiederholung der Geschichte sein.

    
peterchen 23.02.2009 11:23
quelle
0

Das Umschreiben ist sehr riskant. Sie ersetzen alten gut debugged Code mit neuem Code, der noch debuggt werden soll. Dies führt zu einer ganzen Reihe von Fehlern und Sie müssen sie beheben. Es ist besser, nach und nach zu refactorieren - zuerst zu verstehen, was ein Teil ist, und dann neu zu gestalten. Auf diese Weise ersetzen Sie weniger Code und senken das Risiko, zu viele neue Bugs einzuführen.

    
sharptooth 23.02.2009 11:24
quelle
0

Um zu dem zu ergänzen, was bereits gesagt wurde: Versuche Management Buy-In zu bekommen. sind Vorteile für das Endergebnis beim Umgestalten - die Arbeitsstunden für das Programmieren neuer Funktionen werden im Laufe der Zeit und nicht mehr nach oben gehen, was zu geringeren Lohnkosten und möglicherweise auch Serverkosten führt. Wenn Ihr Management nicht versteht, warum Refactoring sich lohnt und Sie glücklicher machen wird, arbeiten Sie am richtigen Ort?

    
mozboz 23.02.2009 15:26
quelle

Tags und Links