Was können Sie zu einem Legacy-Code-Basis tun, die den größten Einfluss auf die Verbesserung der Qualität haben wird?

StackOverflow https://stackoverflow.com/questions/146936

  •  02-07-2019
  •  | 
  •  

Frage

Wie Sie in einer Legacy-Code-Basis arbeiten, was die größte Wirkung im Laufe der Zeit haben wird, die die Qualität der Code-Basis verbessern?

  • Entfernen Sie nicht verwendeten Code
  • Entfernen duplizierten Code
  • Fügen Sie Unit-Tests Testabdeckung zu verbessern, wo Abdeckung niedrig ist
  • Erstellen Sie eine konsistente Formatierung über Dateien
  • Update 3rd-Party-Software
  • erzeugt reduzieren Warnungen durch statische Analyse-Tools (i.e.Findbugs)

Die Code-Basis wurde mit unterschiedlichen Know-how über viele Jahre von vielen Entwicklern geschrieben, mit vielen Bereichen nicht getestet und einige untestable ohne eine erhebliche Zeit auf dem Schreiben von Tests zu verbringen.

War es hilfreich?

Lösung

Dies ist ein großartiges Buch.

Wenn Sie nicht wie die Antwort, dann der beste Rat den ich geben kann wäre:

  • Erstens aufhören, neue Legacy-Code [1]

[1]: Legacy Code = Code ohne Komponententests und somit eine unbekannte

Ändern Legacy-Code ohne eine automatisierte Testreihe an seinem Platz ist gefährlich und unverantwortlich. Ohne gute Einheit Testabdeckung, können Sie nicht wissen, was wirken sich diese Änderungen haben werden. Federn empfehlen einen „Würgegriff“ Ansatz, bei dem Sie Codebereiche isolieren Sie ändern müssen, einige grundlegenden Tests schreiben grundlegende Annahmen zu überprüfen, kleine Änderungen von Unit-Tests gesichert machen, und arbeiten von dort aus.

Hinweis: Ich sage nicht, dass Sie alles anhalten müssen und verbringen Wochen Tests für alles zu schreiben. Ganz im Gegenteil, gerade testen Sie rund um die Bereiche, die Sie brauchen, um zu testen und von dort zu trainieren.

Jimmy Bogard und Ray Houston haben eine interessante Bildschirm Besetzung zu einem Thema sehr ähnlich wie diese: http: // www .lostechies.com / blogs / jimmy_bogard / Archiv / 2008/05/06 / pablotv-Beseitigung-static-Abhängigkeiten-screencast.aspx

Andere Tipps

Ich arbeite mit einer Legacy-1M LOC Anwendung, die von etwa 50 Programmierern geschrieben und geändert werden.

* Remove unused code

Fast nutzlos ... einfach ignorieren. Sie erhalten nicht einen großen Return On Investment (ROI) von diesem einen.

* Remove duplicated code

Eigentlich, wenn ich etwas reparieren ich nach doppelten immer suchen. Wenn ich einige gefunden habe ich eine generische Funktion oder kommentieren Sie alle Code Auftreten für die Vervielfältigung (irgendwann, der Aufwand für eine generische Funktion setzen nicht wert). Die Grundidee ist, dass ich hasse die gleiche Aktion mehr als einmal zu tun. Ein weiterer Grund ist, weil es ist immer jemand (könnte ich sein), dass vergisst für andere Vorkommen zu überprüfen ...

* Add unit tests to improve test coverage where coverage is low

Automatisierte Unit-Tests sind wunderbar ... aber wenn man einen großen Rückstand hat, sich die Aufgabe ist schwer zu fördern, wenn Sie Stabilitätsproblem haben. Gehen Sie mit dem Teil, den Sie gerade arbeiten und hoffen, dass in ein paar Jahren Sie anständige Abdeckung haben.

* Create consistent formatting across files

IMO der Unterschied in der Formatierung ist Teil des Vermächtnisses. Es gibt Ihnen einen Hinweis darüber, wer oder wenn der Code geschrieben wurde. Dies kann gab dir einen Hinweis darüber, wie in diesem Teil des Codes zu verhalten. Doing die Aufgabe der Neuformatierung, macht keinen Spaß und es macht keinen Wert für Ihre Kunden.

* Update 3rd party software

