Soy bastante parcial al resumen de Wikipedia :
Un sistema heredado es un método, tecnología, sistema informático o programa de aplicación antiguo que se sigue utilizando, generalmente porque todavía funciona para las necesidades de los usuarios, a pesar de que ahora hay disponibles tecnologías más nuevas o métodos más eficientes para realizar una tarea.
Mucho de lo que otras personas describen en sus respuestas son razones por las cuales el código se convierte en "legado". Pero la pregunta esencial en sí misma es esta:
Pero todavía se usa en los sistemas de producción, entonces ¿es realmente un legado? ¿Y qué lo hace legado?
El hecho de que todavía se use en producción es precisamente lo que lo hace legado . Si el código no funciona correctamente, o ya no se usa en producción, entonces ese código está "roto" o "retirado", respectivamente. Legacy significa que todavía está en uso y funciona bien, pero incorpora diseños o técnicas que ya no son de uso común.
Cualquier código o sistema que (a) le gustaría actualizar / actualizar, pero no puede, o (b) todavía está en medio de la actualización, es un sistema heredado. Esto no significa refactorización o limpieza general del código, significa cambios significativos en el diseño, posiblemente utilizando un nuevo marco o incluso una nueva plataforma.
Existen varias razones por las cuales los sistemas o el código pueden convertirse en heredados:
Falta de mantenimiento regular o software podrido . Claramente, si la aplicación no se mantiene regularmente, no seguirá el ritmo de los cambios importantes en el mundo del software. Esto puede deberse a una simple negligencia o puede ser una elección deliberada basada en prioridades comerciales o restricciones presupuestarias.
Falta de pruebas. Otra respuesta hace referencia a la afirmación hiperbólica de un autor popular de que cualquier código no cubierto por las pruebas es código heredado. Esto realmente no es una definición precisa, pero es una posible causa raíz; sin buenas pruebas (automatizadas o manuales), los desarrolladores se vuelven tímidos y temen hacer cambios importantes porque se preocupan por romper algo, lo que lleva a la "putrefacción del software" anterior.
Rev-lock, un factor que a menudo se pasa por alto y que es particularmente insidioso en proyectos que usan grandes bibliotecas o marcos de código abierto (aunque también lo he visto con herramientas comerciales). A menudo se realizará una personalización importante en el marco / biblioteca, lo que hará que una actualización sea prohibitivamente difícil o costosa. Por lo tanto, el sistema se vuelve heredado porque se ejecuta en una plataforma más antigua (y posiblemente ya no es compatible).
El código fuente ya no está disponible, lo que significa que el sistema solo se puede agregar, nunca cambiar. Dado que estos sistemas tienen que reescribirse para actualizarse, en lugar de revisarse de forma gradual / iterativa, muchas empresas no se molestarán.
Cualquier cosa que ralentice o detenga las actualizaciones de una base de código puede hacer que esa base de código se vuelva heredada.
Ahora la pregunta separada, no declarada pero implícita es, ¿qué tiene de malo el código heredado? A menudo se usa como un término peyorativo, de ahí la pregunta:
¿Deberíamos evitar este etiquetado injustificado de código que funciona perfectamente?
Y la respuesta es no, no deberíamos; el etiquetado está garantizado y el término en sí implica claramente un código funcional. El punto no es que sea función, sino cómo está funcionando.
En algunos casos no hay nada de malo con el código heredado. No es una mala palabra. Los códigos / sistemas heredados no son malvados. Acaban de recoger algo de polvo, a veces un poco, a veces mucho.
El legado se vuelve obsoleto cuando el sistema ya no puede atender (todas) las necesidades del cliente. Esa etiqueta es una de la que debemos tener cuidado. De lo contrario, es simplemente una ecuación de costo / beneficio; si el costo de la actualización sería menor que el costo de sus beneficios (incluidos los costos de mantenimiento futuros más bajos), entonces actualice, de lo contrario, déjelo en paz. No es necesario escupir la palabra "legado" en el mismo tono que normalmente reserva para "auditoría fiscal". Es una situación perfectamente aceptable para estar.