Pular para o conteúdo

O que 80 rodadas de teste revelam sobre agentes de IA e cobertura de bugs

Dan Luu não perguntou de forma abstrata se agentes de IA testam o próprio código. Ele rodou o experimento: 80 execuções do Codex (GPT-5.6 Sol) em duas configurações de esforço — medium e xhigh — implementando compressão Zstd em Rust do zero, mais outras 40 rodadas por condição num protocolo IMAP em paralelo. É esse tipo de número que falta na maioria dos resumos sobre o estudo, e é o que muda a leitura do resultado.

Onde os agentes erram, especificamente

Um dos bugs mais reveladores: na implementação do Zstd, o agente frequentemente deixava de reverter a ordem do bitstream entre encode e decode. Sozinho, isso quebraria qualquer teste — só que os testes que o próprio agente escrevia eram, em boa parte, palindrômicos. Um teste com entrada e saída simétrica não expõe erro de ordem, porque a ordem “errada” ainda bate com a esperada. O agente não estava testando mal por preguiça; estava testando de um jeito que estruturalmente não conseguia pegar aquele tipo de bug.

No protocolo IMAP, o quadro foi parecido: segundo Luu, apenas uma única execução em 40 rodadas (na condição medium) atingiu pontuação perfeita no critério “não cometer nenhum erro”.

O que aconteceu quando ele pediu técnicas específicas

Luu testou 26 técnicas e ferramentas de verificação diferentes — de TDD e fuzzing a métodos formais como ACL2, Alloy e Lean 4. O resultado central do estudo está numa frase do próprio autor: pedir explicitamente pra um agente usar uma técnica específica de teste não muda o resultado tanto quanto ele esperava. Os agentes escreviam testes no framework certo, sintaticamente corretos, mas sem capturar o valor real da técnica.

Com TDD isso ficou nítido: o agente gerava mais testes quando instruído a seguir TDD, só que de qualidade pior — com mais tendência a não cobrir os casos difíceis, exatamente os que importam. Com fuzzing, de 160 rodadas no total, só 10 geraram entradas aleatórias estruturadas de forma efetiva o bastante pra achar bugs reais. E quando o agente usava ferramentas de verificação formal como Verus ou Alloy, a tendência era provar propriedades abstratas que não tinham relação direta com o código sendo verificado — cumpria a forma, não a função.

O skill próprio do autor também não resolveu do jeito esperado

Luu construiu um skill customizado de teste (chamado Hegel no artigo) e testou se ele melhorava o comportamento dos agentes. Foi usado em 157 das 160 rodadas disponíveis, teve o melhor resultado geral entre as abordagens testadas, mas custou entre 26% (esforço medium) e 41% (esforço xhigh) a mais em tokens. E o próprio autor é direto sobre a limitação: o skill não funcionou exatamente como pretendido — a ideia era que o agente usasse contexto fresco e independente pra revisar o próprio código, mas isso raramente aconteceu na prática.

A leitura que fica

O ponto que Luu deixa claro é que o problema não é falta de conhecimento — os modelos claramente sabem escrever sintaxe de teste em qualquer framework pedido. O que falta é o julgamento de quando e como aplicar aquilo de um jeito que realmente cobre o caso que importa. Instrução explícita (“use TDD”, “use fuzzing”) melhora pouco isso, porque o agente segue a forma da instrução sem necessariamente entender o motivo por trás dela.

Pra quem usa agentes de código no dia a dia, a implicação prática é direta: revisar o que o agente testou é tão necessário quanto revisar o código em si — às vezes mais, porque um teste que parece cobrir o caso (como os palindrômicos do exemplo do Zstd) pode estar mascarando exatamente o bug que deveria pegar.