Woher stammt der negative Begriff „Legacy-Code“?

28

In der Softwareentwicklung wird in aller Munde über Legacy-Code gesprochen, und ich habe gehört, dass der Begriff in den letzten zehn Jahren verwendet wurde, um eine Codebasis als schlecht zu bezeichnen.

Woher stammt dieser Begriff, der für Programmierer gleichermaßen eine so starke Bedeutung hat?

Ich bin mir sicher, dass es ein Buch über Softwareentwicklung geben muss, das Pionierarbeit für diesen Begriff geleistet hat. Ich würde gerne den Ursprung des Begriffs "Legacy-Code" ausfindig machen.

Stevebot
quelle
13
Ich habe vor 20 Jahren die folgende Definition von Legacy-Code gehört und erinnere mich seitdem daran: Legacy-Code ist der Code, den Sie derzeit in der Produktion haben. Das hat mir schon oft geholfen.
Michael Durrant
10
"Legacy Code" ist ein negativer Begriff? Wer sagt das? Wie auch immer, das Wort "Vermächtnis" ist weder programmspezifisch noch in diesem Zusammenhang von besonderer Bedeutung.
Robert Harvey
5
Michael Feathers ( amazon.com/Working-Effective-Legacy-Michael-Feathers/dp/… ) ist höchstwahrscheinlich nicht der Erfinder dieses Begriffs, aber er hat eine interessante Definition getroffen: Er nannte Legacy-Code "Code ohne Tests". Und das ist in der Tat ein negatives Attribut.
Doc Brown
11
Schreiben Sie eine Reihe von Code. Checkt es ein. Geht essen. Komm zurück. Es gibt einen ganzen Bildschirm voller Legacy-Code! Sie müssen diesen Code jetzt verstehen und sicherstellen, dass alle zukünftigen Änderungen im Kontext dieses Codes korrekt funktionieren. Legacy-Code ist derselbe wie der vorhandene Code .
Eric Lippert
4
"Legacy" bedeutet hier einfach, dass die ursprünglichen Entwickler nicht mehr da sind und nur die Code- und Dokumentationsartefakte übrig bleiben. Es bezieht sich in keiner Weise auf ein Alter oder eine Qualität.
SK-logic

Antworten:

39

Legacy-Code basiert auf der Phrase eines Legacy-Systems , das speziell für Code gilt. Laut Wikipedia stammt es wahrscheinlich aus den 1970er Jahren und war in den 1980er Jahren allgemein gebräuchlich. Es begann mit der Tech-Explosion der 90er Jahre.

Dies kann mit Googles ngram viewer beobachtet werden: Legacy-System, Legacy-Code

Altsystem und Code

Wenn Sie dies weiter vertiefen, finden Sie dokumentierte Verwendungen des Begriffs "Legacy-System" in den 1970er Jahren .

Das früheste Beispiel für ein "Legacy-System" in Google ist ein Buch über die Ergebnisse der Army Numerical Analysis and Computers Conference aus dem Jahr 1978:

... gut ausgebaute und dokumentierte Lösung für ein klar definiertes Problem ist, dass die Funktionsweise des Altsystems verstanden und das vorhandene System mit Zuversicht geändert werden muss.

Es gibt auch ein Beispiel für ein "Legacy-System", das außerhalb der Technologiebranche in Clout verwendet wird: Womanpower and Politics grinsen 1976:

... außerdem hat sie einen Sitz als drittrangige Demokratin im mächtigen Banken- und Währungsausschuss - Machtpositionen, die sie selbst aufgebaut hat, nicht über das Altsystem.

Abgesehen von diesem Beispiel, das zeigt, dass seine Verwendung über die reine Software-Welt hinausreicht, sind die Einzelheiten, wo genau der Begriff entstanden ist, wahrscheinlich im Sand der Zeit verschwunden. Die militärische und politische Bezüge gegeben, kann es mit ihnen entstanden ( in erster Linie das Militär und seine Jargon Migration ( „Es scheint wahrscheinlich , dass" Kluges kam MIT über Alumni der vielen Militärelektronik - Projekte während des Krieges in Cambridge laufen (viele in Das ehrwürdige Gebäude 20 des MIT, in dem TMRC untergebracht war ... " ))


quelle
Das ist eine großartige Antwort. Ich werde weiter recherchieren, um zu sehen, ob ich einen Ursprung finden kann, aber Sie haben wahrscheinlich Recht, dass der Ursprung verloren gegangen oder möglicherweise nicht dokumentiert ist.
Stevebot
1
@stevebot Ich würde vorschlagen, dem Pfad des "Legacy-Systems" zu folgen, anstatt dem des Codes. Dieser Begriff scheint älter als der Legacy-Code zu sein und hat dieselbe grundlegende Bedeutung.
6
Der Text in Ihrem "Buch über die Bildung von Kohlenstoff-Kohlenstoff-Bindungen aus dem Jahr 1979" stammt aus einem Buch mit dem Titel "Neue Praktiken im Projektmanagement" und stammt aus dem Jahr 2002 (erstmals 1998 veröffentlicht). Es sieht so aus, als wäre beim Scannen etwas durcheinander gekommen.
Pete Kirkham
1
Scheint nicht so, dass dies die Quelle des negativen Begriffs ist.
JeffO
@JeffO Nein, wie MichaelT erwähnt, ist es nicht schlüssig, woher es kommt. Dies ist eine verdammt gute Antwort, die Forschung und Anstrengung zeigt.
Stevebot
5

