Decoding Alex

Mata Dragones: Estrategias para Domar el Código Legado

Publicado el 27 de marzo de 2023

El código legado es una realidad ineludible en el desarrollo de software. Ese temible "dragón" que escupe bugs y consume tiempo precioso. La tentación de desecharlo y empezar de cero es fuerte, pero a menudo inviable. Afortunadamente, existe una alternativa poderosa y sostenible: la técnica "Mata Dragones", un enfoque divertido y efectivo para transformar el código existente y mejorar su calidad de forma gradual.


Clarificando Conceptos Clave

Para entender cómo domar a este dragón, primero definamos dos conceptos esenciales:

¿Qué es Código de Calidad?

Imagina un software que es un placer tocar: legible, descriptivo, sostenible, y autoexplicativo. Un código de calidad es aquel que es fácil de entender, mantener, escalar y modificar. Además, es eficiente, seguro, confiable y cumple con todos los requisitos del proyecto. En resumen, es un código que te permite avanzar rápido y con confianza.

¿Qué es Código Legado?

Olvídate de la edad. El código legado no es simplemente 'código viejo'. Es cualquier código que llega a tus manos y del que no tienes un conocimiento profundo. Puede ser el módulo que escribió tu colega ayer, o un sistema de hace diez años. Es ese "dragón de seis cabezas" que, sin los conocimientos adecuados, puede escupir bugs y ralentizar el desarrollo. Nuestro objetivo es domarlo.

El dragón de 6 cabezas del legacy code. Esto es una hydra, pero tú me entiendes.
El dragón de 6 cabezas del legacy code. Esto es una hydra, pero tú me entiendes.

La Estrategia "Mata Dragones": Cómo Enfrentar al Dragón

Para matar a este dragón, combinaremos el poder del refactor con la regla de los tres movimientos del Mata Dragones. Prepárate para el primer movimiento crucial:

1. ¿Por Cuál Cabeza Empiezo? Define tu Alcance

No intentes atacar a todas las cabezas del dragón a la vez. El secreto es definir un alcance manejable. Puedes usar herramientas de análisis de código estático o simplemente elegir un conjunto de clases o módulos para empezar a iterar. Para ayudarte a decidir, pregúntate:


¡Seguridad Ante Todo! Tu Escudo Protector: Los Tests Automatizados

Antes de lanzarte a la batalla, asegúrate de estar bien protegido. Nuestra primera línea de defensa para garantizar que el código sigue funcionando mientras refactorizamos son los tests automatizados. Son tus aliados más poderosos.

Si el concepto de tests automatizados es nuevo para ti, un excelente punto de partida es el Black Box Testing (o test de caja negra).

Un test de caja negra se enfoca en el comportamiento externo del sistema: qué output produce ante un input determinado, sin importar cómo funciona internamente. Es como si observaras una caja negra: metes "algo" por un lado y ves lo que sale por el otro, sin abrirla.

Test de caja negra

Usemos un ejemplo:

Esto es lo que llamamos "capture behaviour" o capturar el comportamiento del sistema. Nos permite tener la confianza de que nuestros cambios no rompen funcionalidades existentes.


La Estocada Final: Refactorizar, Probar, Cubrir

Con un alcance definido y los tests de caja negra cubriéndonos las espaldas, es hora de enfrentar al dragón. En este punto, tu foco debe ser: Refactorizar, Ejecutar los tests y Cubrir lo nuevo con tests unitarios. Este es el momento ideal para buscar una buena cobertura de código. Nuestro objetivo es que todo el código nuevo que añadas o modifiques esté cubierto por tests que garanticen su funcionalidad, aportando una robustez inigualable al software.

Recuerda los Tres Movimientos Clave:

  1. Una cabeza a la vez: Aborda el problema poco a poco, con un scope alcanzable que te permita ver resultados y ganar confianza desde el primer día.
  2. Siempre con el escudo: Los tests automáticos son tu protección. Asegúrate de que te cubran las espaldas en todo momento.
  3. Refactoriza, Prueba y Cubre: Esta es la secuencia de la "estocada" que irá debilitando al dragón, mejorando la calidad del código incrementalmente.
El Código de Hammurabi
Los 3 movimientos

El refactor continuo no es un lujo, sino una necesidad para mantener un código vivo, actualizado y a prueba del paso del tiempo. Como desarrolladores, nos permite conocer el código a fondo, reducir el tiempo de entrega de nuevas funcionalidades y, en última instancia, ser más productivos. Desde la perspectiva del producto, nos habilita a ser ágiles y a reducir el Time to Value, entregando valor más rápido a nuestros usuarios. ¡Es hora de matar a tus dragones y liberar el potencial de tu código!

Volver a la página principal