Sono piuttosto parziale al sommario di Wikipedia stesso:
Un sistema legacy è un vecchio metodo, tecnologia, sistema informatico o programma applicativo che continua ad essere utilizzato, in genere perché funziona ancora per le esigenze degli utenti, anche se sono ora disponibili tecnologie più recenti o metodi più efficienti per eseguire un'attività.
Molto di ciò che altre persone descrivono nelle loro risposte sono le ragioni per cui il codice diventa "eredità". Ma la domanda essenziale in sé è questa:
Ma è ancora utilizzato nei sistemi di produzione - quindi è davvero legato? E cosa lo rende legato?
Il fatto che sia ancora utilizzato nella produzione è proprio ciò che lo rende ereditato . Se il codice non funziona correttamente o non viene più utilizzato in produzione, il codice viene rispettivamente "rotto" o "ritirato". Legacy significa che è ancora in uso e funziona bene, ma incorpora design o tecniche che non sono più di uso comune.
Qualsiasi codice o sistema che si desidera (a) aggiornare / aggiornare, ma non è possibile, o (b) è ancora nel mezzo dell'aggiornamento, è un sistema legacy. Ciò non significa refactoring o pulizia del codice generale, ma modifiche significative al design, possibilmente utilizzando un nuovo framework o persino una nuova piattaforma.
Esistono diversi motivi per cui i sistemi o il codice potrebbero diventare legacy:
Mancanza di manutenzione regolare o marciume del software . Chiaramente se l'applicazione non viene mantenuta regolarmente, non sarà al passo con i grandi cambiamenti nel mondo del software. Ciò potrebbe essere dovuto alla semplice negligenza o potrebbe essere una scelta deliberata basata su priorità aziendali o vincoli di bilancio.
Mancanza di test. Un'altra risposta fa riferimento all'affermazione iperbolica di un autore popolare di qualsiasi codice non coperto da test essendo codice legacy. Questa in realtà non è una definizione accurata ma è una possibile causa principale; senza buoni test (automatizzati o manuali), gli sviluppatori diventano timidi e hanno paura di fare grandi cambiamenti perché si preoccupano di rompere qualcosa, portando così il "marciume del software" sopra.
Rev-bloccando, un fattore spesso trascurato che è particolarmente insidioso nei progetti che utilizzano grandi librerie o framework open source (anche se l'ho visto accadere anche con strumenti commerciali). Spesso ci sarà una grande personalizzazione nel framework / libreria, rendendo un upgrade proibizionalmente difficile o costoso. Pertanto, il sistema diventa legacy perché funziona su una piattaforma precedente (e forse non più supportata).
Il codice sorgente non è più disponibile, il che significa che il sistema può essere aggiunto solo e mai, mai modificato. Dal momento che questi sistemi devono essere riscritti al fine di aggiornare, anziché rivedere in modo incrementale / iterativo, molte aziende non si preoccuperanno.
Tutto ciò che rallenta o interrompe gli aggiornamenti di una base di codice può portare a tale base di codice diventare legacy.
Ora la domanda separata, non dichiarata ma implicita è: cosa c'è di sbagliato nel codice legacy? Viene spesso usato come termine peggiorativo, quindi la domanda:
Dovremmo evitare questa etichettatura ingiustificata di codice perfettamente funzionante?
E la risposta è no, non dovremmo; l'etichettatura è giustificata e il termine stesso implica chiaramente un codice funzionante. Il punto non è che è una funzione, ma come funziona.
In alcuni casi non c'è niente di sbagliato nel codice legacy. Non è una parolaccia. I codici / sistemi legacy non sono male. Hanno appena raccolto un po 'di polvere - a volte un po', a volte molto.
L'eredità diventa obsoleta quando il sistema non può più soddisfare (tutte) le esigenze del cliente. Quella etichetta è quella che dobbiamo stare attenti. Altrimenti, è semplicemente un'equazione costo / beneficio; se il costo dell'aggiornamento sarebbe inferiore al costo dei suoi benefici (inclusi i costi di manutenzione futuri inferiori), allora l'aggiornamento, altrimenti, lascia perdere. Non c'è bisogno di sputare la parola "legacy" con lo stesso tono che normalmente si riserva per "audit fiscale". È una situazione perfettamente OK in cui trovarsi.