es nur tun, wenn es neue wirklich nettes Feature ist oder die Version, die Sie haben, sind nicht von dem neuen Betriebssystem nicht unterstützt.

* Reduce warnings generated by static analysis tools

Es kann es wert. Irgendwann Warnung einen potentiellen Fehler verbergen kann.

Fügen Sie Unit-Tests Testabdeckung zu verbessern. gute Testabdeckung zu haben ermöglicht es Ihnen, Funktionalität, ohne Angst, Refactoring und zu verbessern.

Es ist ein gutes Buch zu diesem Thema vom Autor CPPUnit geschrieben, Effektives Arbeiten mit Legacy Code .

Tests auf Legacy-Code Hinzufügen ist certianly schwieriger als sie von Grund auf neu erstellen. Das nützlichste Konzept, das ich genommen habe aus dem Buch entfernt ist der Begriff der „Nahtstellen“, die Federn definiert als

  

„ein Ort, an dem Sie das Verhalten in Ihrem Programm ohne Bearbeitung an diesem Ort verändern können.“

Manchmal ist es wert Refactoring Nähte zu schaffen, die zukünftige Tests einfacher machen (oder möglich in erster Linie). Die google Testen Blog hat einige interessante Beiträge zu diesem Thema, vor allem rund um den Prozess der Dependency Injection .

Ich würde sagen, ‚duplizierten Code entfernen‘ ziemlich viel bedeutet, dass Sie den Code ziehen und abstrakt, damit er an mehreren Stellen verwendet werden kann - dies in der Theorie, macht Fehler leichter zu beheben, weil Sie nur eine beheben haben Stück Code, wie viele Teile des Codes gegenüber, einen Fehler darin zu beheben.

kann ich auf diese Frage beziehen, wie ich zur Zeit in meinem Schoß eines ‚dieser‘ alten Schule Code-Basis haben. Es ist nicht wirklich Erbe aber seine sicherlich nicht den Trend der Jahre gefolgt.

Ich werde dir die Dinge sagen, ich würde gerne in ihm beheben, wie sie Fehler mich jeden Tag:

  • Dokumentieren Sie die Ein- und Ausgangsgrößen
  • Umgestalten die Variablennamen, so dass sie tatsächlich etwas andere und einige ungarische Notation Präfix durch eine Abkürzung aus drei Buchstaben mit einigen obskuren Bedeutung gefolgt bedeuten. CammelCase ist der Weg zu gehen.
  • Ich bin zu Tode erschrocken einen Code ändern, wie es Hunderte von Kunden, die die Software verwenden und jemand bemerken auch die dunkelste Nebenwirkung beeinflussen. Jegliche wiederholbar Regressionstests wären ein Segen sein, da gibt es null jetzt.

Der Rest ist wirklich Erdnüsse. Dies sind die Hauptprobleme mit einer Legacy-Code-Basis, sie fressen Unmengen Zeit wirklich.

Ich würde sagen, es hängt weitgehend davon ab, was Sie wollen mit dem Legacy-Code zu tun ...

Wenn es auf unbestimmte Zeit im Wartungsmodus bleiben und es funktioniert gut, nichts zu tun, überhaupt ist die beste Wahl. „Wenn es nicht kaputt ist, repariere es nicht.“

Wenn es nicht in Ordnung arbeiten, die nicht verwendeten Code zu entfernen und Refactoring den doppelten Code debuggen viel einfacher machen. Allerdings würde ich nur diese Änderungen auf dem irrende Code machen.

Wenn Sie auf Version 2.0 planen Unit-Tests hinzufügen und den Code bereinigen Sie nach vorne bringen

Eine gute Dokumentation. Als jemand, der Legacy-Code zu halten hat und zu erweitern, das ist das Problem Nummer eins. Es ist schwierig, wenn nicht gar gefährlich Code zu ändern, die Sie nicht verstehen. Selbst wenn Sie Glück haben, zu übergeben dokumentiert Code sein, wie sicher sind Sie, dass die Dokumentation ist richtig? Dass es deckt alle impliziten Wissen des ursprünglichen Autors? Dass es spricht alle „Tricks“ und Kanten Fällen?

Eine gute Dokumentation ist es, was die nicht unter den ursprünglichen Autor erlaubt sogar schlechten Code zu verstehen, zu beheben, und zu erweitern. Ich gehackt nehme noch gut dokumentierte Code, den ich über perfekt noch unergründlich Code verstehen können an jedem Tag der Woche.

