🪨 C1 · Introdução · corte 27 ago 2026 · v2.2

C1 · Introdução — o problema do oráculo em teste E2E

O problema do oráculo

2,253palavras
5seções

Camada C1 do estudo WebTestPilot · v2.2 · corte 27 ago 2026 Público: quem chega. Critério de qualidade: situar em dez minutos, sem simplificar errado. A escala de evidência e as convenções de código que o resto do estudo usa estão no § 5.


1 · Todo teste tem duas metades

Um teste é um caso — o que fazer — e um oráculo — como saber se o resultado está certo. Em teste unitário o oráculo é uma linha: expect(soma(2, 2)).toBe(4). O valor esperado é conhecido, pequeno e estável.

Em teste ponta-a-ponta (E2E) o "resultado" não é um valor. É uma página renderizada, com DOM, requisições em voo, animação, estado de sessão e estado de backend. Não existe predicado exato para "esta tela está correta". É possível escrever o caso para cada fluxo; o que custa caro — e quebra a cada redesign — é escrever o oráculo de cada um.

Isso tem nome e idade: é o oracle problem (Barr, Harman, McMinn, Shahbaz & Yoo, TSE 2015). E a assimetria que ele descreve piorou em vez de melhorar. Gerar ação ficou barato: crawler, fuzzer, agente LLM clicando na tela. Julgar o que apareceu continua sendo trabalho humano. Hoje dá para explorar um site inteiro automaticamente; decidir se o que apareceu é bug ou comportamento esperado é o que trava.

O dado que mede isso: o WebTestBench (mar/2026) avaliou dez modelos de fronteira dirigindo o navegador em 100 aplicações e 1.750 casos. Nenhum passou de 30% de F1 — o melhor, GPT-5.1, ficou em 26,4%. Quando os autores entregam o checklist do que verificar, o mesmo modelo vai a 46,8%, e o melhor da tabela (Claude Sonnet 4.5) a 49,2%. Gerar o critério de julgamento é um gargalo — o maior isolado que se mediu, ainda que não o único; há uma leitura alternativa desse dado, registrada como divergência D1 (§ 5).

2 · As seis famílias de oráculo

A literatura canônica (Barr et al., 2015) reconhece quatro gêneros: oráculo especificado (317 trabalhos), derivado (245), implícito (76), e "no test oracle" (56) — como lidar com a ausência de oráculo automatizável, o que na prática é o humano. Este estudo refina os quatro em seis famílias, porque em E2E de navegador o gênero "derivado" abriga três coisas com custo e comportamento muito diferentes — e é numa delas que o estudo se concentra. A equivalência "no oracle = humano/LLM" é editorial e está declarada como tal.

Família Gênero (Barr) O que é Exemplo em E2E Custo de criar Escala em
A Especificado especificado Asserção escrita por humano contra valor esperado conhecido expect(alert).toHaveText("Senha inválida") alto, linear nos fluxos nada — e quebra a cada mudança de cópia
B Derivado de artefato derivado Comparação com snapshot, baseline, contrato ou versão anterior screenshot(head) ≟ screenshot(baseline) baixo — o baseline se gera sozinho cobertura; ruidoso a cada redesign
C Pseudo-oráculo derivado Duas implementações independentes, mesma entrada, saídas comparadas render(Chrome) ≟ render(Firefox); head × produção baixo exige 2ª implementação; cego a bug comum às duas
D Metamórfico derivado Uma relação que deve valer entre as saídas de duas execuções relacionadas. A relação é o oráculo R(filtro A ∧ B) ⊆ R(filtro A) médio, amortizado — uma relação cobre infinitos casos profundidade; dispensa valor esperado
E Implícito implícito Propriedades que são defeito em qualquer aplicação HTTP 5xx, exceção no console, NaN na tela, violação de a11y quase zero teto baixo — nunca acha bug de lógica
F Humano / LLM "no test oracle" Julgamento aberto sobre a tela julga(screenshot, objetivo) → {passou, falhou} baixo instável; <30% F1 quando também tem de gerar o critério, ~49% com o critério dado

Três notas sobre a tabela:

3 · Como se combinam na prática

As famílias não competem. A arquitetura mais rendosa que este estudo encontrou empilha:

