Legacy code: cómo trabajar con código obsoleto o desconocido
El código fuente es el corazón de un software. El funcionamiento apropiado del programa y la disponibilidad de sus funciones dependen de las instrucciones y comandos enunciados en el código. Los programadores editan, mantienen y actualizan este código regularmente para proporcionar a los usuarios la mayor usabilidad posible. Los cambios en el código pueden causar errores de software o poner en peligro la capacidad de ejecución de un programa.
Para desarrolladores y programadores siempre es problemático mantener y actualizar un software con código que no hayan escrito ellos mismos o que fue escrito para sistemas operativos obsoletos o con versiones anticuadas del lenguaje de programación. Aquí te contamos qué es exactamente el legacy code y las mejores maneras de trabajar con él.
Definición del legacy code
El término legacy code se utiliza en la ingeniería de software para referirse al código que se ha quedado obsoleto y que, por lo general, ya no se desarrolla activamente. El legacy code se puede definir, en cierto modo, como lo opuesto al clean code, fácil de comprender intuitivamente, de mantener y de adaptar. El legacy code es ineficiente, anticuado y caótico, lo que puede ocasionar multitud de problemas. El significado exacto del término depende en gran medida del punto de vista del desarrollador y de la situación particular. En principio, sin embargo, el legacy code se caracteriza por los siguientes aspectos:
- El desarrollador original ya no mantiene el código.
- El código se escribió originalmente para sistemas operativos que ya no tienen soporte.
- No se pueden realizar pruebas automáticas para detectar errores.
¿Cuáles son las desventajas del legacy code?
¿Por qué se utiliza el legacy code si tiene tantos inconvenientes? Simplemente, porque es inevitable: a menudo, durante un proyecto un nuevo programador se hace cargo del mantenimiento y desarrollo del código. Mientras el desarrollador original del código podía comprenderlo en la mayoría de los casos intuitivamente, los nuevos miembros del equipo tienen que esforzarse para descubrir qué hace. En ese caso, es posible que partes del código no se puedan leer o no se comprendan correctamente.
Cuando un código es mantenido, mejorado y editado por varios programadores diferentes durante muchos años, puede acabar convirtiéndose en un mosaico muy difícil de comprender y de modificar. En algún momento de su historia, el código y sus efectos se vuelven incomprensibles, lo que hace imposible actualizarlos o corregirlos correctamente.
Otro inconveniente del legacy code es que no permite realizar pruebas de regresión o pruebas automatizadas debido a su naturaleza irregular, poco eficiente y difícil de manejar. Por esto, los desarrolladores que se enfrentan al legacy code tienen que invertir mucho más esfuerzo realizando pruebas manuales, lo que hace que los errores sean más difíciles de solventar y las actualizaciones más complicadas de implementar.
Refactoring: la respuesta adecuada al legacy code
Los desarrolladores tienen varios motivos para ser reacios a lidiar con el legacy code. Uno de los problemas principales es el hecho de que no pueden probarlo automáticamente para encontrar errores o fallos. Entonces ¿qué pueden hacer los desarrolladores si deben enfrentarse al legacy code en el curso de un nuevo proyecto?
La solución más apropiada es probablemente el refactoring o reestructuración. Con esta estrategia de desarrollo, el código se reestructura sin cambiar su función original. No obstante, antes de poder realizar la reestructuración real, los desarrolladores deben primero comprender qué función tiene cada componente del código. Además, deben probar todas las funciones para poder validarlas.
Solo una vez comprendido cómo funciona el código se puede llevar a cabo el refactoring propiamente dicho. El código se optimiza pieza por pieza. Así, se reescriben o eliminan las líneas de código redundantes, las clases y las variables se simplifican y fusionan, los métodos de comando se adaptan y reescriben. En última instancia, el refactoring es una revisión general del legacy code. El resultado es un código más fácil de comprender y de mantener, y más rápido de adaptar.