Qual è l'origine del termine negativo "codice legacy"


28

Tutti parlano di codice legacy nello sviluppo di software e negli ultimi dieci anni ho sentito il termine usato per dipingere qualsiasi base di codice come cattiva.

Da dove proviene questo termine, che ha connotazioni così potenti sia per i programmatori?

Sono sicuro che ci deve essere un libro sullo sviluppo del software che ha aperto la strada a questo termine. Mi piacerebbe individuare l'origine del termine "codice legacy".


13
Ho sentito la seguente definizione di codice legacy 20 anni fa e lo ricordo da allora: il codice legacy è il codice che hai attualmente in produzione. Ha aiutato il mio punto di vista molte volte.
Michael Durrant,

10
"Codice legacy" è un termine negativo? Chi lo dice? Comunque, la parola "eredità" non è specifica per la programmazione, né è particolarmente significativa in questo contesto.
Robert Harvey,

5
Michael Feathers ( amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/… ) molto probabilmente non è l'inventore di quel termine, ma ha fatto una definizione interessante: ha chiamato il codice legacy "codice senza test". E questo è davvero un attributo negativo.
Doc Brown,

11
Scrivi un sacco di codice. Controllalo. Vai a pranzare. Torna indietro C'è uno schermo intero pieno di codice legacy! Ora devi capire quel codice e assicurarti che tutte le modifiche future funzionino correttamente nel contesto di quel codice. Il codice precedente è uguale al codice esistente .
Eric Lippert,

4
"Legacy" qui significa semplicemente che gli sviluppatori originali non sono più in circolazione e rimangono solo gli artefatti del codice e della documentazione. Non si riferisce in alcun modo a un'età o qualità.
SK-logic,

Risposte:


39

Il codice legacy si basa sulla frase di un sistema legacy che si applica specificamente al codice. Secondo Wikipedia, risale probabilmente agli anni '70 ed era in uso negli anni '80. È decollato con l'esplosione tecnologica degli anni '90.

Questo può essere visto con il ngram viewer di Google: sistema legacy, codice legacy

sistema e codice legacy

Scavando ulteriormente, è possibile trovare usi documentati del termine "sistema legacy" negli anni '70 .

Il primo esempio di "sistema legacy" che google ha è in un libro su Atti della Conferenza sull'analisi numerica e sui computer dell'esercito del 1978:

... una soluzione ben strutturata e documentata a un problema chiaramente definito è che il funzionamento del sistema legacy deve essere compreso e cambiare il sistema esistente con fiducia.

C'è anche un esempio di "sistema legacy" usato al di fuori dell'industria tecnologica in Clout: Womanpower e Politics grin 1976:

... inoltre, occupa il posto di democratica di terza rango nel potente comitato bancario e valutario - posizioni di potere che ha acquisito da sola, non attraverso il sistema legacy.

