Legacy Code: Motivos por los que cambiar tu software
Se conoce como legacy code al código escrito en lenguajes antiguos, como Cobol, Fortran o Visual Basic. También al realizado en lenguajes de comprensión difícil. El código legado o legacy code está presente en muchas empresas y, habitualmente, en tareas críticas. Esto se debe a que se encuentra en aplicaciones que no pueden dejar de funcionar y que no son fáciles de sustituir. Por tanto, se mantienen en funcionamiento tanto tiempo como sea posible.
No obstante, cuando llega el momento del cambio, hay que cuidar mucho cómo hacerlo. Aunque haya que cambiar el código, el comportamiento de la aplicación en la que se modifique tiene que ser el mismo. Además, cada vez que se hace una modificación en el código hay que asegurarse que los componentes antiguos que queden en él y se mantengan siguen comportándose igual. Y que sus funciones no se van a ver tampoco afectadas. Sin embargo, una vez amortizado, el cambiar legacy code por una nueva aplicación tiene muchos alicientes que pasamos a detallar.
Ahorrar costes reduciendo la cantidad de legacy code
Evitar que la empresa incurra en gastos desarrollando nuevas aplicaciones suele ser el argumento más socorrido para conservar el software desarrollado con legacy code actualmente en uso.
Es cierto que el desembolso producto del desarrollo de una nueva aplicación es elevado. No obstante existe la posibilidad de amortizar la inversión a lo largo de los siguientes años. De esta manera, el impacto en la cuenta de resultados será menor, además de poder aprovechar el ahorro fiscal derivado de la inversión realizada.
El primer ahorro de coste será el relativo al mantenimiento. El software heredado suele necesitar frecuentes adaptaciones a cualquier novedad tecnológica que haya que incorporar. Además, es difícil prever el coste de llevar a cabo la actualización. En muchos casos, incorporar o adaptar una función que en una aplicación actual resultaría sencillo, si nos encontramos ante legacy code es posible que afecte a otros módulos y que los cambios sean más costosos en tiempo y en dinero.
También es más complicado encontrar programadores que conozcan los lenguajes, librerías, plataformas y otros componentes del sistema heredados. Y, en algunos casos, prefieren trabajar con versiones más modernas, ya que también es más sencillo prever los tiempos que dedicarán a cada tarea. Por ese motivo, en algunas ocasiones no hay muchas opciones entre las que elegir. Esto también incrementa los costes.
La seguridad, uno de los puntos débiles del legacy code
Incluso en el software mejor desarrollado, teniendo en cuenta todos los principios de seguridad y contemplando cada posible vulnerabilidad para que la aplicación resulte segura, cada día aparecen numerosos fallos de seguridad. También, con cierta frecuencia, surgen nuevas técnicas para romper un sistema. Por eso, a medida que un buen código va cumpliendo años, puede convertirse gradualmente en menos seguro.
También es importante tener en cuenta que la seguridad no está solo en la aplicación. Si esta depende de una plataforma insegura, o de una versión antigua de librerías, bases de datos, etc., es probable que haya componentes que presenten vulnerabilidades. En estos casos, puede que no sea posible solucionarlos. Con un buen mantenimiento puedes mitigar algunas de estas vulnerabilidades, pero actualizar todo el entorno de ejecución del legacy code suele ser una misión imposible.
En caso de que no sea posible actualizar el código heredado en un plazo de tiempo breve, o que esté previsto para más adelante, conviene llevar a cabo auditorías de seguridad periódicas. De esta manera podrás resolver todas las vulnerabilidades posibles. También conocer las que no pueden resolverse para mantener un control que permita detectar cualquier intento de aprovechar los fallos de seguridad del sistema.
Obsolescencia tecnológica y código legado
Por motivos muy semejantes a los de la seguridad, es probable que haya componentes que dejen de funcionar en algún momento del futuro. Bien por limitaciones de la propia aplicación, o porque la plataforma ha dejado de actualizarse y no permite utilizar, por ejemplo, nuevos protocolos de comunicaciones. Es probable que el legacy code siga funcionando, pero de forma muy limitada. También que no pueda acceder a determinados recursos externos o, por el contrario, que la propia aplicación sea inaccesible desde sistemas modernos. Pasa, por ejemplo, con los navegadores web, que incorporan versión a versión nuevas limitaciones para ser más seguros.
Algunas de estas limitaciones pueden resolverse mediante diversos tipos de intermediarios. Por ejemplo, un software heredado que deba ejecutarse en un sistema antiguo con librerías antiguas podría no ser capaz de conectarse por versiones modernas del sistema de cifrado TLS. Por lo tanto, numerosos servicios de terceros, que han restringido el acceso con versiones antiguas, dejarían de estar accesibles para la aplicación.
La solución, en este caso, podría pasar por desarrollar un componente de software moderno y capaz de interactuar con dicho servicio externo y modificar la aplicación con legacy code para que se comunique con nuestro nuevo componente de software. Este enfoque, que puede complicar mucho la arquitectura porque tiende a crear numerosos componentes para una única función, puede ser también ventajoso. Así, si se está planificando una nueva aplicación, estos componentes pueden desarrollarse de tal forma que sean reutilizables en ella. En especial, si nos dirigimos a una arquitectura basada en microservicios.
Velocidad de adaptación del legacy code
Aunque hasta ahora hemos abordado solo los problema derivados de mantener en marcha software heredado, hay otro riesgo. Las dificultades que presentan estas aplicaciones para incorporar nuevas funciones pueden desincentivar que se incorporen nuevas tecnologías. Por un lado, para evitar entrar en más complicaciones de las imprescindibles para que siga funcionando. Por otro, por la idea de que se trata de un software con poca vida por delante. Esto lleva a que cualquier novedad se deje para la siguiente versión. Como consecuencia, la aplicación muchas veces ni siquiera está cerca de los últimos avances tecnológicos.
El coste para la empresa de esta verdadera brecha digital es difícil de calcular, pero implica tanto las oportunidades de negocio perdidas como el conocimiento que el equipo, y no solo el relacionado con tecnología, deja de adquirir. Las personas asumimos los cambios mejor si se producen gradualmente, y dejar durante años que nos acomodemos en una tecnología que no evoluciona puede ser muy traumático el día que nos enfrentemos a todos los cambios juntos.
Como verás, las ventajas de emprender un proyecto de migración o actualización del legacy code que tienes en tu empresa son muchas. Tantas como problemas se pueden (y se deben) evitar. Aunque parezca que los costes en tiempo, dinero y esfuerzo sean elevados, el resultado merecerá la pena y hará que la tecnología se pueda mantener y evolucionar de forma más satisfactoria en los años venideros. Si no estás seguro de cuándo o cómo llevar a cabo el cambio, ponte en contacto con especialistas en código legado.
Comments (0)