Die größte Sache, die ich an den Legacy-Code gemacht, dass ich mit zu arbeiten haben, ist eine echte API um ihn herum zu bauen. Es ist ein 1970er Stil COBOL-API, die ich ein .NET-Objektmodell um aufgebaut haben, so dass alle unsicheren Code an einem Ort ist, die alle die Übersetzung zwischen der nativen Daten des API-Typen und .NET-Datentypen an einem Ort ist, der primäre Methoden geben und akzeptieren Datasets, und so weiter.

Das war ungeheuer schwierig richtig zu machen, und es gibt noch einige Mängel darin, die ich kenne. Es ist nicht terrifically effizient entweder mit dem ganzen Rangierung, die weitergeht. Aber auf der anderen Seite, kann ich eine Datagridview bauen, die Umläufe Daten zu einer 15-jährigen Anwendung, die ihre Daten in Btrieve bestehen bleibt (!) In etwa einem halben Stunde, und es funktioniert. Wenn Kunden mit Projekten zu mir kommen, sind meine Schätzungen in Tagen und Wochen statt in Monaten und Jahren.

Als Parallele zu dem, was Josh Segall sagte, würde ich sagen, die Hölle Kommentar aus ihm heraus. Ich habe auf mehrere sehr großen Legacy-Systemen gearbeitet, die in den Schoß geworfen hätten, und ich fand das größte Problem war die Verfolgung von dem, was ich bereits über einen bestimmten Abschnitt des Codes gelernt. Sobald ich platzieren Notizen begann, wie ich gehe, einschließlich Notizen „To Do“, hörte ich wieder, herauszufinden, was ich schon herausgefunden. Ich könnte dann darauf konzentrieren, wie diese Codesegmente fließen und in Wechselwirkung treten.

würde ich sagen, nur um es zum größten Teil in Ruhe lassen. Wenn es dann nicht kaputt ist repariere es nicht. Wenn es kaputt ist dann voran gehen und beheben und den Teil des Codes zu verbessern, die gebrochen ist und dessen unmittelbar umgebenden Code. Sie können den Schmerz des Fehlers verwenden oder schmerzlich fehlt Funktion, um den Aufwand zu verbessern, dass ein Teil zu rechtfertigen.

Ich würde jede Großhandel Art von Rewrite nicht empfehlen, Umgestalten, Formatieren oder in den Unit-Tests setzen, die nicht von tatsächlichen Unternehmen oder Endbenutzer Notwendigkeit geführt wird.

Wenn Sie tun, um die Gelegenheit bekommen, etwas zu beheben, dann machen Sie es richtig (die Chance, es gleich beim ersten Mal zu tun haben könnte bereits vergangen, aber da Sie diesen Teil wieder berühren könnten genauso gut machen es richtig Zeit um) und dies beinhaltet alle Elemente, die Sie erwähnt.

Also zusammenfassend, gibt es keine einzige oder nur ein paar Dinge, die Sie tun sollten. Sie sollten es alle, aber in kleinen Portionen und in opportunistischer Weise tun.

spät zur Party, aber das Folgende sein lohnt sich, wenn eine Funktion / Methode verwendet wird oder häufig verwiesen:

  • oft Lokale Variablen sind in der Regel schlecht in Legacy-Code genannt werden (oft aufgrund ihres Umfangs erweitert, wenn eine Methode geändert wird, und nicht aktualisiert werden, dies zu reflektieren). klären kann diese in Einklang mit ihrem eigentlichen Zweck Umbenennen hilft Legacy-Code.
  • Auch nur das Verfahren etwas anders Auslegen kann Wunder wirken -. Zum Beispiel alle Klauseln eines if auf einer Linie setzen
  • Es könnte sein, abgestanden / code verwirrend, sagt es bereits. Entfernen Sie sie, wenn sie nicht gebraucht werden, oder sie ändern, wenn Sie absolut zu haben. (Natürlich, ich bin nicht die Entfernung von nützlichen Kommentare befürworten, nur diejenigen, die ein Hindernis sind.)

Diese könnten nicht über die massive Schlagzeile Auswirkungen für Sie suchen, aber sie sind ein geringeres Risiko, vor allem, wenn der Code nicht Einheit getestet werden.

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