Frage

Ich habe gehört, viele Entwickler beziehen sich auf Code als „Legacy“. Die meiste Zeit ist es Code, der von jemandem geschrieben wurde, der nicht mehr an dem Projekt arbeitet. Was ist es, Code, Legacy-Code macht?

Update als Antwort auf: „Etwas reichte von einem Vorfahren oder einem Vorläufer oder aus der Vergangenheit“ http://www.thefreedictionary.com/legacy . Offenbar wollte man etwas anderes wissen. Könnten Sie Ihre Frage klären oder erweitern? S.Lott

Ich bin für die Symptome von Legacy-Code, der es unbrauchbar ist, oder ein Alptraum machen, mit zu arbeiten. Wann ist es besser, es wegzuwerfen? Es ist meine Meinung, dass Code häufiger und dass das Rad neu erfinden weg wertvoller Teil ist die Entwicklung geworfen werden sollte. Das akademische Ideal nicht das Rad neu zu erfinden, ist ein netter, aber es ist nicht sehr praktisch.

Auf der anderen Seite gibt es offensichtlich Legacy-Code Wert zu halten.

War es hilfreich?

Lösung

Durch die Verwendung von Hardware, Software, APIs, Sprachen, Technologien oder Funktionen, die entweder nicht mehr unterstützt werden oder werden abgelöst worden, in der Regel mit wenig kombiniert, um keine Möglichkeit, jemals diesen Code zu ersetzen, anstatt mit ihm, bis es oder dem System stirbt.

Andere Tipps

  

Was ist es, Code, Legacy-Code macht?

Wie bei Normal Vermächtnis, wenn der Autor tot oder vermisst, sie als Erben alle oder einige seiner Code erhalten.

Sie ein paar Tränen vergießen und versuchen, herauszufinden, was mit all dem Müll zu tun.

Michael Feathers hat eine interessante Definition in seinem Buch effektiv Arbeiten mit Legacy-Code. Nach ihm ist Legacy-Code-Code ohne automatisierte Tests.

Es ist ein sehr allgemein (und oft missbraucht Laufzeit), aber eine der folgenden würde legitime Gründe sein, um eine App Erbe zu nennen:

  1. Die Code-Basis auf einer Sprache / Plattform basiert, das vom Hersteller des Originalproduktes vollständig nicht unterstützt wird (oft gesagt Hersteller haben aus dem Geschäft gegangen).

  2. (wirklich 1a) Die Code-Basis oder Plattform, auf der sie gebaut ist, so alt ist, dass für das System qualifizierte oder erfahrene Entwickler bekommen beide hart und teuer ist.

  3. Die Anwendung unterstützt einen Aspekt des Unternehmens, die nicht mehr aktiv worden und für die Veränderungen sind äußerst selten, in der Regel, es zu beheben, wenn etwas völlig unerwartete Veränderungen um sie (das kanonische Beispiel das Y2K Problem ist) oder wenn einige Regulierung / externe Druckkräfte es. Da beiden Gründe dringendsten sind und in der Regel unvermeidbar, aber keine nennenswerten Entwicklungen auf dem Projekt aufgetreten ist es wahrscheinlich, dass diese Leute damit umgeht zugewiesen werden mit dem System nicht vertraut sein (und es Verhaltensweisen und Feinheiten aufsummiert). In diesen Fällen würde dies oft sein Grund der empfundene und geplant für das Risiko mit dem Projekt zu erhöhen.

  4. Das System hat / oder wird durch einen anderen ersetzt. Als solches System für viel weniger als ursprünglich vorgesehen verwendet werden kann, oder vielleicht nur als Mittel historische Daten betrachten.

Legacy-Regel bezieht sich auf Code, der wird nicht mehr weiterentwickelt - was bedeutet, dass, wenn Sie es verwenden, können Sie es auf seinen ursprünglichen Bedingungen verwenden - Sie können es nicht nur bearbeiten, um die Art und Weise zu unterstützen, die Welt heute aussieht. Zum Beispiel hat Legacy-Code auf Hardware laufen, die heute nicht mehr existieren kann - oder nicht mehr unterstützt

.

Laut Michael Feathers, der Autor des ausgezeichneten effektiv mit Legacy-Code , Legacy-Code ist ein Code, der keine Tests hat. Wenn es keine Möglichkeit zu wissen, was bricht, wenn dieser Code ändert.

  

