Disclaimer
Este texto foi inicialmente concebido pela IA Generativa em função da transcrição de dois episódios do nosso canal, Dev Eficiente. Se preferir acompanhar por vídeo, é só dar o play.
Introdução
A geração automática de testes é um tópico de grande interesse na engenharia de software, com o potencial de economizar tempo e recursos no processo de desenvolvimento. Recentemente, o surgimento de Large Language Models (LLMs) trouxe uma nova perspectiva para essa área. Neste post, vamos explorar um estudo comparativo entre abordagens tradicionais e baseadas em LLMs para a geração de testes unitários.
O Artigo "TestWars"
O artigo "TestWars: A Competitive Studio of SBST, Symbolic Execution, and LLM-Based Approach to Unit Test Generation" realiza uma análise comparativa de três estratégias para geração automática de testes:
- Search-Based System Testing (SBST), utilizando a ferramenta EvoSuite
- Symbolic Execution, com a ferramenta Kex
- Abordagem baseada em LLMs, usando a ferramenta TestSpark
O estudo também avaliou diferentes LLMs, concluindo que o GPT-4O apresentou o melhor desempenho.
Resultados e Métricas
Os principais resultados foram apresentados através de gráficos, considerando métricas como:
- Taxa de sucesso de compilação
- Cobertura de linhas de código
- Cobertura de branches
- Capacidade de reproduzir bugs conhecidos
De modo geral, as ferramentas EvoSuite (SBST) e Kex (Symbolic Execution) tiveram desempenho superior à TestSpark (baseada em LLM) em termos de sucesso de compilação e cobertura de código. Todas as abordagens apresentaram dificuldades em reproduzir bugs conhecidos, com a TestSpark tendo o pior desempenho nesse quesito.
Direcionamento Humano na Geração de Testes
No caso específico de geração de testes, o autor acredita que não é ideal deixar o LLM decidir tudo sozinho. O resultado final de um LLM é influenciado diretamente pela qualidade do dado de treino e, quando olhamos para os exemplos de testes espalhados pelos repositórios, temos um volume maior de testes mal escritos do que bem.
O resultado é uma tendência da saída padrão ser um teste com asserções ruins, uso exagerado de mocks etc.
Na visão deste que escreve, é necessário enriquecer o contexto(RAG) para aumentar as chances do código de teste gerado realmente trazer valor. Podemos definir a técnica de cobertura desejada (por exemplo, MCDC em vez de cobertura de branches) e fornecer informações contextuais, como a árvore de dependências, interfaces públicas e parâmetros para que o teste fique o mais próximo possível da realidade.
Cautela com a Ideia de "Tudo é um Agente"
É importante ter cuidado com a noção de que "tudo é um agente" e que deixar o LLM resolver tudo sozinho sempre será a melhor abordagem. Em muitos casos, o direcionamento humano ainda é necessário e superior, especialmente quando as tarefas são bem definidas e estruturadas.
Agentes baseados em LLM podem ser úteis para tarefas complexas com muitas variáveis desconhecidas, como fazer compras online buscando os melhores preços. Considerando um cenário onde não existe API padronizada. Se LLM's fossem acessíveis na época da criação do Buscapé, uma opção seria extrair os dados via LLM :).
No entanto, se as informações necessárias estiverem disponíveis (por exemplo, uma lista de lojas com APIs), uma solução programada tradicionalmente pode ser mais eficiente.
Conclusão
Embora as ferramentas baseadas em LLM para geração de testes tenham se tornado mais acessíveis, isso não significa necessariamente que sejam melhores do que as abordagens tradicionais. O artigo "TestWars" e outros estudos sobre código gerado por LLMs reforçam a necessidade de cautela ao adotar essas tecnologias.
A geração automática de testes é uma área promissora, mas ainda requer aprimoramentos e a combinação adequada de técnicas tradicionais e baseadas em IA. O direcionamento humano continua sendo essencial para obter os melhores resultados.
Sobre a Jornada Dev + Eficiente
A Jornada Dev + Eficiente é um treinamento focado em fazer você crescer na carreira como uma pessoa cada vez mais especializada em Entregar Software que Gera Valor com o Máximo de Qualidade e Fluidez.
A Jornada pavimenta este caminho através de uma abordagem integrada, trabalhando diversos aspectos que influenciam na qualidade da entrega final, tais como: Engenharia de Requisitos, Design de Código, Arquitetura, Testes etc. É o único local que você vai encontrar que é 100% focado em fazer você crescer como uma pessoa desenvolvedora de software completa.
Para conhecer mais, acesse https://deveficiente.com
Top comments (0)