Sono piuttosto parziale a Riepilogo di Wikipedia personalmente:
A legacy system is an old method, technology, computer system, or application program that continues to be used, typically because it still functions for the users' needs, even though newer technology or more efficient methods of performing a task are now available.
Molto di ciò che gli altri stanno descrivendo nelle loro risposte sono ragioni perché il codice diventa "legacy". Ma la domanda essenziale in sé è questa:
But it's still used in the production systems - so is it really legacy? And what makes it legacy?
Il fatto che sia ancora utilizzato nella produzione è precisamente ciò che lo rende legacy . Se il codice non funziona correttamente o non è più utilizzato in produzione, allora quel codice è "rotto" o "ritirato", rispettivamente. Legacy significa che è ancora in uso e funziona bene, ma incorpora disegni o tecniche che non sono più di uso comune.
Qualsiasi codice o sistema che (a) vorresti aggiornare / aggiornare, ma non può, o (b) sono ancora nel mezzo dell'aggiornamento, è un sistema legacy. Questo non significa refactoring o pulizia generale del codice, significa significative modifiche al design, possibilmente utilizzando un nuovo framework o anche una nuova piattaforma.
Ci sono diversi motivi per cui i sistemi o il codice potrebbero diventare legacy:
-
Mancanza di manutenzione regolare o decomposizione del software . Chiaramente se l'applicazione non viene mantenuta regolarmente, non manterrà il passo con i principali cambiamenti nel mondo del software. Ciò potrebbe essere dovuto alla semplice negligenza o potrebbe essere una scelta deliberata basata su priorità di business o vincoli di budget.
-
Mancanza di test. Un'altra risposta fa riferimento alla rivendicazione iperbolica di un autore popolare di qualsiasi codice non coperto da prova essere un codice legacy. Questa non è una definizione precisa ma è una possibile causa principale; senza buoni test (automatici o manuali), gli sviluppatori diventano timidi e hanno paura di apportare modifiche importanti perché si preoccupano di rompere qualcosa, portando così il "software putrefazione" sopra.
-
Rev-locking, un fattore spesso trascurato che è particolarmente insidioso nei progetti che utilizzano librerie o framework open-source di grandi dimensioni (anche se l'ho visto accadere anche con strumenti commerciali). Spesso ci sarà una grande personalizzazione fatta al framework / libreria, rendendo un aggiornamento proibitivamente difficile o costoso. Quindi il sistema diventa legacy perché gira su una piattaforma più vecchia (e probabilmente non più supportata).
-
Il codice sorgente non è più disponibile, il che significa che il sistema può essere sempre aggiunto e mai modificato. Dal momento che questi sistemi devono essere riscritti per l'aggiornamento - al contrario di rivedere in modo incrementale / iterativo - molte aziende non si preoccuperanno.
Qualsiasi cosa che rallenta o interrompe gli aggiornamenti di un codice base può portare a quella base di codice diventare legacy.
Ora la domanda separata, non dichiarata ma implicita è, cosa c'è di sbagliato nel codice legacy? Viene spesso usata come termine peggiorativo, da qui la domanda:
Should we shy away from this unwarranted labelling of perfectly functioning code?
E la risposta è no, non dovremmo; l'etichettatura è giustificata e il termine stesso implica chiaramente il codice di funzionamento. Il punto non è che è la sua funzione, ma come sta funzionando.
In alcuni casi non c'è niente di sbagliato nel codice legacy. Non è una parolaccia. Codice / sistemi legacy non sono malvagi. Hanno appena raccolto un po 'di polvere - a volte un po', a volte molto.
Legacy diventa obsoleto quando il sistema non può più servire (tutte) le esigenze del cliente. Quella etichetta è quella di cui dobbiamo fare attenzione. Altrimenti, è semplicemente un'equazione costi / benefici; se il costo dell'aggiornamento sarebbe inferiore al costo dei suoi benefici (compresi i costi di manutenzione futuri inferiori), aggiornare, altrimenti, lasciarlo da solo. Non c'è bisogno di sputare la parola "legacy" nello stesso tono che normalmente si riserva per "audit fiscale". È una situazione perfettamente OK.