Aller au contenu
Mastering Claude

Accueil / Vérifier ce qu'il rend

Vérifier ce qu'il rend8 minApplication

Un contrôle de forme ne voit jamais une valeur fausse

Un contrôle automatisé vérifie presque toujours la forme et très rarement la vérité : un fichier valide, un encodage correct ou un mot clé présent peuvent coexister avec un chiffre faux. Valider une capture de la page qui génère le document ne prouve pas non plus ce que la personne ouvre réellement.

Un contrôle automatisé qui scanne un livrable avant sa publication vérifie presque toujours une seule chose : la forme. Le fichier est-il valide, l'encodage semble-t-il correct, un mot clé attendu apparaît-il quelque part sur la page. Il vérifie très rarement la vérité : le chiffre affiché correspond-il à la bonne valeur, l'affirmation est-elle réellement exacte. Cet écart reste invisible jusqu'au jour où une valeur fausse traverse un contrôle qui affiche tout au vert.

Ce qu'un contrôle de forme ne voit jamais

Une règle interdit de publier un chiffre contesté. La constante source qui le contient respecte la règle à la perfection : elle n'est jamais imprimée directement nulle part. Une seconde constante, dérivée de la première dans le même fichier, s'affiche pourtant sur un grand nombre de pages du site. Plusieurs contrôles automatisés distincts restent au vert, parce qu'aucun d'eux ne compare la valeur réellement affichée à la valeur interdite : ils vérifient la syntaxe, l'encodage, la structure, jamais le sens. La figure qui suit chiffre cette fuite.

Le même défaut prend une forme plus simple avec un contrôle par mot clé : une règle qui exige que le document mentionne un terme donné se satisfait trivialement en écrivant n'importe quoi de faux à côté de ce terme, puisqu'elle ne cherche que le mot, pas son contexte. Ce mécanisme prolonge un vert ne prouve rien tant qu'il n'a pas été prouvé lui-même : un contrôle qui n'a jamais été mis en défaut par le cas précis qu'il devrait attraper ne prouve rien sur ce cas.

Valider ce que la personne ouvre vraiment

Un correctif visuel a été confirmé sur une capture de la page HTML qui génère le document, puis annoncé comme livré. Le fichier ouvert par la personne était un PDF, produit à partir d'une copie du HTML qui n'avait pas encore reçu le correctif : le défaut restait visible dans le PDF distribué, qui n'avait jamais été la chose vérifiée.

Le même piège guette autour des caches : relire une donnée par la voie qui vient de l'écrire ne prouve que la cohérence de cette voie avec elle-même, et une copie en cache peut renvoyer l'ancienne valeur. Cassez-la par un paramètre inédit dans l'adresse, une fenêtre privée ou un serveur sans cache ; un simple rafraîchissement laisse souvent un relais intact.

Quand la mesure elle-même compte de travers

Un contrôle de forme peut aussi se tromper de mesure. Sous Git Bash sur Windows, grep ne compte pas fiablement les retours chariot. Mesurez avec le langage qui applique le seuil, et gardez un témoin qui doit rendre un compte non nul :

printf 'a\r\nb\r\n' > crlf.txt
grep -c $'\r' crlf.txt
node -e "console.log(require('fs').readFileSync('crlf.txt','utf8').split('\r').length-1)"
0
2

Relevée sous Git Bash (GNU grep 3.0), la sortie montre grep à 0 sur un fichier qui contient deux retours chariot, et node à 2 : le témoin prouve que le compteur de node détecte et que celui de grep rate. Sous Windows, grep retire les retours chariot d'un fichier qu'il juge texte avant de chercher ; l'option -U, qui le lit en binaire, rend 2. Sans elle, le compte nul se lit comme un fichier propre. Ailleurs que sous Git Bash, rejouez le témoin avant de conclure.

Le contrôle qui aurait vu la fuite

Même mécanisme, avec un fichier fabriqué : la constante interdite n'est jamais imprimée directement, et un contrôle qui cherche cet affichage ne trouve rien, à raison :