E  implícito      varredura em toda execução — custa nada, pega o lixo óbvio
D  metamórfico    relações determinísticas — pega lógica sem valor esperado
F  humano/LLM     só como triador da violação já detectada, nunca como juiz primário
A  especificado   os poucos fluxos críticos que merecem asserção à mão
B  derivado       regressão visual, em camada separada

A regra que organiza tudo, e que o C4 transforma em arquitetura: o modelo pode propor e pode triar; o veredito é código. Isso não é diferencial deste estudo — em 2026 é consenso operacional. Diz o mesmo um trabalho homônimo, o WebTestPilot de Teoh et al. (FSE 2026), agente de teste web de outro grupo e sem relação com este estudo, que avalia seus predicados por código; e disse o mesmo a Octomind, ferramenta de geração de testes por IA que encerrou o produto em 2026 (C3 § 7): "AI should not be used during runtime. It's slow. It's brittle. It's costly." O que distingue a família D é de onde vem o predicado: de uma relação entre execuções, não de uma especificação inferida. É essa origem, e não a regra, que precisa de evidência — e o C4 diz como obtê-la.

4 · Vocabulário mínimo de teste metamórfico

O resto do estudo usa estes termos sem reapresentá-los.

Termo Significado Em E2E de navegador
Caso-fonte Uma execução qualquer, sem expectativa declarada Um fluxo de usuário gravado ou gerado
Transformação Regra que deriva um ou mais casos-seguidores da fonte Perturbar o fluxo: trocar a ordem de dois filtros, refazer a busca em maiúsculas, adicionar e remover o mesmo item
Projeção R(·) A abstração observável da tela que entra na relação. Nunca o DOM inteiro, nunca um screenshot O conjunto de itens de uma lista, um total, o estado de um formulário — extraído com locator tipado ou ARIA snapshot
Relação metamórfica (MR) Propriedade que deve valer entre as projeções de fonte e seguidor. É o oráculo "A lista do seguidor está contida na lista da fonte": R(seguidor) ⊆ R(fonte)
MRP Metamorphic relation pattern — molde de uma família inteira de MRs (Zhou, Sun, Chen & Towey, TSE 2020) "Refinar filtro só pode encolher" é um MRP; aplicado à tela de busca de uma loja, vira uma MR
MRIP Padrão do lado da entrada: que perturbação produz um seguidor válido. (O lado da saída — a operação de conjunto que relaciona os resultados, ⊆, =, ≠ — é o fácil; o C2 § 4 o chama de MROP) É o problema difícil em E2E: qual perturbação do fluxo gravado ainda é um fluxo válido
Violação A relação não valeu. Indica defeito em algum lugar do conjunto — sistema, relação ou ambiente Sem triagem, violação vira falso positivo; com triagem, vira bug report
Ancoragem Oráculo cuja expectativa se move junto com a falha e por isso não pode falhar (Canedo, 2026) Se a relação — operador, direção, observáveis, exclusões — é ajustada depois de ver o diff, a MR passa sempre

Dois termos merecem uma frase a mais.

Mutante é um defeito plantado de propósito no sistema — uma linha comentada, um operador trocado — que a relação tem de detectar. É a resposta à ancoragem: fixar a relação antes de executar e provar que ela falha quando o sistema está errado. Sem isso, uma MR é só uma propriedade necessária — a limitação fundacional do método, conhecida desde 1998: a relação valer não prova que o sistema está certo; ela não valer é que prova que algo está errado.

Projeção é a palavra que carrega o problema. A MR é a parte fácil — "encolher só pode encolher" cabe numa linha. Definir o que comparar, excluindo timestamp, ranking personalizado, animação e tudo que é legitimamente diferente entre duas execuções, é onde mora o trabalho de engenharia. O C4 dedica uma seção a isso.

5 · Como ler o resto do estudo

Camada Pergunta Documento
C2 O que a academia sabe sobre oráculo metamórfico em web, e o que falta para E2E de navegador? Que MRs concretas existem? Por que o navegador é hostil? C2-teoria-mr.md
C3 Que ferramentas existem para gerar o critério e para executar o oráculo? Quem está vivo, quem morreu, quem cobra o quê? C3-mercado.md
C4 Que stack se implementa, em AWS, com que decisões fechadas, a que custo, e por onde se começa? C4-stack-spec.md

