Ir para o conteúdo

Blogue ·

Três falhas que nenhum script conseguia ver

Oito artigos em oito línguas passavam toda a verificação automática. Um leitor encontrou um número inventado, meia frase e um título desmentido pelas ligações.

Por Provibr

Publicamos em nove línguas. O inglês é a fonte e as outras oito são traduções, e há à volta delas uma parede de automação: uma comparação de estrutura que verifica que os cabeçalhos, as tabelas e as listas coincidem, uma comparação de factos que extrai os fragmentos de código e os números de todos os parágrafos e exige que correspondam, um teste de tipografia por língua, uma verificação de ligações, uma verificação de tabelas, uma varredura de disposição a 390 píxeis.

Oito artigos tinham passado em tudo isso. Depois um segundo leitor percorreu esses oito em oito línguas e encontrou coisas a melhorar em todos eles: 44 em neerlandês, 40 em alemão, 47 em espanhol, 35 em francês, 39 em italiano, 22 em português, 55 em romeno, 23 em ucraniano, e 18 que atravessavam línguas. A diferença foram exatamente 307 linhas removidas e 307 linhas acrescentadas em 62 ficheiros.

A maior parte disso é qualidade de tradução vulgar: um registo que escorregou, uma oração que se lê como saída de máquina, um termo que não é o que a indústria diz naquela língua. Três delas são de outro género, e essas três são a razão por que vale a pena registar isto.

Um número que ninguém mediu

Um dos artigos descrevia uma sonda de calibração: um script que planta defeitos deliberados numa página e exige depois que o detetor os encontre, para que uma execução que comunique zero achados se possa distinguir de uma execução que não estava a olhar.

Quatro das oito traduções diziam que a sonda exige três achados.

Ninguém tinha verificado, porque um número numa frase sobre as ferramentas de outra pessoa parece um facto herdado. O script planta três elementos e exige quatro géneros de achado. O texto de origem, em inglês, dizia dois. Uma nota escrita durante a revisão dizia três. Contando as traduções, são três afirmações sobre o número e dois valores distintos, e nenhum desses valores é o que o script exige; cada um deles tinha sido fielmente transportado para várias línguas.

A reparação não foi corrigir o número. Foi retirá-lo. A frase nomeia agora os três defeitos plantados por aquilo que são, e nenhuma tradução declara sequer uma contagem, porque uma contagem naquela posição não acrescenta nada de que um leitor precise e fica refém de um script que alguém há de editar.

A forma geral: um número que veio de um resumo em vez de vir da coisa que descreve há de derivar, e deriva em silêncio, porque continua a ser um número plausível.

Uma frase que perdeu a segunda metade

Uma frase inglesa fazia um contraste: isto é uma recusa, não um recurso alternativo. Em duas línguas só a primeira metade sobreviveu. O que ficou era gramatical, fluente, e dizia algo mais fraco e ligeiramente diferente do que a fonte dizia.

A parte interessante é como foi encontrada. Seis dos oito leitores, a trabalhar de forma independente na sua própria língua, assinalaram a mesma frase. Em seis línguas já estava certa. Duas tinham perdido o contraste e eram a razão por que o assunto voltava sempre.

Uma comparação de estrutura não consegue ver isto, porque um parágrafo com menos uma oração continua a ser um parágrafo. Uma comparação de factos também não o consegue ver, porque ali não há número nenhum nem fragmento de código nenhum. A única coisa que apanha um contraste perdido é alguém ler a frase e perguntar com o que está a ser contrastada.

Um título que discordava de todas as ligações que apontavam para ele

Os nossos artigos ligam-se uns aos outros. A fonte inglesa do quarto artigo tinha um título a descrever uma coisa ao lado de outra, e todas as ligações de entrada usavam a mesma formulação.

Em quatro línguas o título tinha sido traduzido como por baixo de e todas as ligações de entrada como ao lado de. Portanto um leitor carregava numa ligação que prometia uma coisa e aterrava numa página cujo cabeçalho afirmava outra.

A verificação de ligações passa isto sem reclamar, e vale a pena ser preciso sobre a razão: ela confirma que o destino de uma ligação existe e responde. Uma ligação com o texto errado aponta para uma página que existe. Não há nada que uma verificação de HTTP possa notar.

A correção é uma regra e não uma reparação: o título de um artigo e todas as ligações que apontam para ele são uma só cadeia de texto numa tradução, e são revistos como uma só cadeia. Isso é fácil de dizer e fácil de esquecer, porque os dois vivem em ficheiros diferentes.

Duas guardas novas, e porque é que uma delas tem de contar ao contrário

Duas destas três estão agora automatizadas, e a automação foi provada vermelha antes de merecer confiança, sobre uma cópia da árvore com defeitos plantados.

A primeira guarda cobre os nomes intraduzíveis fora dos fragmentos de código. A comparação de factos já cobre tudo o que esteja entre acentos graves. O que ela não consegue ver é um nome de produto, um nome de protocolo ou um item de menu que apareça em texto corrido sem eles: esses são exatamente os símbolos que quem traduz traduz, corretamente por instinto e erradamente de facto. Numa ronda anterior três línguas tinham traduzido o nome de um menu; noutra, as oito tinham tirado uma propriedade de CSS de um fragmento de código e tinham-na transformado em prosa.

A segunda guarda cobre os números escritos por extenso. A comparação de factos normaliza os algarismos entre línguas, portanto um separador de milhares escrito como ponto, como espaço ou como vírgula compara igual. É por construção cega a um número escrito por extenso, e neste estilo da casa quase todos os números da fonte inglesa estão escritos por extenso.

