Automated Generation of Issue-Reproducing Tests by Combining LLMs and Search-Based Testing

O artigo apresenta o BLAST, uma ferramenta que combina Modelos de Linguagem de Grande Escala (LLMs) e testes baseados em busca (SBST) para gerar automaticamente testes que reproduzem falhas a partir de pares de problemas e correções, demonstrando eficácia superior ao estado da arte em um benchmark e validando seu impacto prático através de um bot no GitHub.

Konstantinos Kitsios, Marco Castelluccio, Alberto Bacchelli

Publicado 2026-03-11
📖 4 min de leitura☕ Leitura rápida

Each language version is independently generated for its own context, not a direct translation.

Imagine que você é um mecânico de carros. De repente, um cliente chega e diz: "Meu carro faz um barulho estranho quando acelero". Você conserta o problema (o "patch" ou correção). Mas, para ter certeza absoluta de que o conserto funcionou e que o problema não vai voltar amanhã, você precisa de um teste.

Esse teste seria algo como: "Pise no acelerador. Se o barulho sumiu, tudo certo. Se o barulho voltou, o conserto falhou."

O problema é que os programadores de software, muitas vezes, estão tão cansados ou com pressa que fazem o conserto, mas esquecem de escrever esse "teste de barulho". Sem o teste, ninguém sabe se o problema foi realmente resolvido ou se vai reaparecer no futuro.

É aqui que entra o BLAST, a ferramenta apresentada neste artigo.

O que é o BLAST?

O BLAST é como um assistente robótico superinteligente que tenta escrever esse "teste de barulho" automaticamente, assim que o programador faz o conserto.

Para fazer isso, o BLAST usa uma estratégia híbrida, misturando duas técnicas poderosas:

  1. O "Cérebro" (LLM - Modelos de Linguagem): Imagine um estudante universitário muito inteligente que leu milhões de livros de programação. Ele entende a descrição do problema ("o barulho estranho") e a correção feita. Ele tenta escrever o teste baseado no que sabe.

    • O problema: Às vezes, esse estudante "alucina". Ele pode inventar peças que não existem no carro ou escrever instruções que não funcionam na prática.
  2. O "Mecânico de Teste" (SBST - Teste Baseado em Busca): Imagine um mecânico experiente que não precisa ler livros, mas sim tentar e errar até acertar. Ele pega o carro, tenta mil combinações diferentes de aceleração, freio e direção, e anota o que acontece. Ele é lento, mas muito preciso e não inventa coisas que não existem.

    • O problema: Ele pode demorar muito e às vezes testa coisas que não têm nada a ver com o barulho específico que o cliente reclamou.

Como o BLAST funciona na prática?

O BLAST é como uma orquestra onde o "Cérebro" e o "Mecânico" trabalham juntos:

  • Passo 1: O Mecânico começa. O robô usa o "Mecânico de Teste" para gerar testes básicos que funcionam no código corrigido. Ele cria uma "semente" (um esboço de teste).
  • Passo 2: O Cérebro polpa. O "Cérebro" (o estudante inteligente) pega essa semente, olha para o problema original e para o código do carro, e escreve um teste muito mais refinado e inteligente, usando o que o Mecânico já descobriu.
  • Passo 3: A Verificação. O robô roda o teste. Se o teste falha no código "quebrado" (antes do conserto) e passa no código "consertado", ele é um sucesso! O robô entrega esse teste para o programador.

O que eles descobriram?

Os pesquisadores testaram esse robô de duas formas:

  1. No Laboratório (Benchmarks): Eles usaram um banco de dados de problemas antigos de software. O BLAST conseguiu criar o teste correto em 35,4% dos casos. Isso é muito melhor do que as ferramentas atuais, que conseguiam apenas cerca de 23,5%.

    • Analogia: Se você tem 100 carros com defeito, o BLAST consegue criar o teste de segurança para 35 deles, enquanto o concorrente só consegue para 23.
  2. Na Vida Real (O Bot do GitHub): Eles criaram um "robô" que vive no GitHub (onde os programadores guardam seus códigos). Sempre que alguém abria um pedido de mudança (Pull Request) relacionado a um problema, o robô tentava criar o teste e sugeria nos comentários.

    • Eles observaram 32 casos reais. O robô sugeriu testes em 11 casos.
    • Os programadores humanos aceitaram e usaram 6 desses testes.
    • A lição: Às vezes, o robô cria um teste tecnicamente correto, mas o programador acha que não é necessário para aquele problema específico, ou o teste é muito "fictício" (usa muitos "mocks", que são como manequins de teste que não representam a realidade).

Por que isso é importante?

Antes, a gente confiava apenas no "Cérebro" (Inteligência Artificial pura) para escrever testes. Mas a IA às vezes inventa coisas. O BLAST mostra que, se você misturar a criatividade da IA com a precisão e a tentativa-e-erro do teste automatizado, você obtém resultados muito melhores.

É como ter um chef de cozinha (IA) que cria receitas incríveis, mas que às vezes usa ingredientes que não existem. O BLAST coloca um assistente de cozinha (SBST) ao lado dele para garantir que os ingredientes são reais e que a receita funciona de verdade antes de servir ao cliente.

Resumo da Ópera: O BLAST é uma ferramenta que ajuda a garantir que os bugs do software sejam realmente corrigidos, criando testes automáticos que combinam o melhor da inteligência artificial com a precisão da engenharia de software tradicional.