$ printf 'const CHIFFRE_INTERDIT = 999;\nconst AFFICHAGE = CHIFFRE_INTERDIT.toString() + ",00 EUR";\nconsole.log(AFFICHAGE);\n' > /tmp/source-v2m3l7.js
$ grep -c "console.log(CHIFFRE_INTERDIT" /tmp/source-v2m3l7.js
0

Mais quatre lignes plus loin, la constante dérivée reprend cette valeur et s'imprime, elle, à l'exécution :

$ node /tmp/source-v2m3l7.js
999,00 EUR

Ce vert est honnête et pourtant faux pour l'usage visé : il vérifie une ligne du source, pas ce que la personne voit. La leçon tient en un geste : identifier ce que la personne va ouvrir, un PDF, une page en direct, un écran d'application, puis vérifier exactement cette chose, avec l'outil qui l'ouvre vraiment, après avoir cassé le cache. Un contrôle de forme ne doit jamais rester le dernier verrou avant publication.

Figure 1

Ce qu'un contrôle de forme regarde, et ce qu'il rate

Ce que vérifie un contrôle de formeCe qu'il laisse passer silencieusement
Le fichier est un HTML ou un JSON valideSi un chiffre affiché correspond à une valeur interdite
Un mot clé requis figure quelque part sur la pageSi la phrase qui l'entoure est vraie
La constante source ne montre jamais la valeur interditeUne constante dérivée de celle-ci, plus loin dans le fichier
Le contrôle tourne sur le fichier sourceSi la même valeur a survécu jusque dans l'artefact livré
Quatre fuites bien distinctes, la valeur dérivée, le mot clé sans son contexte, et l'artefact final jamais recontrôlé après le fichier source.
Figure 2

Une fuite mesurée avec exactitude

66pages du site
portaient la valeur dérivée interdite pendant que les contrôles automatisés restaient au vert
Incident réel de fuite en production, 2026
3contrôles automatisés
distincts sont restés au vert sans jamais comparer la valeur affichée à la valeur interdite
Incident réel de fuite en production, 2026
4lignes de code
séparaient la constante interdite de la constante dérivée qui a fuité
Incident réel de fuite en production, 2026
La fuite touchait 66 pages, traversait trois contrôles distincts sans qu'aucun ne s'arrête, et tenait à quatre lignes d'écart entre la constante interdite et sa dérivée.
Calibrez vous-même

Une règle interdit d'afficher un chiffre précis sur le site. Un contrôle automatique parcourt le fichier source de la page et cherche ce chiffre écrit tel quel, caractère par caractère. Ce même fichier source contient par ailleurs trois valeurs, écrites séparément à trois endroits du code, dont la somme correspond exactement à ce chiffre.

Écrivez en une phrase ce que ce résultat établit, et en une phrase ce qu'il n'établit pas.

Ce qu’il faut retenir
  • Un contrôle de forme vérifie la syntaxe, l'encodage ou la présence d'un mot clé, jamais si l'affirmation qui l'entoure est vraie.
  • Une valeur interdite peut fuir par une constante dérivée pendant que la constante d'origine reste parfaitement conforme à la règle qui l'interdit.
  • Une capture d'écran de la source ne prouve rien sur le fichier final que la personne ouvre réellement, PDF, export ou page mise en cache.
  • Relire une donnée par la voie qui vient de l'écrire ne prouve que la cohérence de cette voie avec elle-même, pas la valeur réellement servie au visiteur ; sous Git Bash, grep peut aussi compter de travers, d'où un témoin positif mesuré avec le langage qui applique le seuil.
  • Casser un cache exige un geste actif, un paramètre inédit, une fenêtre privée ou un serveur sans cache : un simple rafraîchissement ne suffit pas toujours.
À faire maintenant

Reprenez un livrable que vous venez de produire, notez ce que son contrôle de forme ne peut pas voir, puis vérifiez cela séparément sur la version finale réellement ouverte par la personne concernée.