Al di là di questo esempio che mostra che il suo uso si è esteso al di là del puro mondo del software, i dettagli di dove esattamente il termine ha avuto origine sono probabilmente persi nella sabbia del tempo. Dati i riferimenti militari e politici, potrebbe aver avuto origine con loro (principalmente l' esercito e la sua migrazione gergale ( "Sembra probabile che il" kluge "sia arrivato al MIT tramite ex-alunni dei numerosi progetti di elettronica militare condotti a Cambridge durante la guerra (molti in Venerabile Building 20 del MIT, che ospitava TMRC ... " ))


Questa è un'ottima risposta Continuerò a fare ricerche per vedere se riesco a trovare un'origine, ma probabilmente hai ragione nel dire che l'origine è andata persa o forse non è stata documentata.
stevebot,

1
@stevebot Suggerirei di seguire il percorso del "sistema legacy" piuttosto che del codice ... quel termine sembra aver preceduto il codice legacy e ha lo stesso significato essenziale.

6
Il testo nel tuo "libro sulla formazione di legami carbonio-carbonio dal 1979" è tratto da un libro intitolato "Nuove pratiche nella gestione dei progetti" e risale al 2002 (prima pubblicazione 1998). Sembra che qualcosa sia stato confuso durante la scansione.
Pete Kirkham,

1
Non sembra che questa sia la fonte del termine negativo.
JeffO,

@JeffO No, dato che MichaelT menziona la sua non conclusiva provenienza. Questa è una dannata buona risposta che mostra ricerca e impegno.
stevebot,

5

La base di codice legacy di solito non si riferisce a un sistema POS, ma piuttosto a qualsiasi sistema esistente in una base di codice o sistema che non viene più utilizzato per il nuovo sviluppo. Ad esempio, il mio team attualmente supporta alcune applicazioni .net 1.1 e 2.0 che sono considerate codice legacy. Se arriva un momento in cui è richiesta una modifica, questi verranno riscritti o aggiornati per utilizzare i più recenti framework e standard. Fino ad allora li gestiamo come applicazioni legacy che devono continuare a funzionare ma non vengono implementati miglioramenti o correzioni di codice.

Ci sono anche alcuni sistemi legacy che non supportiamo affatto che sono stati scritti in VB6 e ASP classico. Non abbiamo capacità o direttiva per supportare o modificare questi sistemi, ma finché continuano a funzionare e non hanno bisogno di miglioramenti, non saranno probabilmente aggiornati. Non c'è nulla di particolarmente sbagliato in nessuno di questi sistemi. Eseguono il loro lavoro nel modo in cui dovrebbero e oltre ad apparire come un'app dalla metà alla fine degli anni '90, non hanno grossi problemi.

Quindi l'eredità non significa POS, ma solo un sistema creato in una tecnologia o un linguaggio precedenti che non è conforme agli standard attuali. Alcuni sistemi legacy si qualificano come POS principalmente perché mancavano delle metodologie di sviluppo che esistono oggi che consentono il codice gestito e l'esperienza di oltre 15 anni dei programmatori web veterani.


Concordo pienamente sul fatto che i sistemi legacy non sono necessariamente sistemi POS. Mi chiedo quale sia l'origine della frase.
stevebot,

3
@stevebot Se vuoi trovare l'origine del termine, dovresti chiederlo senza presupporre una connotazione.
un CVn

2
@stevebot: un'eredità è tutto ciò che lasci alle spalle quando passi. Suppongo che il descrittore sia stato appena adottato da come era stato adottato in innumerevoli altri campi.
SoylentGray,

1
@ MichaelKjörling mi stai dicendo che non hai mai sentito il codice legacy usato in senso negativo ?? Non è la mia connotazione, ma quella degli altri ho sentito più volte in incontri, libri e lavori. Come ho detto, sono completamente d'accordo sul fatto che l'eredità non dovrebbe essere un termine negativo.
stevebot,

@stevebot - il codice legacy sembra solo "negativo", perché viene sempre usato solo nel contesto della sostituzione o dell'interfaccia con un sistema più vecchio (e le sue difficoltà). Un programma che è stato creato oltre un decennio fa ma è ancora utile / rilevante e ha pochi bug è ancora "software legacy", ma tutti lo chiamano semplicemente "software". Lo stesso vale per i codebase.
Robotnik,

3

"Codice legacy" è un termine usato dalle persone di marketing per fare pressione su coloro il cui codice è vecchio (ma presumibilmente funziona bene) affinché si aggiorni ai più recenti linguaggi e tecniche software (e probabilmente più corretti da bug). È strettamente collegato al "sistema legacy", che fa riferimento a vecchi sistemi operativi e hardware che funzionano bene ma non sono conformi a ciò che ora è "politicamente corretto" (ad esempio OpenVMS, sistema IBM).


6
Anche se questo potrebbe essere vero, sarebbe meglio se dovessi modificare la risposta per citare riferimenti specifici a supporto delle affermazioni fatte in questa risposta. Ci sono riferimenti che puoi citare?
un CVn del

2

Il termine codice legacy risale almeno al 1989 come utilizzato da Glenn Everhart in comp.sys.amiga :

(... a proposito, sì, lo faccio a volte programma in C anche ... ma trovo più facile convertire il codice legacy w / o cambiando la sua lingua ...)

Non ho trovato nulla di verificabile prima in Google Libri.


Come ha sottolineato Eric Lippert, nel momento in cui hai scritto un pezzo di codice hai ottenuto il codice legacy. Le curve mostrate da MichaelT e le tue scoperte visualizzano solo l'intervallo di tempo, in cui l'ascesa principale dell'IT ha iniziato a produrre immense quantità di codice, coinvolgendo molte persone in tutto il mondo. Poco dopo è emersa la necessità di sostituire i "vecchi" sistemi con quelli nuovi, ed è per questo che è diventato un termine diffuso.
JensG,

1
Il vecchio codice veniva sostituito costantemente, se c'era una buona ragione per farlo. Lavoravo su un sistema di fatturazione per mainframe scritto (in PL / 1) nel 1970. Sostituiva un sistema scritto in linguaggio assembly mainframe (che di per sé era in gran parte un'automazione di un sistema manuale esistente). Il sistema PL / 1 è stato finalmente sostituito dopo circa 35 anni di utilizzo (un paio di tentativi falliti di sostituirlo prima di quello). Probabilmente ora le tecnologie moderne vengono demolite molto prima (e con disprezzo per la riscrittura del sistema del patrimonio che ciò comporterà probabilmente).
Calcio d'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.