Frage

Sagen Sie, dass Sie ein Programm haben, das derzeit so funktioniert wie es soll.Die Anwendung hat eine sehr schlechte dahinter, frisst viel Speicher, ist unbezwingbar und major rewriting eventuelle änderungen in der Funktionalität.

An welchem Punkt hört die Umgestaltung weniger logische insgesamt dann wieder aufzubauen?

War es hilfreich?

Lösung

Joel schrieb eine schöne Abhandlung über dieses Thema:

Dinge, Die Sie Sollten Nie Tun, Teil 1

Die wichtigste Lektion, die ich von diesen ist, dass, obwohl der alte code ist schrecklich, das tut weh, Ihre Augen und Ihren Sinn für ästhetik, es ist eine ziemlich gute chance, dass eine Menge des Codes ist das patchen nicht dokumentierte Fehler und Probleme.Ie., es hat eine Menge von domain-wissen eingebettet ist, und es wird schwierig oder unmöglich, Sie zu replizieren.Sie werden ständig schlagen gegen Fehler der Unterlassung.

Ein Buch fand ich sehr nützlich ist Arbeiten Effektiv Mit Legacy Code von Michael C.Federn.Es bietet Strategien und Methoden für die Annäherung auch wirklich hässlich ist legacy-code.

Andere Tipps

Einer der Vorteile von refactoring über den Wiederaufbau ist, dass, WENN Sie tun können, refactoring Schritt für Schritt, d.h.in Schritten, können Sie Sie testen Stufen im Kontext des gesamten Systems, was die Entwicklung und das Debuggen schneller.

Alte und bereitgestellt code, auch als hässlich und langsam ist, hat den Vorteil, dass wurde gründlich getestet, und dieser Vorteil geht verloren, wenn Sie von vorne beginnen.

Ein inkrementelles refactoring-Ansatz hat auch hilft, um sicherzustellen, dass es immer ein Produkt, die versendet werden können (und es verbessert sich ständig).

Es gibt einen schönen Artikel über das Internet über wie Netscape 6 wurde von Grund auf neu geschrieben und es war business-Weise eine schlechte Idee.

Nun, die einfachste Antwort ist, wenn es länger dauert, umgestalten, als es neu zu erstellen, dann sollten Sie einfach neu erstellen.

Wenn es ein persönliches Projekt, dann möchten Sie vielleicht, um es wieder aufzubauen ohnehin als wahrscheinlich werden Sie lernen, mehr aus dem Gebäude von Grund auf, als würden Sie von refactoring, und das ist ein großes Ziel, persönliche Projekte.

Jedoch, in eine professionelle Zeit-begrenzte Umgebung ist, sollten Sie gehen immer mit dem, was Kosten, die dem Unternehmen die geringste Menge an Geld (für die gleiche Auszahlung) in die lange laufen, was bedeutet zu wählen, je nachdem, was weniger Zeit in Anspruch nimmt.

Natürlich kann es ein wenig komplizierter als das.Wenn andere Menschen können arbeiten, während die refactoring durchgeführt wird, dann könnte eine bessere Wahl sein über die jeder, warten für eine vollständig neue version gebaut werden.In diesem Fall wird der Wiederaufbau dauern könnte weniger Zeit als nur die Umgestaltung genommen hätte, aber Sie brauchen, um das gesamte Projekt und alle Mitwirkenden des Projekts berücksichtigt.

Wenn Sie mehr Zeit verbringen, Umgestaltung, als das eigentliche schreiben von code.

An der Stelle, wo die software nicht tut, was es tun soll.Refactoring (ändern Sie den code ohne änderung der Funktion) macht Sinn, wenn und nur wenn die Funktionalität "wie geplant".

Wenn Sie sich leisten können, die Zeit, um vollständig den Wiederaufbau der app, don nicht brauchen, um die Funktionalität zu verbessern inkrementell, und nicht möchten, bewahren Sie den vorhandenen code dann umschreiben ist sicherlich eine sinnvolle alternative.Sie können, auf der anderen Seite, verwenden Sie das refactoring, um eine inkrementelle umschreiben von langsam ersetzen die vorhandenen Funktionen mit gleichwertigen Funktionen, die sind besser geschrieben, und mehr effiziente.

Wenn die Anwendung sehr klein ist, dann können Sie neu zu schreiben.Wenn die Anwendung groß ist, es nie tun.Schreiben Sie schrittweise, Schritt für Schritt in einer Zeit, überprüfen Sie nicht etwas zu brechen.

Die Anwendung ist die Spezifikation.Wenn Ihr neu zu schreiben, werden Sie höchstwahrscheinlich in vielen heimtückische Fehler, weil "niemand wusste, dass der Aufruf dieser Funktion sollte die Rückkehr 3 in diesem sehr speziellen Fall" (undokumentierte Verhalten...).

