Saltar al contenido

El arreglo era el bug

Temashud, código muerto, instrumentos, método

El síntoma era lo bastante preciso como para servir desde el primer momento: presionas la tecla, oyes el sonido de la tarjeta, no ves nada, y la tecla de aceptar tampoco hace nada. Que el sonido llegue antes que la imagen es una pista, porque el sonido se reproduce antes de que la tarjeta se monte en pantalla.

Montarla crea un lienzo con un nombre, lo cuelga de la raíz del HUD y solo entonces le dice a la tarjeta que se construya. La rutina de construcción barría la raíz del HUD buscando cualquier cosa que ya llevara ese nombre, y para ese momento lo que llevaba ese nombre era el lienzo que le acababan de dar. La tarjeta se borraba a sí misma mientras se dibujaba. La tecla de aceptar no hacía nada porque el árbol de widgets que debía responderle ya no existía.

Esta es la parte que vale la pena guardar. Ese barrido llevaba tiempo en el archivo y nunca le había hecho daño a nadie, porque apuntaba a la raíz equivocada: buscaba dentro de la tarjeta recién creada, nunca encontraba nada y no hacía nada. Era código muerto. Una semana antes lo apuntamos a la raíz correcta, lo llamamos arreglo y convertimos código muerto inofensivo en un suicidio.

En ese mismo tramo de trabajo, otros tres de nuestros instrumentos, las comprobaciones e informes que leemos para saber qué está haciendo el juego, resultaron estar mintiendo. El que más dolió: la comprobación que usábamos para decidir si un vehículo se había creado devuelve verdadero para un vehículo que nunca se construyó. Medido directamente en la consola, el identificador volvía válido, y buscar el vehículo con ese mismo identificador no devolvía nada. Todas las conclusiones que habíamos sacado sobre unidades que el motor del juego rechaza se apoyaban en esa comprobación.

Otro nos costó tres builds. El informe que nos dice si el ajuste de los neumáticos se aplicó comparaba la copia consigo misma, así que imprimía cero de dieciséis para un ajuste aplicado correctamente. Una comprobación que no distingue «falló» de «ya estaba hecho» no es una comprobación.

La lección de método es la barata, y la seguimos pagando a precio completo. Antes de arreglar un camino del código, cuenta en el log cuántas veces corrió de verdad. Antes de hacer funcionar un barrido, mira qué está vivo en el árbol en el momento en que corre. Nadie hizo ninguna de las dos cosas: ni nosotros, ni la revisión que pidió el cambio.