Níveis de evidência. Toda afirmação nos quatro documentos carrega um nível: N1 resultado revisado por pares · N2 preprint ou relato dos autores · N3 capacidade declarada por fornecedor · N4 verificação direta nossa, datada · N5 julgamento editorial. Os N4 envelhecem e são reverificados a cada rodada. Os N5 são as afirmações mais importantes e as menos apoiadas — por isso o alvo prioritário de revisão. PISTA marca um indício não confirmado: algo visto de passagem que ainda precisa ser aberto antes de virar afirmação.

Códigos que aparecem nas páginas. As MRs do catálogo são MR-A1MR-C10 (C2 § 4); as classes de custo de uma MR são K0 (sem estado), K1 (par com estado) e K2 (fan-out); as decisões de arquitetura são ADR-01ADR-16 (C4). Uma marca como [protocolo · A15] ao fim de um parágrafo aponta para a asserção falsificável correspondente em pesquisa/protocolo.md § 4 — é rastreabilidade para quem revisa, não leitura obrigatória. Os enunciados E e as divergências D são estes:

# Enunciado de pesquisa Onde se responde
E1 Que famílias de oráculo existem e como se comparam em E2E? C1 § 2
E2 Qual é o estado da arte de MT em web e em fluxo E2E de navegador? C2 § 2–3
E3 Que MRs concretas se aplicam a fluxos, e de que moldes? C2 § 4
E4 Por que o navegador é hostil a MT, e as barreiras ainda valem em 2026? C2 § 6
E5 Que ferramentas geram o critério de julgamento? C3 § 3.4
E6 Que ferramentas executam e monitoram o oráculo? C3 § 3
E7 Que stack se recomenda montar? C4
E8 As 76 MRs de segurança do MST-wi generalizam para teste funcional? C2 § 4
E9a Que fração das MRs instanciadas por LLM sobre uma tela sobrevive à validação? C2 § 5
E9b Que fração dos fluxos E2E reexecuta de forma determinística, e com que camada de isolamento? C2 § 6; C4
E9c Com MR validada em E2E web, que fração das violações é bug de verdade? C2 § 6.4; C4 § 10.3
E10 Como se define R(·) numa app real, e quanto custa? C4 § 5, § 9
E11 Como isso se implanta em AWS e escala? C4
E12 Que bug a família D acha que Meticulous (C) e Bombadil (P) não acham — e quanto o comprador paga por ele? C3 § 7; C4 § 10.3
# Divergência declarada (leituras que o estudo não fechou) Onde
D1 O salto 26,4 → 46,8 do WebTestBench mede "gerar o critério" — ou o checklist também guia a ação, e parte do ganho é de execução? C2 § 2
D2 O mercado não compra especificação — ou não compra ainda? A Octomind morreu por isso, ou por outra razão? C3 § 7
D3 fast-check é gerador e shrinker, não motor de relação; a relação é código próprio C3 § 3.3
D4 O Bombadil já ocupa a Fase 2 (MRs de sessão única) com autoria menor? Vira experimento, não decisão C2 § 7.1; C4 § 12
D5 Quantas horas custa o piloto: 70–100 h em três pilotos; só a primeira etapa foi medida C4 § 10.2
D6 Das 24 MRs, um QA escreveria 9; o estudo mantém as 24 como catálogo e usa as 9 como ponto de partida C2 § 4; C4 § 10.3

O que este estudo não é. É uma revisão narrativa estruturada, não uma revisão sistemática: sem string de busca pré-registrada, sem dupla extração. Afirmações de exaustividade ("nenhum produto faz X") vêm acompanhadas do protocolo de busca que as sustenta, e valem só para o que foi buscado. Nenhum produto comercial foi executado — a capacidade de produto é sempre N3; o Playwright e a aplicação de referência (Vendure) foram executados num laptop para escrever e rodar duas MRs com mutantes (C4 § 9–10); nada foi executado na AWS; nenhum resultado publicado foi replicado. A metodologia completa, as asserções e o registro das rodadas de revisão estão em pesquisa/protocolo.md.


Fontes desta camada: Barr et al. (TSE 2015) · Chen, Cheung & Yiu (1998) · Zhou, Sun, Chen & Towey (TSE 2020) · Segura et al. (TSE 2016; MET 2019) · Kong et al., WebTestBench (2026) · Teoh et al., WebTestPilot (FSE 2026) · Canedo, Oracles That Cannot Fail (2026). Referências completas em pesquisa/bibliografia.md.