Die Hauptsache Das unterscheidet   Legacy-Code aus Nicht-Legacy-Code ist   Tests oder vielmehr ein Mangel an Tests. Wir   kann ein Gefühl dafür mit etwas bekommen   Gedankenexperiment: Wie leicht wäre es   sein, um Ihre Code-Basis, wenn sie zu ändern   verkneifen kann, wenn es Ihnen sagen könnte   wenn Sie einen Fehler gemacht? Es wäre   ziemlich einfach, nicht wahr? Die meisten von den   beteiligt Angst Änderungen bei der Herstellung zu   große Code Basen sind die Angst vor   Einführen geringfügige Fehler; Angst vor   Ändern versehentlich Dinge. Mit   Tests, können Sie die Dinge besser machen mit   Straflosigkeit. Für mich ist der Unterschied so   kritisch, überwältigt es andere   Unterscheidung. Mit Tests können Sie machen   Dinge besser. Ohne sie einfach   weiß nicht, ob es wird immer   besser oder schlechter ist.

Ein Kollege hat mir einmal erzählt, dass Legacy-Code ist jeder Code, die Sie selbst nicht geschrieben hatten.

Argumentieren, es ist nur ein abwertender Begriff für Code, den wir aus irgendeinem Grunde nicht mehr wie (in der Regel, weil es nicht cool oder modern ist, aber es funktioniert).

Die TDD Brigade könnte darauf hindeuten, dass jeder Code ohne Tests Legacy-Code ist.

Legacycode ist Quellcode, der an einem nicht-mehr unterstützt oder hergestellt Betriebssystem betrifft oder andere Computer-Technologie.

Niemand würde diese Zeilen lesen, aber ich fühle mich die anderen Antworten nicht bekommt es ganz richtig:

  1. Es hat einen Wert, wenn es nicht sinnvoll wäre, würde es sich schon vor langer Zeit geworfen haben
  2. Es ist schwer zu argumentieren über, weil entweder von
    1. Mangel an Dokumentation,
    2. Original Autor kann nicht gefunden werden oder vergessen hat (ja 2 Monate später können Sie Ihre Code Legacy-Code sein, auch !!)
    3. Mangel an Tests oder Typisierung
    4. Folgt nicht modernen Praktiken (dh kein Zusammenhang auch zu halten)
  3. Es besteht ein Bedarf zu verändern oder zu erweitern. Wenn es nicht erforderlich, es zu ändern ist, ist es nicht Legacy-Code da niemand kümmert sich um sie. Es hat seine Sache und es gibt niemanden, um es zu nennen Legacy-Code.

http://en.wikipedia.org/wiki/Legacy_code

„Legacy-Code ist Quellcode, bezieht sich auf eine nicht-mehr unterstützt oder hergestellt“

Jeder Code mit Unterstützung (oder Dokumentation) fehlt. Sei es:

  • Inline-Kommentare
  • Technische Dokumentation
  • gesprochen Dokumentation (die Person, die es geschrieben)
  • Unit-Tests, die Funktionsweise des Codes zu dokumentieren

Für mich Legacy-Code ist Code, der vor einigen Paradigmenwechsel geschrieben wurde. Es kann noch sehr viel im Einsatz sein, aber es ist in dem Prozess Refactoring zu werden, um sie in Einklang zu bringen.
z.B. Alter prozeduralen Code rumhängen in einem ansonsten OO-System.

-Code (oder irgendetwas anderes, wirklich) wird „legacy“, wenn sie durch etwas ersetzt wurden neuere / bessere, und doch trotzdem ist es immer noch verwendet und am Leben gehalten „in the wild“.

Die Erhaltung Code Vermächtnis ist nicht so sehr eine akademische ideal, da es Code hält, dass, egal wie schlecht funktioniert. In vielen konservativen Unternehmen Situationen, das wäre praktischer betrachten, als es wegzuwerfen und beginnen wieder von vorne an. Besser der Teufel wissen Sie ...

Legacy-Code ist Code, der schmerzhaft / teuer ist aktuell zu halten mit den Anforderungen zu ändern.

Es gibt zwei Möglichkeiten, dass dies geschehen kann:

  1. Der Code ist nicht geeignet für den Wandel
  2. Die Semantik des Codes wurden auf Silizium
  3. ausgelagert

1) ist die einfachere der beiden zu erkennen. Es ist eine Software, die fundamentalen Grenzen hat so dass es nicht in der Lage mit dem Ökosystem um es zu halten. Zum Beispiel ein System gebaut rund O (n ^ 2) -Algorithmus wird über einen bestimmten Punkt nicht maßstäblich und muß neu geschrieben werden, wenn die Anforderungen in dieser Richtung bewegen. Ein weiteres Beispiel ist Code-Bibliotheken, die nicht auf den neuesten OS-Versionen unterstützt.

