El código fuente es el corazón de un software. El fu­n­cio­na­mie­n­to apropiado del programa y la di­s­po­ni­bi­li­dad de sus funciones dependen de las in­s­tru­c­cio­nes y comandos enu­n­cia­dos en el código. Los pro­gra­ma­do­res editan, mantienen y ac­tua­li­zan este código re­gu­la­r­me­n­te para pro­po­r­cio­nar a los usuarios la mayor usa­bi­li­dad 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 de­sa­rro­lla­do­res y pro­gra­ma­do­res siempre es pro­ble­má­ti­co mantener y ac­tua­li­zar un software con código que no hayan escrito ellos mismos o que fue escrito para sistemas ope­ra­ti­vos obsoletos o con versiones an­ti­cua­das del lenguaje de pro­gra­ma­ción. Aquí te contamos qué es exac­ta­me­n­te el legacy code y las mejores maneras de trabajar con él.

De­fi­ni­ción del legacy code

El término legacy code se utiliza en la in­ge­nie­ría de software para referirse al código que se ha quedado obsoleto y que, por lo general, ya no se de­sa­rro­lla ac­ti­va­me­n­te. El legacy code se puede definir, en cierto modo, como lo opuesto al clean code, fácil de co­m­pre­n­der in­tui­ti­va­me­n­te, de mantener y de adaptar. El legacy code es in­e­fi­cie­n­te, anticuado y caótico, lo que puede ocasionar multitud de problemas. El si­g­ni­fi­ca­do exacto del término depende en gran medida del punto de vista del de­sa­rro­lla­dor y de la situación pa­r­ti­cu­lar. En principio, sin embargo, el legacy code se ca­ra­c­te­ri­za por los si­guie­n­tes aspectos:

  • El de­sa­rro­lla­dor original ya no mantiene el código.
  • El código se escribió ori­gi­na­l­me­n­te para sistemas ope­ra­ti­vos que ya no tienen soporte.
  • No se pueden realizar pruebas au­to­má­ti­cas para detectar errores.

¿Cuáles son las de­s­ve­n­ta­jas del legacy code?

¿Por qué se utiliza el legacy code si tiene tantos in­co­n­ve­nie­n­tes? Si­m­ple­me­n­te, porque es in­e­vi­ta­ble: a menudo, durante un proyecto un nuevo pro­gra­ma­dor se hace cargo del ma­n­te­ni­mie­n­to y de­sa­rro­llo del código. Mientras el de­sa­rro­lla­dor original del código podía co­m­pre­n­de­r­lo en la mayoría de los casos in­tui­ti­va­me­n­te, los nuevos miembros del equipo tienen que es­fo­r­zar­se para descubrir qué hace. En ese caso, es posible que partes del código no se puedan leer o no se co­m­pre­n­dan co­rre­c­ta­me­n­te.

Cuando un código es mantenido, mejorado y editado por varios pro­gra­ma­do­res di­fe­re­n­tes durante muchos años, puede acabar co­n­vi­r­tié­n­do­se en un mosaico muy difícil de co­m­pre­n­der y de modificar. En algún momento de su historia, el código y sus efectos se vuelven in­co­m­pre­n­si­bles, lo que hace imposible ac­tua­li­zar­los o co­rre­gi­r­los co­rre­c­ta­me­n­te.

Otro in­co­n­ve­nie­n­te del legacy code es que no permite realizar pruebas de regresión o pruebas au­to­ma­ti­za­das debido a su na­tu­ra­le­za irregular, poco eficiente y difícil de manejar. Por esto, los de­sa­rro­lla­do­res que se enfrentan al legacy code tienen que invertir mucho más esfuerzo rea­li­za­n­do pruebas manuales, lo que hace que los errores sean más difíciles de solventar y las ac­tua­li­za­cio­nes más co­m­pli­ca­das de im­ple­me­n­tar.

Re­fa­c­to­ri­ng: la respuesta adecuada al legacy code

Los de­sa­rro­lla­do­res tienen varios motivos para ser reacios a lidiar con el legacy code. Uno de los problemas pri­n­ci­pa­les es el hecho de que no pueden probarlo au­to­má­ti­ca­me­n­te para encontrar errores o fallos. Entonces ¿qué pueden hacer los de­sa­rro­lla­do­res si deben en­fre­n­tar­se al legacy code en el curso de un nuevo proyecto?

La solución más apropiada es pro­ba­ble­me­n­te el re­fa­c­to­ri­ng o re­es­tru­c­tu­ra­ción. Con esta es­tra­te­gia de de­sa­rro­llo, el código se re­es­tru­c­tu­ra sin cambiar su función original. No obstante, antes de poder realizar la re­es­tru­c­tu­ra­ción real, los de­sa­rro­lla­do­res deben primero co­m­pre­n­der qué función tiene cada co­m­po­ne­n­te del código. Además, deben probar todas las funciones para poder va­li­dar­las.

Solo una vez co­m­pre­n­di­do cómo funciona el código se puede llevar a cabo el re­fa­c­to­ri­ng pro­pia­me­n­te dicho. El código se optimiza pieza por pieza. Así, se re­es­cri­ben o eliminan las líneas de código re­du­n­da­n­tes, las clases y las variables se si­m­pli­fi­can y fusionan, los métodos de comando se adaptan y re­es­cri­ben. En última instancia, el re­fa­c­to­ri­ng es una revisión general del legacy code. El resultado es un código más fácil de co­m­pre­n­der y de mantener, y más rápido de adaptar.

Ir al menú principal