En informática , un sistema heredado es un método, tecnología, sistema informático o programa de aplicación antiguo , "de, relacionado con, o que es un sistema informático anterior u obsoleto", [1] pero que todavía se utiliza. A menudo, hacer referencia a un sistema como "heredado" significa que allanó el camino para los estándares que lo seguirían. Esto también puede implicar que el sistema está desactualizado o necesita ser reemplazado.
El código heredado es un código fuente de computadora antiguo que ya no es compatible con hardware y entornos estándar, y es una base de código que, en algún aspecto, está obsoleta o admite algo obsoleto. El código heredado puede estar escrito en lenguajes de programación, usar marcos y bibliotecas externas, o usar arquitectura y patrones que ya no se consideran modernos, lo que aumenta la carga mental y el tiempo de puesta en marcha para los ingenieros de software que trabajan en la base de código. El código heredado puede tener cero o insuficientes pruebas automatizadas , lo que hace que la refactorización sea peligrosa y probablemente introduzca errores . [2] El código de larga duración es susceptible a la descomposición del software , donde los cambios en el entorno de tiempo de ejecución o el software o hardware circundante pueden requerir mantenimiento o emulación de algún tipo para seguir funcionando. El código heredado puede estar presente para admitir hardware heredado, un sistema heredado separado o un cliente heredado que usa una función o versión de software antigua.
Si bien el término generalmente se refiere al código fuente, también puede aplicarse al código ejecutable que ya no se ejecuta en una versión posterior de un sistema o que requiere una capa de compatibilidad para hacerlo. Un ejemplo sería una aplicación clásica de Macintosh que no se ejecutará de forma nativa en macOS , sino que se ejecuta dentro del entorno Classic , o una aplicación Win16 que se ejecuta en Windows XP utilizando la función Windows on Windows en XP.
Un ejemplo de hardware heredado son los puertos heredados , como los puertos PS/2 y VGA, y las CPU con conjuntos de instrucciones más antiguos e incompatibles (por ejemplo, con sistemas operativos más nuevos). Los ejemplos de software heredado incluyen formatos de archivo heredados, como .swf para Adobe Flash o .123 para Lotus 1-2-3 , y archivos de texto codificados con codificaciones de caracteres heredadas, como EBCDIC .
El primer uso del término "legado" para describir sistemas informáticos probablemente se produjo en la década de 1960. [3] En la década de 1980, se utilizaba comúnmente para referirse a los sistemas informáticos existentes y distinguirlos del diseño y la implementación de nuevos sistemas. La palabra "legado" se escuchaba a menudo durante un proceso de conversión, por ejemplo, al trasladar datos del sistema heredado a una nueva base de datos.
Si bien este término puede indicar que algunos ingenieros pueden sentir que un sistema está desactualizado, un sistema heredado puede seguir utilizándose por diversas razones. Puede ser simplemente que el sistema aún satisfaga las necesidades de los usuarios. Además, la decisión de mantener un sistema antiguo puede estar influenciada por razones económicas, como desafíos de retorno de la inversión o dependencia de un proveedor , los desafíos inherentes de la gestión de cambios o una variedad de otras razones distintas a la funcionalidad. La compatibilidad con versiones anteriores (como la capacidad de los sistemas más nuevos para manejar formatos de archivos y codificaciones de caracteres heredados ) es un objetivo que los desarrolladores de software a menudo incluyen en su trabajo.
Incluso si un sistema heredado ya no se utiliza, puede seguir afectando a la organización debido a su función histórica. Es posible que los datos históricos no se hayan convertido al nuevo formato del sistema y que existan dentro del nuevo sistema con el uso de un esquema personalizado , o que solo existan en un almacén de datos . En cualquier caso, el efecto sobre la inteligencia empresarial y los informes operativos puede ser significativo. Un sistema heredado puede incluir procedimientos o terminología que ya no son relevantes en el contexto actual y pueden dificultar o confundir la comprensión de los métodos o las tecnologías utilizadas.
Las organizaciones pueden tener razones convincentes para mantener un sistema heredado, como:
Algunos ingenieros de software consideran que los sistemas heredados son potencialmente problemáticos por varias razones. [4]
En los casos en que no es posible reemplazar los sistemas heredados mediante la práctica de retirar aplicaciones , aún es posible mejorarlos (o "renovarlos"). La mayor parte del desarrollo suele dedicarse a agregar nuevas interfaces a un sistema heredado. La técnica más destacada es proporcionar una interfaz basada en la Web a una aplicación mainframe basada en terminal. Esto puede reducir la productividad del personal debido a tiempos de respuesta más lentos y acciones de operador más lentas basadas en el mouse, pero a menudo se lo considera una "actualización", porque el estilo de la interfaz es familiar para los usuarios no calificados y les resulta fácil de usar. John McCormick analiza estas estrategias que involucran middleware . [10]
Las mejoras en la impresión son problemáticas porque los sistemas de software antiguos a menudo no agregan instrucciones de formato o utilizan protocolos que no se pueden utilizar en las impresoras modernas para PC o Windows. Se puede utilizar un servidor de impresión para interceptar los datos y traducirlos a un código más moderno. Se pueden crear documentos con formato de texto enriquecido (RTF) o PostScript en la aplicación antigua y luego interpretarlos en una PC antes de imprimirlos.
Las medidas de seguridad biométricas son difíciles de implementar en sistemas heredados. Una solución viable es utilizar un servidor proxy Telnet o HTTP que se ubique entre los usuarios y el mainframe para implementar un acceso seguro a la aplicación heredada.
El cambio que se está llevando a cabo en algunas organizaciones consiste en pasar a un software de procesos empresariales automatizados (ABP) que genere sistemas completos. Estos sistemas pueden interactuar con los sistemas heredados de las organizaciones y utilizarlos como repositorios de datos . Este enfoque puede proporcionar una serie de beneficios importantes: los usuarios quedan aislados de las ineficiencias de sus sistemas heredados y los cambios se pueden incorporar de forma rápida y sencilla en el software ABP.
Los enfoques de ingeniería inversa y directa basados en modelos también se pueden utilizar para mejorar el software heredado. [11]
Andreas M. Hein investigó el uso de sistemas heredados en la exploración espacial en la Universidad Técnica de Múnich. Según Hein, los sistemas heredados son atractivos para su reutilización si una organización tiene las capacidades de verificación, validación, prueba e historial operativo. [12] [13] Estas capacidades deben integrarse en varias fases del ciclo de vida del software, como el desarrollo, la implementación, el uso o el mantenimiento. En el caso de los sistemas de software, la capacidad de uso y mantenimiento del sistema es crucial. De lo contrario, el sistema se volverá cada vez menos comprensible y mantenible.
Según Hein, la verificación, la validación, las pruebas y el historial operativo aumentan la confianza en la fiabilidad y la calidad de un sistema. Sin embargo, acumular este historial suele ser costoso. El programa del transbordador espacial de la NASA, ahora retirado , utilizó una gran cantidad de tecnología de la década de 1970. Su reemplazo tenía un costo prohibitivo debido al costoso requisito de certificación de vuelo. El hardware original completó el costoso requisito de integración y certificación para el vuelo, pero cualquier equipo nuevo habría tenido que pasar por todo ese proceso nuevamente. Este proceso largo y detallado requirió pruebas exhaustivas de los nuevos componentes en sus nuevas configuraciones antes de que una sola unidad pudiera usarse en el programa del transbordador espacial. Por lo tanto, cualquier sistema nuevo que inició el proceso de certificación se convierte en un sistema heredado de facto en el momento en que se aprueba para el vuelo.
Además, todo el sistema del transbordador espacial, incluidos los activos terrestres y de lanzamiento, fue diseñado para funcionar en conjunto como un sistema cerrado. Como las especificaciones no cambiaron, todos los sistemas y componentes certificados funcionaron bien en las funciones para las que fueron diseñados. [14] Incluso antes de que se programara el retiro del transbordador en 2010, la NASA consideró ventajoso seguir utilizando muchas piezas de tecnología de la década de 1970 en lugar de actualizar esos sistemas y recertificar los nuevos componentes.
Algunos en la ingeniería de software prefieren describir el "código heredado" sin la connotación de estar obsoleto. Entre las concepciones neutrales más frecuentes se encuentran el código fuente heredado de otra persona y el código fuente heredado de una versión anterior del software . Eli Lopian, director ejecutivo de Typemock, lo ha definido como "código que los desarrolladores tienen miedo de cambiar". [15] Michael Feathers [16] introdujo una definición de código heredado como código sin pruebas , que refleja la perspectiva de que el código heredado es difícil de trabajar en parte debido a la falta de pruebas de regresión automatizadas . También definió las pruebas de caracterización para comenzar a poner a prueba el código heredado .
Ginny Hendry caracterizó la creación de código como un «desafío» para los programadores actuales: crear código que sea «como otros legados en nuestras vidas, como las antigüedades, las reliquias y las historias que se aprecian y transmiten con cariño de una generación a la siguiente. ¿Qué pasaría si el código heredado fuera algo de lo que estuviéramos orgullosos?». [17]
El término "soporte heredado" se utiliza a menudo en relación con los sistemas heredados. El término puede hacer referencia a una característica del software moderno. Por ejemplo, los sistemas operativos con "soporte heredado" pueden detectar y utilizar hardware más antiguo. El término también puede utilizarse para hacer referencia a una función empresarial; por ejemplo, un proveedor de software o hardware que ofrece soporte o mantenimiento de software para productos más antiguos.
Un producto "hereditario" puede ser un producto que ya no se vende, que ha perdido una cuota de mercado sustancial o que es una versión de un producto que no está vigente. Un producto hereditario puede tener alguna ventaja sobre un producto moderno que lo haga atractivo para los clientes. Un producto solo es verdaderamente "obsoleto" si no ofrece ninguna ventaja a nadie , es decir, si ninguna persona que tome una decisión racional optaría por adquirirlo nuevo.
El término "modo heredado" suele referirse específicamente a la compatibilidad con versiones anteriores . Se dice que un producto de software que es capaz de funcionar como si fuera una versión anterior de sí mismo "se ejecuta en modo heredado". Este tipo de característica es común en los sistemas operativos y navegadores de Internet, donde muchas aplicaciones dependen de estos componentes subyacentes.
En la era de los mainframes , muchas aplicaciones se ejecutaban en modo heredado. En el entorno informático empresarial moderno, las arquitecturas de n o 3 niveles son más difíciles de implementar en modo heredado, ya que incluyen muchos componentes que forman un solo sistema.
La tecnología de virtualización es una innovación reciente que permite que los sistemas heredados continúen funcionando en hardware moderno ejecutando sistemas operativos y navegadores más antiguos en un sistema de software que emula el hardware heredado.
Los programadores han tomado prestado el término "brownfield" de la industria de la construcción, donde los terrenos previamente desarrollados (a menudo contaminados y abandonados) se describen como "brownfield" . [18]
Existe una opinión favorable alternativa, que ha ido en aumento desde el fin de la burbuja puntocom en 1999, según la cual los sistemas heredados son simplemente sistemas informáticos en uso funcional:
El " código heredado " a menudo difiere de su alternativa sugerida en cuanto a su funcionamiento y escalabilidad reales.
— Bjarne Stroustrup, creador de C++
Los analistas de TI estiman que el costo de reemplazar la lógica empresarial es aproximadamente cinco veces mayor que el de reutilizarla, [19] incluso descontando el riesgo de fallas del sistema y violaciones de seguridad. Lo ideal sería que las empresas nunca tuvieran que reescribir la mayor parte de la lógica empresarial básica: débitos = créditos es un requisito perenne.
La industria de TI está respondiendo con una "modernización del legado" y una "transformación del legado": renovando la lógica empresarial existente con nuevas interfaces de usuario, a veces utilizando capturas de pantalla y acceso habilitado para servicios a través de servicios web . Estas técnicas permiten a las organizaciones comprender sus activos de código existentes (utilizando herramientas de descubrimiento), proporcionar nuevas interfaces de usuario y de aplicación para el código existente, mejorar el flujo de trabajo, contener los costos, minimizar el riesgo y disfrutar de las cualidades clásicas del servicio (tiempo de actividad cercano al 100 %, seguridad, escalabilidad, etc.). [20]
Esta tendencia también invita a reflexionar sobre qué hace que los sistemas heredados sean tan duraderos. Los tecnólogos están volviendo a aprender la importancia de una arquitectura sólida desde el principio, para evitar reescrituras costosas y riesgosas. Los sistemas heredados más comunes tienden a ser aquellos que adoptaron principios arquitectónicos de TI bien conocidos, con una planificación cuidadosa y una metodología estricta durante la implementación. Los sistemas mal diseñados a menudo no duran, tanto porque se desgastan como porque sus fallas inherentes invitan a ser reemplazados. Por lo tanto, muchas organizaciones están redescubriendo el valor tanto de sus sistemas heredados como de los fundamentos teóricos de esos sistemas.