Yeda AI Tips · #138

English

Nunca conviertas un test intermitente en una compuerta obligatoria

Volver a correr un build en rojo es entrenar a tu equipo para ignorar CI. La primera vez que un check obligatorio se pone en rojo y alguien le da a "re-run" y se pone verde, aprendió una lección: rojo no significa roto, significa intenta de nuevo. Repítelo unas cuantas decenas de veces y toda la suite se vuelve ruido de fondo — nadie lee la falla, solo reintentan hasta que el dado cae en verde.

Pasar al reintentar es un defecto, no un tropiezo

Un test que pasa en la segunda corrida sin cambiar el código es, por definición, no determinista. Algo tuvo una condición de carrera: una suposición de tiempo, un fixture compartido, un global dependiente del orden, una llamada de red sin mock. La intermitencia es una señal — muchas veces es el único síntoma de una condición de carrera real que también tienes en producción. Cuando la tapas con reintentos automáticos, tiras la señal y te quedas con el bug.

Martin Fowler lo puso sin rodeos: los tests no deterministas son "una infección virulenta que puede arruinar por completo toda tu suite de tests". Su aritmética es lo que asusta — una suite de 100 tests con apenas 10 intermitentes fallará en la mayoría de las corridas. Y "una vez que se pierde esa disciplina, una falla en los tests deterministas sanos también se ignora". Una intermitencia no te cuesta un test. Te cuesta la credibilidad de todos.

Pon en cuarentena, no lo hagas obligatorio

El arreglo es aburrido y funciona: mantén el test intermitente fuera de la compuerta obligatoria. Tres movimientos, en orden:

PasoQué hacesQué NO debes hacer
1. CuarentenaMueve el test a una suite no bloqueante que igual corre y reportaNo lo borres ni le pongas skip — perderías la señal
2. Registra el arregloAbre un ticket con dueño y fecha límiteNo lo dejes sin dueño — la cuarentena se vuelve un cementerio
3. Reporta, no bloqueesDeja que se muestre en rojo en el PR sin hacer fallar el mergeNo agregues retries: 3 al job obligatorio

El test sigue corriendo. Sigue reportando. Solo que ya no puede tomar de rehén el PR de otra persona mientras alguien persigue la condición de carrera. Ahora verde significa verde: cada check obligatorio que pasa realmente pasó, de forma determinista, y nadie está aprendiendo a darle a reintentar por reflejo.

Trucos para usuarios avanzados

Recursos

¿Desarrollas con agentes de IA? Yeda AI ayuda a los equipos a construir disciplina de CI y de tests en la que los agentes (y las personas) pueden confiar.

Habla con nosotros · Lee el blog