Accueil / Vérifier ce qu'il rend
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.
Ce qu'un contrôle de forme regarde, et ce qu'il rate
| Ce que vérifie un contrôle de forme | Ce qu'il laisse passer silencieusement |
|---|---|
| Le fichier est un HTML ou un JSON valide | Si un chiffre affiché correspond à une valeur interdite |
| Un mot clé requis figure quelque part sur la page | Si la phrase qui l'entoure est vraie |
| La constante source ne montre jamais la valeur interdite | Une constante dérivée de celle-ci, plus loin dans le fichier |
| Le contrôle tourne sur le fichier source | Si la même valeur a survécu jusque dans l'artefact livré |
Une fuite mesurée avec exactitude
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 que cela établit : Le contrôle établit que le chiffre interdit n'apparaît pas écrit tel quel dans le fichier source qu'il a examiné.
Ce que cela n’établit pas : Il n'établit pas que ce chiffre est absent des pages du site réellement affichées aux visiteurs, puisqu'il ne compare jamais la valeur source à la valeur rendue à l'écran.
Les trois calibrages faux les plus courants
- Trop large Ce contrôle établit que le chiffre interdit n'apparaît nulle part sur le site, source et pages affichées comprises.
- Trop étroit Ce contrôle n'établit rien du tout, même pas l'absence du chiffre écrit tel quel dans le fichier source.
- À côté Ce contrôle montre que l'équipe connaissait la règle interdisant ce chiffre avant de l'écrire dans le code.
- 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.
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.