Inicio / Verificar lo que devuelve
Un verde no prueba nada hasta que no ha sido probado el mismo
Un control que nunca ha sido puesto en jaque por un caso que debe encontrar realmente no ha probado nada, en el sentido estricto de que probar exige que un comando concreto se haya ejecutado y que su salida haya sido leída: un detector roto da cero problemas, y eso se lee exactamente como un éxito.
Un script de verificación que informa cero problemas puede significar dos cosas opuestas: el sistema controlado está realmente limpio, o el control mismo ha dejado de funcionar. Nada en un resultado verde permite decidir entre las dos posibilidades mientras ese control no haya fallado al menos una vez frente a un caso que debe encontrar obligatoriamente.
La trampa del cero
Dos casos medidos hacen esta trampa concreta. Un patrón de escape roto produjo un día cero violaciones señaladas allí donde deberían haber aparecido miles. Otro patrón roto, a la inversa, señaló violaciones que no existían, y un orden de operaciones invertido produjo falsas alertas de manera continua en un caso real: la figura que acompaña esta lección cuantifica estos dos fallos con precisión. Ambos venían de la misma causa profunda, una verificación que nunca había sido probada sobre sí misma. El código de salida de una tarea programada plantea la misma trampa: un script puede anunciar un éxito durante semanas mientras el trabajo que se supone debe realizar falla silenciosamente por una razón externa a su propia gestión de errores.
El testigo positivo, demostrado por la ejecución
El remedio se resume en una regla. Un control debe buscar, en el mismo pase, al menos una cosa que debe encontrar, un caso conocido como malo: es el testigo positivo. La demostración se hace en pocas líneas. Un script que busca la palabra prohibida secreto en un archivo, con una expresión regular que olvidó la insensibilidad a mayúsculas, se ejecuta sobre un archivo que contiene dos veces esa palabra escrita con mayúscula inicial.
node verif.js fixture.txt
violations trouvees : 0
Cero. El archivo controlado contiene sin embargo dos ocurrencias de la palabra prohibida. Nada en este resultado distingue un archivo realmente limpio de un control roto, mientras nadie haya verificado que ese control sabe detectar un caso conocido. Añadir la insensibilidad a mayúsculas, exactamente el testigo que este control debe ahora encontrar, cambia el veredicto.
node verif2.js fixture.txt
violations trouvees : 2
Producir el testigo antes de declarar el control activo
El orden de las operaciones importa más de lo que parece. Cablea primero la escritura del testigo en caso de éxito, ejecuta la tarea una vez de verdad para que ese testigo exista realmente, y solo después declara la verificación activa. Invertir este orden, declarar una verificación de testigo antes de que nada escriba ese testigo, entrena a la gente a ignorar todo el sistema de vigilancia: un sistema ignorado vale menos que ningún sistema.
Un último hábito cierra el bucle. Renombra el testigo, nunca lo borres, y confirma que el control reacciona cada vez, luego restáuralo. Enumera también las condiciones que un control de completitud cubre en lugar de resumirlas detrás de una frase del tipo todo va bien: esa frase puede seguir siendo verdadera en una condición y falsa en las otras dos sin que nadie se dé cuenta.
Este principio se prolonga en prueba el verificador antes de creer su veredicto, que aplica la misma exigencia a un script que mide una cifra en lugar de una simple presencia.
Un control probado frente a un control nunca puesto a prueba
Verde ciego
Imposible distinguir un sistema limpio de un control roto.
Verde demostrado
El testigo positivo ya ha demostrado que el mecanismo sabe detectar, este cero es creíble.
Alerta no fiable
Se señala un problema, pero nada prueba que el control no produzca también falsos positivos al azar.
Rojo fiable
El control ya ha demostrado que sabe detectar este tipo de caso, la alerta es creíble.
Dos fallos silenciosos, dos causas distintas
Un equipo añade al script de control un archivo que contiene la palabra prohibida escrita con mayúscula inicial. El script señala ese archivo. La misma semana, ese script se ejecuta sobre todo el repositorio y no señala ninguna otra ocurrencia de la palabra prohibida.
Escribe en una frase lo que este resultado establece, y en una frase lo que no establece.
Lo que esto establece: El resultado obtenido sobre todo el repositorio es creíble para la categoría de problema que representaba el caso añadido, una palabra prohibida escrita con mayúscula inicial.
Lo que esto no establece: No establece que el script detecte otra variante de escritura de la palabra prohibida, como una mayúscula en cada letra, que no ha sido probada.
Los tres calibrados falsos más frecuentes
- Demasiado amplio El script detecta a partir de ahora cualquier variante de escritura de la palabra prohibida, sea cual sea su forma.
- Demasiado estrecho Este resultado no prueba nada en absoluto, ya que el caso añadido solo afectaba a un único archivo del repositorio.
- Fuera de lugar Este resultado muestra que el equipo detectó el problema a tiempo, antes de que causara un incidente en producción.
- Un control automático que nunca ha sido puesto en jaque por un caso conocido malo no prueba nada, aunque lleve meses funcionando sin incidentes.
- El testigo positivo debe ser producido por el mecanismo real que se supone debe probar, nunca inyectado a mano para probar solo la lectura.
- La escritura del testigo de éxito se cablea y se ejecuta una vez de verdad antes de que la verificación se declare activa, nunca en el orden inverso.
- Renombrar periódicamente el testigo, sin borrarlo nunca, confirma que el mecanismo de detección sigue reaccionando.
Elige un control automático en el que confías sin haberlo puesto nunca en jaque, fabrica un caso que debe detectar, ejecuta el control y confirma que lo señala antes de seguir confiando en él.