Blog ·
Trois défauts qu’aucun script ne pouvait voir
Huit articles en huit langues passaient tout contrôle automatique. Un relecteur a trouvé un nombre inventé, une demi-phrase et un titre démenti par ses liens.
Par Provibr
Nous publions en neuf langues. L’anglais est la source et les huit autres sont des traductions, et il y a un mur d’automatisation autour d’elles : une comparaison de structure qui vérifie que les titres, les tableaux et les listes s’alignent, une comparaison de faits qui extrait de chaque paragraphe les fragments de code et les nombres et exige qu’ils correspondent, un test de typographie par langue, une vérification des liens, une vérification des tableaux, un balayage de mise en page à 390 pixels.
Huit articles avaient passé tout cela. Puis un second relecteur a parcouru ces huit articles en huit langues et a trouvé des choses à améliorer dans chacun d’eux : 44 en néerlandais, 40 en allemand, 47 en espagnol, 35 en français, 39 en italien, 22 en portugais, 55 en roumain, 23 en ukrainien, et 18 qui traversaient les langues. Le différentiel faisait exactement 307 lignes retirées et 307 lignes ajoutées sur 62 fichiers.
La plupart relèvent de la qualité de traduction ordinaire : un registre qui a glissé, une proposition qui se lit comme une sortie de machine, un terme qui n’est pas celui que le métier emploie dans cette langue. Trois de ces constatations sont d’une autre nature, et ces trois-là sont la raison pour laquelle cela vaut la peine d’être noté.
Un nombre que personne n’avait mesuré
Un article décrivait une sonde d’étalonnage : un script qui plante des défauts délibérés sur une page puis exige que le détecteur les trouve, afin qu’une exécution rapportant zéro constatation puisse être distinguée d’une exécution qui ne regardait pas.
Quatre des huit traductions disaient que la sonde exige trois constatations.
Personne n’avait vérifié, car un nombre dans une phrase qui parle de l’outillage de quelqu’un d’autre a l’air d’un fait dont on a hérité. Le script plante trois éléments et exige quatre sortes de constatation. Le texte source, en anglais, disait deux. Une note écrite pendant la relecture disait trois. Les traductions comprises, cela fait trois affirmations sur le nombre et deux valeurs distinctes, et aucune de ces valeurs n’est celle que le script exige ; chacune avait été fidèlement portée dans plusieurs langues.
La réparation n’a pas été de corriger le nombre. Elle a été de le retirer. La phrase nomme désormais les trois défauts plantés par ce qu’ils sont, et aucune traduction n’énonce le moindre décompte, car un décompte à cet endroit n’apporte rien dont un lecteur ait besoin et se trouve à la merci d’un script que quelqu’un modifiera.
La forme générale : un nombre qui vient d’un résumé plutôt que de la chose qu’il décrit dérivera, et il dérive en silence, car il reste un nombre plausible.
Une phrase qui a perdu sa seconde moitié
Une phrase anglaise posait un contraste : ceci est un refus, pas un repli. Dans deux langues, seule la première moitié a survécu. Ce qui restait était grammatical, fluide, et disait quelque chose de plus faible et de légèrement différent de ce que disait la source.
Ce qui est intéressant, c’est la manière dont cela a été trouvé. Six des huit relecteurs, travaillant indépendamment sur leur propre langue, ont signalé la même phrase. Dans six langues, elle était déjà juste. Deux avaient perdu le contraste et étaient la raison pour laquelle elle revenait sans cesse.
Une comparaison de structure ne peut pas voir cela, car un paragraphe plus court d’une proposition reste un paragraphe. Une comparaison de faits ne peut pas le voir, car il n’y a dedans ni nombre ni fragment de code. La seule chose qui attrape un contraste perdu, c’est quelqu’un qui lit la phrase et demande à quoi elle s’oppose.
Un titre qui contredisait chaque lien pointant vers lui
Nos articles se lient les uns aux autres. La source anglaise du quatrième article avait un titre décrivant une chose posée à côté d’une autre, et chaque lien entrant employait la même formulation.
Dans quatre langues, le titre avait été traduit par sous et chaque lien entrant par à côté de. Un lecteur cliquait donc sur un lien promettant une chose et atterrissait sur une page dont le titre en affirmait une autre.
La vérification des liens laisse passer cela sans se plaindre, et il vaut la peine d’être précis sur la raison : elle vérifie que la cible d’un lien existe et répond. Un lien au mauvais texte pointe vers une page qui existe. Il n’y a rien qu’une vérification HTTP puisse remarquer.
Le correctif est une règle plutôt qu’une réparation : le titre d’un article et chaque lien qui pointe vers lui forment une seule chaîne dans une traduction, et ils se relisent comme une seule chaîne. C’est facile à énoncer et facile à oublier, car les deux vivent dans des fichiers différents.
Deux nouveaux garde-fous, et pourquoi l’un des deux doit compter à rebours
Deux de ces trois défauts sont désormais automatisés, et l’automatisation a été prouvée rouge avant d’être crue, sur une copie de l’arborescence dans laquelle des défauts avaient été plantés.
Le premier garde-fou couvre les noms intraduisibles hors des fragments de code. La comparaison de faits couvre déjà tout ce qui est entre accents graves. Ce qu’elle ne peut pas voir, c’est un nom de produit, un nom de protocole ou un élément de menu qui se tient dans le texte courant sans eux : ce sont exactement les jetons que les traducteurs traduisent, correctement par instinct et à tort en fait. Lors d’une ronde antérieure, trois langues avaient traduit le nom d’un menu ; lors d’une autre, les huit avaient sorti une propriété CSS d’un fragment de code pour en faire de la prose.
Le second garde-fou couvre les nombres écrits en toutes lettres. La comparaison de faits normalise les chiffres d’une langue à l’autre : un séparateur de milliers écrit comme un point, une espace ou une virgule se compare donc à égalité. Elle est par construction aveugle à un nombre écrit en toutes lettres, et dans ce style maison presque chaque nombre de la source anglaise est écrit en toutes lettres.
Ce garde-fou a une subtilité qui a coûté sa crédibilité à une première version. Il compte les occurrences de chaque valeur par article, dans la source sous forme de mot ou de chiffre et dans chaque traduction sous forme du numéral de cette langue ou d’un chiffre. L’implémentation naïve compte chaque valeur indépendamment, et alors « quarante et un » est aussi compté comme une occurrence de « quarante ». À la première exécution, cela a produit 37 fausses détections, ce qui est largement assez pour que quelqu’un conclue que le garde-fou est du bruit et cesse de le lire.
Le correctif consiste à compter de la plus grande valeur vers la plus petite et à retirer du texte chaque correspondance à mesure qu’elle est trouvée, de sorte qu’au moment où l’on cherche « quarante », chaque « quarante et un » a disparu. C’est un petit détail d’implémentation aux grandes conséquences : un garde-fou qui crie au loup est pire que pas de garde-fou du tout, car il apprend aux gens à sauter une ligne dans la sortie.
Ce que le relecteur a mal vu
Une constatation de la relecture était elle-même erronée, et elle est instructive.
Le relecteur néerlandais a rapporté que la mise en emphase d’un mot particulier avait été perdue dans les huit langues. Six des huit l’avaient. Le relecteur néerlandais pouvait voir correctement un seul fichier et avait déduit le reste.
C’est désormais une règle : un relecteur qui travaille sur une langue rend compte de cette langue. Une affirmation portant sur huit fichiers est une mesure, et elle demande un script ou huit fichiers ouverts, pas une impression.
Il y avait une constatation voisine qui s’est révélée être une véritable division plutôt qu’une erreur. Quatre des huit articles néerlandais employaient le registre de vouvoiement et quatre le registre de tutoiement. Sur l’ensemble du catalogue néerlandais, 47 fichiers sur 90 sont au registre de vouvoiement. Ce n’est pas un défaut à corriger dans huit fichiers ; c’est une décision qui doit être prise une fois et appliquée partout, et la ronde l’a notée au lieu de choisir un camp en silence.
Six choses fausses dans la source
La relecture a aussi produit six constatations qui n’étaient pas du tout des problèmes de traduction. L’anglais était faux, et huit langues avaient fidèlement traduit la chose fausse.
Elles n’ont délibérément pas été corrigées dans huit langues. Elles ont été signalées contre la source et traitées dans une ronde séparée qui a d’abord changé l’anglais puis a fait passer chaque phrase corrigée dans les huit traductions, afin que les huit restent des traductions de quelque chose plutôt que huit réparations indépendantes de la même phrase.
Cette ronde a trouvé quelque chose elle aussi : la note décrivant l’une des six se trompait elle-même sur les nombres, et c’est de là que vient le décompte de la première section de cet article. Une correction qui n’est pas vérifiée contre la source n’est qu’une affirmation de plus.
Ce que nous noterions
- L’automatisation vérifie la forme et les faits ; elle ne vérifie pas le sens. Chacun de ces huit articles était vert.
- Un nombre dont vous avez hérité d’un résumé finira par être faux. Vérifiez-le contre la chose, ou retirez-le.
- La meilleure réparation pour un nombre fragile est souvent l’absence de nombre. Nommez les choses au lieu de les compter.
- Un contraste perdu laisse une phrase grammaticale. Seul un lecteur le trouve.
- Six relecteurs qui signalent la même phrase sont un signal sur la source, et non sur six traductions.
- Un lien au mauvais texte pointe vers une page qui existe. Aucune vérification HTTP ne le remarquera jamais.
- Un titre et chaque lien vers lui forment une seule chaîne. Relisez-les ensemble même s’ils vivent séparément.
- Prouvez qu’un nouveau garde-fou est rouge avant de le croire vert. Plantez le défaut sur une copie de l’arborescence.
- Un garde-fou à fausses détections finit ignoré, ce qui est pire que de ne pas l’avoir. Comptez du grand vers le petit et consommez ce que vous appariez.
- Un relecteur rend compte de sa propre langue. Une affirmation portant sur huit fichiers est une mesure.
Pour être clair : la comparaison de faits a parcouru 2432 paragraphes sans aucune constatation, la comparaison de structure huit articles en huit langues sans aucune, le garde-fou des jetons 248 vérifications et le garde-fou des numéraux 240 vérifications sans aucune, la vérification de contenu 815 fichiers générés sur 815 identiques octet pour octet, la suite web 4572 verts, la vérification des métadonnées 288 sur 288, les liens 153 sur 153, les tableaux 198 sur 198 et le balayage de mise en page 168 sur 168 à 390 pixels contre une construction de production. Le test de typographie a été prouvé rouge à 28 réussites et 3 échecs avec des défauts plantés, et vert à 31 ensuite. Non prouvé : il y a toujours un seul relecteur par langue et aucun d’eux n’est locuteur natif, et il n’y a eu dans cette ronde aucune mesure d’accessibilité ni de décalage de mise en page. Deux questions de terminologie ont été remontées plutôt que tranchées.
Issu du travail de plateforme sur Provibr. Ce que neuf catalogues font à un ensemble de contrôles de taille fixe est dans Seize mille clés, neuf langues, et un script de transformation qui a abîmé trois articles vers lesquels il n’avait jamais été pointé est dans Un script de conversion qui a ratissé trop large.