Essa guarda tem uma subtileza que custou a credibilidade a uma primeira versão. Conta as ocorrências de cada valor por artigo, na fonte como palavra ou como algarismo e em cada tradução como o numeral dessa língua ou como algarismo. A implementação ingénua conta cada valor de forma independente, e então «quarenta e um» também é contado como uma ocorrência de «quarenta». Na primeira execução isso produziu 37 achados falsos, o que é mais do que suficiente para alguém concluir que a guarda é ruído e deixar de a ler.

A correção é contar do valor maior para o menor e apagar do texto cada correspondência à medida que é encontrada, de modo que, quando se procura «quarenta», já não há nenhum «quarenta e um». É um pequeno pormenor de implementação com uma grande consequência: uma guarda que dá o alarme em falso é pior do que guarda nenhuma, porque ensina as pessoas a saltar uma linha na saída.

O que o leitor percebeu mal

Um dos achados da revisão estava ele próprio incorreto, e é instrutivo.

O leitor de neerlandês comunicou que a ênfase sobre uma determinada palavra se tinha perdido nas oito línguas. Seis das oito tinham-na. O leitor de neerlandês conseguia ver um ficheiro como deve ser e tinha inferido o resto.

Passa a ser uma regra: um leitor que trabalha numa língua comunica sobre essa língua. Uma afirmação sobre oito ficheiros é uma medição, e precisa de um script ou de oito ficheiros abertos, não de uma impressão.

Houve um achado relacionado que se revelou uma divisão genuína e não um erro. Quatro dos oito artigos neerlandeses usavam o registo formal e quatro usavam o informal. Em todo o catálogo neerlandês, 47 de 90 ficheiros são formais. Isso não é um defeito para corrigir em oito ficheiros; é uma decisão que tem de ser tomada uma vez e aplicada em todo o lado, e a ronda registou-a em vez de escolher um lado em silêncio.

Seis coisas erradas na fonte

A revisão produziu também seis achados que não eram de todo problemas de tradução. O inglês estava errado, e oito línguas tinham traduzido fielmente a coisa errada.

Deliberadamente, esses não foram corrigidos em oito línguas. Foram comunicados em relação à fonte e tratados numa ronda separada, que alterou primeiro o inglês e depois puxou cada frase corrigida pelas oito traduções, para que as oito continuassem a ser traduções de alguma coisa e não oito reparações independentes da mesma frase.

Essa ronda também encontrou alguma coisa: a nota que descrevia um dos seis estava ela própria errada quanto aos números, e é daí que vem a contagem da primeira secção deste artigo. Uma correção que não é confrontada com a fonte é apenas mais uma afirmação.

O que registaríamos

  1. A automação verifica a forma e os factos; não verifica o sentido. Todos estes oito artigos estavam verdes.
  2. Um número que herdou de um resumo há de estar errado mais cedo ou mais tarde. Confronte-o com a coisa, ou retire-o.
  3. A melhor reparação para um número frágil é muitas vezes número nenhum. Nomeie as coisas em vez de as contar.
  4. Um contraste perdido deixa uma frase gramatical. Só um leitor o encontra.
  5. Seis leitores a assinalar a mesma frase são um sinal sobre a fonte, e não sobre seis traduções.
  6. Uma ligação com o texto errado aponta para uma página que existe. Nenhuma verificação de HTTP dará alguma vez por isso.
  7. Um título e todas as ligações que apontam para ele são uma só cadeia de texto. Reveja-os em conjunto, ainda que vivam separados.
  8. Prove que uma guarda nova fica vermelha antes de acreditar que está verde. Plante o defeito numa cópia da árvore.
  9. Uma guarda com falsos positivos passa a ser ignorada, o que é pior do que não a ter. Conte do maior para o menor e consuma aquilo que corresponder.
  10. Um leitor comunica sobre a sua própria língua. Uma afirmação sobre oito ficheiros é uma medição.

Para que fique claro o que isto é: a comparação de factos correu sobre 2432 parágrafos sem achados, a comparação de estrutura sobre oito artigos em oito línguas sem nenhum, a guarda de símbolos 248 verificações e a guarda de numerais 240 verificações sem nenhum, a verificação de conteúdo 815 de 815 ficheiros gerados idênticos byte a byte, a bateria de testes da web 4572 verdes, a verificação de metadados 288 de 288, as ligações 153 de 153, as tabelas 198 de 198 e a varredura de disposição 168 de 168 a 390 píxeis contra uma compilação de produção. O teste de tipografia foi provado vermelho com 28 passagens e 3 falhas com defeitos plantados, e verde com 31 depois disso. Por provar: continua a haver um leitor por língua e nenhum deles é falante nativo, e não houve nesta ronda nenhuma medição de acessibilidade nem de deslocamento de disposição. Duas questões de terminologia foram remetidas para decisão em vez de decididas.

Do trabalho de plataforma na Provibr. O que nove catálogos fazem a um conjunto fixo de controlos está em dezasseis mil chaves, nove idiomas, e um script de transformação que danificou três artigos para os quais nunca foi apontado está em um script de conversão que abrangeu demasiado.

Comece com um host e um agente

Crie uma conta, instale o agente com um único comando e ligue o seu primeiro host Proxmox. O período experimental dura 14 dias e não pede quaisquer dados de pagamento.