2) ist schwieriger zu erkennen, aber der gesamte Code dieser Art teilt die Eigenschaft, dass die Menschen haben Angst, es zu ändern. Dies könnte sein, weil es schlecht geschrieben wurde / dokumentiert zu beginnen, weil sie nicht getestet ist, oder weil es ist nicht trivial und die Original-Autoren, die verstanden es das Team verlassen.

Die ASCII / Unicode Zeichen, den Code lebende umfassen haben semantische Bedeutung, die „warum“, „was“ und zu einem gewissen Grad des „wie ist“, in den Köpfen der Menschen mit ihnen verbunden ist. Legacy-Code ist entweder nicht in Besitz oder der Eigentümer nicht mit großen Teilen zugeordnet Bedeutung hat. Sobald dies geschieht (und es könnte am nächsten Tag mit wirklich schlecht geschriebenem Code geschehen), um diesen Code zu ändern, lernen muss jemand es und es versteht. Dieser Prozess ist ein erheblicher Anteil der Zeit es braucht, es in erster Linie zu schreiben.

Der Tag Sie Angst haben Ihren Code Refactoring ist der Tag, wenn Ihr Code Erbe geworden ist.

Ich halte Code „legacy“, wenn einige oder alle der folgenden Bedingungen gelten:

  • Es steht geschrieben wurde, eine Sprache oder mithilfe einer Methode, die eine Generation hinter aktuellen Standards ist
  • Der Code ist ein komplettes Chaos ohne Planung oder Design dahinter
  • Es ist in veralteten Sprachen und in einem veralteten, nicht objektorientierten Stil geschrieben
  • Es ist schwierig, Entwickler zu finden, die die Sprache kennen, weil es so alt ist

Im Gegensatz zu hier einige der anderen Meinungen, habe ich viele moderne Anwendungen gesehen, die anständig ohne Unit-Tests arbeiten. Unit-Tests hat sich noch nicht mit allen gefangen. Vielleicht zehn Jahre von jetzt der nächsten Generation von Programmierern in unseren aktuellen Anwendungen aussehen und sie „Legacy“ betrachten für nicht Unit-Tests enthalten, so wie ich nicht objektorientierte Anwendungen betrachtet Erbe sein.

Wenn einige Änderungen an einer Legacy-Code-Basis vorgenommen werden müssen, ist es besser, einfach zu lassen, wie sie ist und mit dem Strom schwimmen. Wenn die Anwendung drastischer Änderungen der Funktionalität benötigt, eine GUI-Überholung und / oder Sie können niemanden finden, der die Programmiersprache kennt, ist es Zeit, wegzuwerfen und neu zu beginnen. Ein Wort der Warnung jedoch: von Grund auf Umschreiben kann sehr zeitaufwendig sein, und es ist schwer zu wissen, ob Sie alle Funktionen repliziert haben. Sie werden wahrscheinlich Testfälle und Unit-Tests geschrieben für die Legacy-Anwendung und die neue Anwendung haben wollen.

Ganz ehrlich Legacy-Code ist jeder Code, Rahmen, api, von anderen Software-Konstrukt mehr gefügten ist nicht "cool". Zum Beispiel COBOL wird einhellig als Vermächtnis angesehen, während APL nicht. Nun kann man auch den Fall machen, dass COBOL consideed ist Vermächtnis und APL nicht, weil es ca. 1 m mal die Installationsbasis als APL hat. Allerdings, wenn Sie sagen, dass Sie auf APL-Code arbeiten müssen würde die Antwort nicht „oh nein, das Vermächtnis Sachen“, sondern „oh mein Gott, denke Sie nicht etwas zu tun für das nächste Jahrhundert werden“ sehen Sie den Unterschied?

Dies ist ein allgemeiner Begriff geworfen um ziemlich oft (und ganz allgemein) in dem Software-Ökosystem.

Nun, Ich mag von Legacy-Code denken, wie geerbt Code . Das ist einfach Code, der in der Vergangenheit geschrieben wurde. In den meisten Fällen haben Legacy-Code keine neuen / aktuellen Praktiken folgen und wird oft archaisch betrachtet.

Legacy-Code etwas geschrieben wird mehr als vor einem Monat: -)

Es ist oft jeder Code, der nicht in der trendigen Skriptsprache du jour geschrieben ist, und ich bin nur halb im Scherz.

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