Blog ·
Trei defecte pe care niciun script nu le vedea
Opt articole în opt limbi treceau de toate verificările automate. Un cititor a găsit un număr inventat, jumătate de frază și un titlu contrazis de legături.
De Provibr
Publicăm în nouă limbi. Engleza este sursa, iar celelalte opt sunt traduceri, și există un zid de automatizare în jurul lor: o comparație de structură care verifică dacă titlurile, tabelele și listele se potrivesc, o comparație de fapte care scoate fragmentele de cod și numerele din fiecare paragraf și cere să se potrivească, un test de tipografie pentru fiecare limbă, o verificare de legături, o verificare de tabele, un baleiaj de așezare în pagină la 390 de pixeli.
Opt articole trecuseră de toate acestea. Apoi un al doilea cititor a parcurs cele opt în opt limbi și a găsit în fiecare lucruri de îmbunătățit: 44 în neerlandeză, 40 în germană, 47 în spaniolă, 35 în franceză, 39 în italiană, 22 în portugheză, 55 în română, 23 în ucraineană și 18 care treceau dincolo de limbi. Diferența a fost exact de 307 linii scoase și 307 linii puse, în 62 de fișiere.
Cele mai multe dintre acestea țin de calitatea obișnuită a traducerii: un registru care a alunecat, o propoziție care se citește ca ieșire de mașină, un termen care nu este ce spune industria în limba aceea. Trei dintre ele sunt de alt fel, iar acele trei sunt motivul pentru care merită consemnat lucrul acesta.
Un număr pe care nu l-a măsurat nimeni
Un articol descria o sondă de calibrare: un script care plantează dinadins defecte pe o pagină și apoi cere ca detectorul să le găsească, astfel încât o rulare care raportează zero constatări să poată fi deosebită de o rulare care nu se uita.
Patru dintre cele opt traduceri spuneau că sonda cere trei constatări.
Nu verificase nimeni, fiindcă un număr dintr-o propoziție despre uneltele altcuiva arată ca un fapt moștenit. Scriptul plantează trei elemente și cere patru feluri de constatare. Textul sursă, în engleză, spunea două. O notă scrisă în timpul recenziei spunea trei. Numărând și traducerile, sunt trei afirmații despre număr și două valori diferite, iar niciuna dintre acele valori nu este cea pe care o cere scriptul; fiecare fusese purtată cu credință în mai multe limbi.
Reparația nu a fost să corectăm numărul. A fost să îl scoatem. Propoziția numește acum cele trei defecte plantate după ce sunt ele, iar nicio traducere nu mai spune vreo numărătoare, fiindcă o numărătoare în locul acela nu adaugă nimic de care cititorul să aibă nevoie și este ostatica unui script pe care cineva îl va edita.
Forma generală: un număr care a venit dintr-un rezumat și nu din lucrul pe care îl descrie va aluneca, și alunecă în tăcere, fiindcă rămâne un număr verosimil.
O propoziție care și-a pierdut a doua jumătate
O propoziție englezească făcea un contrast: acesta este un refuz, nu o retragere pe o soluție de rezervă. În două limbi a supraviețuit numai prima jumătate. Ce a rămas era corect gramatical, curgător și spunea ceva mai slab și puțin diferit față de ce spunea sursa.
Partea interesantă este cum a fost găsită. Șase dintre cei opt cititori, lucrând independent, fiecare pe limba lui, au semnalat aceeași propoziție. În șase limbi era deja corectă. Două pierduseră contrastul și erau motivul pentru care revenea mereu.
O comparație de structură nu poate vedea asta, fiindcă un paragraf mai scurt cu o propoziție este tot un paragraf. O comparație de fapte nu o poate vedea, fiindcă nu are în ea niciun număr și niciun fragment de cod. Singurul lucru care prinde un contrast pierdut este cineva care citește propoziția și întreabă cu ce anume este ea pusă în contrast.
Un titlu care nu se potrivea cu nicio legătură care ducea spre el
Articolele noastre trimit unele la altele. Sursa engleză a articolului al patrulea avea un titlu care descria un lucru stând lângă altul, iar fiecare legătură care venea spre el folosea aceeași formulare.
În patru limbi titlul fusese tradus cu sub, iar fiecare legătură care venea spre el cu lângă. Așa că un cititor apăsa o legătură care promitea un lucru și ateriza pe o pagină al cărei titlu susținea altceva.
Verificarea de legături trece peste asta fără să se plângă, iar motivul merită spus cu precizie: ea verifică dacă ținta unei legături există și răspunde. O legătură cu text greșit arată spre o pagină care există. Nu are ce să observe o verificare HTTP.
Remediul este o regulă și nu o reparație: titlul unui articol și fiecare legătură care arată spre el sunt un singur șir într-o traducere și sunt recenzate ca un singur șir. Asta este ușor de spus și ușor de uitat, fiindcă cele două trăiesc în fișiere diferite.
Două gărzi noi, și de ce una dintre ele trebuie să numere de-a-ndoaselea
Două dintre aceste trei sunt acum automatizate, iar automatizarea a fost dovedită roșie înainte să i se dea crezare, pe o copie a arborelui cu defecte plantate în el.
Prima gardă acoperă numele care nu se traduc, aflate în afara fragmentelor de cod. Comparația de fapte acoperă deja orice se află între accente grave. Ce nu poate ea vedea este un nume de produs, un nume de protocol sau un element de meniu care stă în text curgător fără ele: acelea sunt tocmai jetoanele pe care traducătorii le traduc, corect din instinct și greșit de fapt. Într-o rundă mai veche, trei limbi traduseseră numele unui meniu; într-alta, toate opt scoseseră o proprietate CSS dintr-un fragment de cod și o făcuseră proză.
A doua gardă acoperă numerele scrise în litere. Comparația de fapte normalizează cifrele între limbi, deci un separator de mii scris ca punct, ca spațiu sau ca virgulă se compară la fel. Este, prin construcție, oarbă la un număr scris în litere, iar în stilul casei acesteia aproape fiecare număr din sursa engleză este scris în litere.
Garda aceea are o subtilitate care a costat o primă versiune tot creditul ei. Numără aparițiile fiecărei valori în fiecare articol, în sursă în litere sau ca cifră, iar în fiecare traducere ca numeralul limbii aceleia sau ca cifră. Implementarea naivă numără fiecare valoare de una singură, iar atunci „patruzeci și unu” este numărat și ca apariție a lui „patruzeci”. La prima rulare, asta a produs 37 de rezultate false, ceea ce este mai mult decât destul pentru ca cineva să tragă concluzia că garda este zgomot și să nu o mai citească.
Remediul este să numărați de la cea mai mare valoare în jos și să ștergeți din text fiecare potrivire pe măsură ce este găsită, astfel încât, până se caută „patruzeci”, orice „patruzeci și unu” să fi dispărut. Este un amănunt mic de implementare, cu o urmare mare: o gardă care strigă degeaba „vine lupul” este mai rea decât nicio gardă, fiindcă îi deprinde pe oameni să sară peste o linie din ieșire.
Ce a greșit cititorul
O constatare din recenzie era ea însăși greșită, iar asta este instructiv.
Cititorul de neerlandeză a raportat că accentuarea unui anumit cuvânt se pierduse în toate cele opt limbi. Șase dintre cele opt o aveau. Cititorul de neerlandeză putea vedea ca lumea un singur fișier și le dedusese pe celelalte.
Aceasta este acum o regulă: un cititor care lucrează pe o limbă raportează despre limba aceea. O afirmație despre opt fișiere este o măsurătoare și are nevoie de un script sau de opt fișiere deschise, nu de o impresie.
A mai existat o constatare înrudită, care s-a dovedit a fi o despicare adevărată și nu o greșeală. Patru dintre cele opt articole neerlandeze foloseau registrul formal, iar patru pe cel informal. În tot catalogul neerlandez, 47 din 90 de fișiere sunt formale. Acesta nu este un defect de reparat în opt fișiere; este o hotărâre care trebuie luată o dată și aplicată peste tot, iar runda a consemnat-o în loc să aleagă în tăcere o tabără.
Șase lucruri greșite în sursă
Recenzia a mai produs șase constatări care nu erau nicidecum probleme de traducere. Engleza era greșită, iar opt limbi traduseseră cu credință lucrul greșit.
Acelea nu au fost reparate dinadins în opt limbi. Au fost raportate față de sursă și rezolvate într-o rundă separată, care a schimbat mai întâi engleza și apoi a trecut fiecare propoziție corectată prin cele opt traduceri, astfel încât cele opt să rămână traduceri ale ceva și nu opt reparații independente ale aceleiași propoziții.
Și acea rundă a găsit ceva: nota care descria una dintre cele șase greșea ea însăși la numere, iar de acolo vine numărătoarea din prima secțiune a articolului acestuia. O corectare care nu este verificată față de sursă este doar încă o afirmație.
Ce am consemna
- Automatizarea verifică forma și faptele; nu verifică înțelesul. Fiecare dintre aceste opt articole era verde.
- Un număr moștenit dintr-un rezumat va fi greșit până la urmă. Verificați-l față de lucrul însuși sau scoateți-l.
- Cea mai bună reparație pentru un număr fragil este adesea niciun număr. Numiți lucrurile în loc să le numărați.
- Un contrast pierdut lasă în urmă o propoziție corectă gramatical. Numai un cititor o găsește.
- Șase cititori care semnalează aceeași propoziție sunt un semnal despre sursă, nu despre șase traduceri.
- O legătură cu text greșit arată spre o pagină care există. Nicio verificare HTTP nu va observa vreodată.
- Un titlu și fiecare legătură spre el sunt un singur șir. Recenzați-le împreună, chiar dacă trăiesc despărțite.
- Dovediți o gardă nouă roșie înainte să o credeți verde. Plantați defectul pe o copie a arborelui.
- O gardă cu rezultate fals pozitive ajunge să fie ignorată, ceea ce este mai rău decât să nu o aveți. Numărați de la mare la mic și consumați ce potriviți.
- Un cititor raportează despre propria lui limbă. O afirmație despre opt fișiere este o măsurătoare.
Ca să fie limpede ce este aceasta: comparația de fapte a rulat peste 2432 de paragrafe fără nicio constatare, comparația de structură peste opt articole în opt limbi fără niciuna, garda de jetoane 248 de verificări și garda de numerale 240 de verificări fără niciuna, verificarea de conținut 815 din 815 fișiere generate identice octet cu octet, suita web 4572 verde, verificarea de metadate 288 din 288, legăturile 153 din 153, tabelele 198 din 198, iar baleiajul de așezare în pagină 168 din 168 la 390 de pixeli, față de o construcție de producție. Testul de tipografie a fost dovedit roșu la 28 trecute și 3 eșuate, cu defecte plantate, și verde la 31 după aceea. Nedovedite: există în continuare un singur cititor pentru fiecare limbă și niciunul dintre ei nu este vorbitor nativ, iar în runda aceasta nu a existat nicio măsurătoare de accesibilitate sau de deplasare în pagină. Două întrebări de terminologie au fost escaladate în loc să fie hotărâte.
Din munca de platformă la Provibr. Ce fac nouă cataloage unui set de comenzi fixe se află în șaisprezece mii de chei, nouă limbi, iar un script de transformare care a stricat trei articole spre care nu fusese niciodată îndreptat se află în un script de conversie care a mers prea larg.