Es macht immer mehr Spaß zu umschreiben von vorne, so dass Ihr Gehirn möglicherweise trick Sie in das denken, es ist die richtige Wahl.Seien Sie vorsichtig, es ist wahrscheinlich nicht.

Ich habe mit solchen Anwendungen in der Vergangenheit.Der beste Ansatz, den ich gefunden habe ist eine allmähliche:Wenn Sie auf den code finden Sie die Dinge, die getan werden mehrere mal, gruppieren Sie Sie in Funktionen.Halten Sie ein notebook (Sie wissen, ein echtes, mit Papier und einem Bleistift oder Stift), so dass Sie markieren Sie Ihre Fortschritte.Verwenden Sie, dass Sie in Kombination mit Ihrem VCS, nicht statt.Das notebook kann verwendet werden, um einen überblick über die neuen Funktionen, die Sie erstellt haben, als Teil der Umgestaltung, und die VCS-natürlich füllt die Lücken für die details.

Im Laufe der Zeit, werden Sie zusammengefasst haben eine Menge code in besser geeignete Orte.Code-Duplizierung während dieser Zeit wird unmöglich, so tun Sie es einfach, so gut wie Sie können, bis Sie einen Punkt erreicht haben, wo Sie können wirklich starten Sie die refactoring-Prozess, die Prüfung der gesamten code-Basis und arbeiten auf es als ganzes.

Wenn Sie haben nicht genügend Zeit für diesen Prozess (der wird nehmen eine sehr lange Zeit), dann umschreiben von Grund auf, mit einem test-first-Ansatz ist wahrscheinlich besser.

Onkel Bob wiegt mit der folgenden:

Wann ist ein redesign der richtigen Strategie?

Ich bin froh, dass du diese Frage gestellt.Hier ist die Antwort. Nie.

Schauen Sie aus dem Chaos, jetzt sauber es up.

Eine option wäre, zu schreiben unit-tests abdecken der bestehenden Anwendung und starten Sie umgestalten, es Stück für Stück, mit Hilfe der unit-tests, um sicherzustellen, dass alles funktioniert wie vorher.

In einer idealen Welt würden Sie bereits unit-tests für das Programm, aber Ihre Kommentare über die Qualität der app ich vermute, dass Sie nicht...

Kein Dokument, kein original writer, keinen test, mit dem Fall, und ein paar der verbleibenden bugs.

Ich hatte nicht viel Glück mit kleine inkrementelle änderungen, wenn der code, den ich Erben ist wirklich schlecht.In der Theorie der kleinen, inkrementellen Ansatz klingt gut, aber in der Praxis alle die es endet mit eine bessere, aber immer noch schlecht gestaltete Anwendung, dass jeder denkt, jetzt ist IHR design.Wenn die Dinge brechen, die Menschen nicht mehr denken, es ist, weil der Vorherige code, es wird jetzt in IHRER Schuld.Also, ich würde nicht das Wort umgestalten, umgestalten oder irgendetwas anderes, das impliziert, dass Sie ein manager-Typ dass Sie ändern die Dinge auf Ihre Weise, es sei denn, ich war wirklich zu tun, es auf meine Weise.Ansonsten, selbst wenn Sie nicht behoben haben Dutzende von Problemen, alle Probleme, die noch vorhanden (aber nicht entdeckt) werden jetzt zu zugerechnet werden Ihre Nacharbeit.Und seien Sie versichert, dass, wenn der code schlecht ist dann Ihr fixes entdecken Sie viel mehr bugs, die wurden einfach ignoriert worden, weil der code wurde so schlimm, um mit zu beginnen.

Wenn Sie wirklich wissen, wie Sie software entwickeln, Systeme, dann würde ich tun, eine Neugestaltung des gesamten Systems.Wenn Sie nicht WIRKLICH wissen, wie zu design GUT-software dann würd ich sagen, bleiben Sie bei dem kleine, inkrementelle änderungen, da Sie ansonsten am Ende mit einer code-Basis, die genauso schlimm ist wie das original.

Ein Fehler, der oft gemacht bei der Neugestaltung ist, dass die Menschen zu ignorieren, die ursprünglichen code-Basis.Allerdings Neugestaltung nicht bedeuten, Total ignorieren Sie den alten code.Der alte code immer noch zu tun hatte, was Ihre neuen code zu tun hat, so dass in vielen Fällen die Schritte, die Sie benötigen, sind bereits in den alt-code.Kopieren Sie und Fügen Sie dann zwicken wirkt Wunder bei der Neugestaltung von Systemen.Ich habe gefunden, dass in vielen Fällen die Neugestaltung von und schreiben auf eine Anwendung und stehlen Ausschnitte aus dem original-code ist viel schneller und sehr viel zuverlässiger als kleine, inkrementelle änderungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top