Legacy-Codebasis bezieht sich in der Regel nicht auf ein POS-System, sondern auf ein System, das in einer Codebasis vorhanden ist, oder auf ein System, das nicht mehr für die Neuentwicklung verwendet wird. Zum Beispiel unterstützt mein Team derzeit einige .NET 1.1- und 2.0-Anwendungen, die als Legacy-Code gelten. Wenn eine Änderung erforderlich wird, werden diese entweder umgeschrieben oder aktualisiert, um die neuesten Frameworks und Standards zu verwenden. Bis dahin verwalten wir sie als Legacy-Anwendungen, die weiterhin funktionieren müssen, aber keine Verbesserungen oder Code-Korrekturen implementieren.

Es gibt auch einige ältere Systeme, die wir überhaupt nicht unterstützen und die in VB6 und Classic ASP geschrieben wurden. Wir sind nicht in der Lage, diese Systeme zu unterstützen oder zu modifizieren. Solange sie jedoch weiterhin ausgeführt werden und keine Verbesserungen erforderlich sind, werden sie wahrscheinlich nicht aktualisiert. An keinem dieser Systeme ist etwas Besonderes auszusetzen. Sie erledigen ihre Arbeit so, wie sie es sollen, und abgesehen davon, dass sie von Mitte bis Ende der 90er Jahre wie eine App aussehen, haben sie keine größeren Probleme.

Legacy bedeutet also nicht, dass POS nur ein System ist, das in einer früheren Technologie oder Sprache erstellt wurde, die nicht den aktuellen Standards entspricht. Einige Legacy-Systeme sind als POS-Systeme zu qualifizieren, vor allem, weil ihnen die heute existierenden Entwicklungsmethoden für verwalteten Code und die über 15-jährige Erfahrung der erfahrenen Webcodierer fehlten.

SoylentGray
quelle
Ich stimme voll und ganz zu, dass Legacy-Systeme nicht unbedingt POS-Systeme sind. Ich frage mich, woher der Satz stammt.
Stevebot
3
@stevebot Wenn Sie die Herkunft des Begriffs herausfinden möchten, sollten Sie danach fragen, ohne eine Konnotation vorauszusetzen.
ein CVn
2
@stevebot - Ein Vermächtnis ist alles, was Sie hinterlassen, wenn Sie weitergeben. Ich würde annehmen, dass der Deskriptor nur so übernommen wurde, wie er in unzähligen anderen Bereichen übernommen wurde.
SoylentGray
1
@ MichaelKjörling erzählst du mir, dass du noch nie gehört hast, dass Legacy-Code in einem negativen Sinne verwendet wird ?? Das ist nicht meine Konnotation, aber das andere habe ich immer und immer wieder in meetups, Bücher zu hören und jobs.Like gesagt, ich völlig einig , dass Vermächtnis sollte kein negativer Begriff sein.
Stevebot
@stevebot - Legacy-Code scheint nur "negativ" zu sein, da er immer nur im Zusammenhang mit dem Ersetzen oder Verbinden mit einem älteren System (und den damit verbundenen Schwierigkeiten) verwendet wird. Ein Programm, das vor über einem Jahrzehnt erstellt wurde, aber immer noch nützlich / relevant ist und nur wenige Fehler aufweist, ist immer noch "Legacy-Software", aber jeder nennt es einfach "Software". Gleiches gilt für Codebasen.
Robotnik
3

"Legacy-Code" ist ein Begriff, der von Marketingleuten verwendet wird, um diejenigen, deren Code alt ist (aber vermutlich gut funktioniert), dazu zu drängen, auf die neuesten, größten (und wahrscheinlich fehlerhafteren) Softwaresprachen und -techniken zu aktualisieren. Es ist eng mit dem "Legacy-System" verknüpft, das sich auf alte Hardware und Betriebssysteme bezieht, die einwandfrei funktionieren, sich aber nicht an das anpassen, was jetzt "politisch korrekt" ist (z. B. OpenVMS, IBM-System).

JohnM
quelle
6
Dies mag zwar zutreffen, es ist jedoch besser, wenn Sie die Antwort bearbeiten , um bestimmte Verweise auf die Behauptungen in dieser Antwort zu zitieren. Gibt es solche Referenzen, die Sie zitieren können?
CVn
2

Der Begriff Legacy-Code stammt aus mindestens 1989, wie er von Glenn Everhart in comp.sys.amiga verwendet wird :

(... übrigens, ja, ich tue manchmal Programm in C auch ... aber ich finde es einfacher zu konvertieren Legacy - Code w / o seine Sprache zu ändern ...)

Ich habe früher in Google Books nachweislich nichts gefunden.

Hugo
quelle
Wie Eric Lippert betonte, haben Sie in der Minute, in der Sie einen Code geschrieben haben, einen Legacy-Code erhalten. Die von MichaelT und Ihrem Ergebnis gezeigten Kurven veranschaulichen lediglich den Zeitrahmen, in dem der Aufstieg der IT-Branche zu einer immensen Menge an Code führte, an dem viele Menschen auf der ganzen Welt teilnahmen. Etwas später tauchte auch die Notwendigkeit auf, "alte" Systeme durch neuere zu ersetzen - und aus diesem Grund und zu dem Zeitpunkt wurde dies ein weit verbreiteter Begriff.
JensG
1
Alter Code wurde ständig ersetzt, wenn es einen guten Grund dafür gab. Ich arbeitete 1970 an einem in PL / 1 geschriebenen Abrechnungssystem für Großrechner. Es ersetzte ein in der Assemblersprache Großrechner geschriebenes System (das an sich weitgehend eine Automatisierung eines vorhandenen manuellen Systems war). Das PL / 1-System wurde nach ungefähr 35 Jahren endlich ersetzt (einige gescheiterte Versuche, es vorher zu ersetzen). Möglicherweise werden moderne Technologien jetzt viel früher ausrangiert (und ohne Rücksicht darauf, wie viel Umschreibung des Erbesystems dies bedeuten dürfte).
Kickstart