Rojo Primero, a Prueba de Manipulación
Effort: free — pura disciplina de orden: el test que igual ibas a escribir se escribe primero, se prueba en rojo y se sella con un commit; el chequeo de manipulación es un solo git diff. Elimina: tests moldeados después del arreglo para pasar, y veredictos verdes que un constructor dobló editando el test.
Un test escrito después del fix no prueba nada — fue moldeado para pasar. Un test que el constructor puede editar prueba menos — se puede doblar para pasar. Así que el test va primero, se sella, y se califica intacto.
Cuándo correrla
Antes de despachar cualquier build o fix donde un test pueda enunciar el comportamiento deseado. Este es el default tanto para arreglos de bugs como para capacidades nuevas.
Pasos
- Escribe el test de contrato en rojo. Enuncia el comportamiento que quieres, en la forma más pequeña que detectaría su ausencia. Debe fallar ahora mismo.
- Pruébalo en rojo. Corre el test y míralo fallar — por la razón correcta. Un test que revienta en el import, o que pasa calladito, no está en rojo. Un test rojo que nadie corrió es una suposición, no una línea base.
- Commitea el test rojo ANTES de despachar al constructor. Registra el id del commit. Ese commit es la línea base roja — el sello anti-manipulación.
- Despacha al constructor con un solo trabajo: ponerlo en verde. El constructor tiene prohibido tocar el archivo del test. Dilo en el despacho.
- Califica de forma independiente. Un evaluador que no escribió el cambio
revisa dos cosas:
- el test ahora pasa;
- el archivo del test es byte a byte idéntico a la línea base roja —
git diff <red-sha> HEAD -- tests/test_contract.pyno imprime nada. Cualquier diff sobre el archivo del test reprueba la calificación. Sin excepciones, ni siquiera "solo corregí un typo".
- Prefiere una guarda estructural sobre tests puntuales regados. Una guarda estructural es un chequeo (un barrido con grep, un escaneo de AST, una regla de lint) que falla con el PRÓXIMO infractor, no solo con esta instancia. Una guarda gana a diez tests puntuales que fijan un caso cada uno.
Reglas duras
- El rojo se prueba en rojo. Córrelo, míralo fallar, antes de que cuente.
- El constructor nunca edita el test. El diff vacío del archivo de test desde la línea base roja es parte de la compuerta de aterrizaje, no un chequeo de cortesía.
- El constructor nunca es el evaluador. Usa otra persona, otro agente, o un modelo de una familia distinta a la del constructor.
- El verde solo no es prueba. Verde + test intacto + calificación independiente es prueba.
- Cuando hay una clase entera de defecto en juego, guarda la clase. Los tests puntuales frenan este bug; una guarda estructural frena el siguiente.
Combina bien con
- sniper-testing — corre solo los tests que el cambio toca mientras iteras; una pasada completa al aterrizar.
- seam-engineering — la disciplina de arreglar la clase, a la que pertenece la guarda estructural.
- blind-tribunal — evaluadores independientes que nunca vieron al autor.
- repair-loop — el loop que lleva rojo → verde → probado de punta a punta.