Gerador de teste de unidade automático independente de linguagem de código aberto + teste de mutação baseado em LLM para testes automatizados de software
ATUALIZAÇÃO 18/07/2024
Estamos entusiasmados em compartilhar nosso roteiro descrevendo os próximos recursos e melhorias do Mutahunter!
Confira aqui: Roteiro
Adoraríamos ouvir seus comentários, sugestões e qualquer opinião que você tenha sobre testes de mutação. Participe da discussão e compartilhe seus insights sobre o roteiro ou quaisquer outras ideias que você tenha. ?
Características
Gerador de testes unitários: aprimorando a cobertura de linhas e mutações (WIP)
Introdução ao teste de mutação
Exemplos
Integração CI/CD
O Mutahunter pode gerar automaticamente testes unitários para aumentar a cobertura de linhagens e mutações, aproveitando Large Language Models (LLMs) para identificar e preencher lacunas na cobertura de testes. Ele usa modelos LLM para injetar falhas sensíveis ao contexto em sua base de código. Essa abordagem orientada por IA produz menos mutantes equivalentes, mutantes com maior potencial de detecção de falhas e aqueles com maior acoplamento e similaridade semântica com falhas reais, garantindo testes abrangentes e eficazes.
Geração automática de testes unitários: gera testes unitários para aumentar a cobertura de linhagens e mutações, aproveitando LLMs para identificar e preencher lacunas na cobertura de testes. Consulte a seção Gerador de teste de unidade para obter mais detalhes.
Agnóstico de Idioma: Compatível com linguagens que fornecem relatórios de cobertura nos formatos Cobertura XML, Jacoco XML e lcov. Extensível para linguagens adicionais e estruturas de teste.
Mutações sensíveis ao contexto LLM: utiliza modelos LLM para gerar mutantes sensíveis ao contexto. A pesquisa indica que os mutantes gerados pelo LLM têm maior potencial de detecção de falhas, menos mutantes equivalentes e maior acoplamento e similaridade semântica com falhas reais. Ele usa um mapa de todo o seu repositório git para gerar mutantes contextualmente relevantes usando o repomap do auxiliar. Suporta LLMs auto-hospedados, Anthropic, OpenAI e qualquer modelo LLM via LiteLLM.
Mutações baseadas em diferenças: executa testes de mutação em arquivos e linhas modificados com base nas últimas alterações de commit ou pull request, garantindo que apenas partes relevantes do código sejam testadas.
Análise de mutantes sobreviventes do LLM: analisa automaticamente os mutantes sobreviventes para identificar potenciais pontos fracos no conjunto de testes, vulnerabilidades e áreas de melhoria.
Esta ferramenta gera testes unitários para aumentar a cobertura de linhagens e mutações, inspirada nos artigos:
Melhoria automatizada de testes de unidade usando grandes modelos de linguagem na Meta: - Usa LLMs para identificar e preencher lacunas na cobertura de testes.
Geração Eficaz de Testes Utilizando Grandes Modelos de Linguagem Pré-treinados e Testes de Mutação: - Gera testes que detectam e eliminam mutantes de código, garantindo robustez.
## vá para exemplos/java_maven## remova alguns testes de BankAccountTest.javamutahunter gen-line --test-command "mvn test -Dtest=BankAccountTest" --code-coverage-report-path "target/site/jacoco/jacoco. xml" --coverage-type jacoco --test-file-path "src/test/java/BankAccountTest.java" --source-file-path "src/main/java/com/example/BankAccount.java" --model "gpt-4o" --target-line-coverage 0,9 --max-attempts 3 Cobertura da linha aumentou de 47,00% para 100,00% A cobertura de mutação aumentou de 92,86% para 92,86%
# Instale o pacote Mutahunter via GitHub. Python 3.11+ é necessário.$ pip install muthaunter# Trabalhe com GPT-4o em seu repositório$ export OPENAI_API_KEY=sua-chave-vai-aqui# Ou trabalhe com os modelos da Anthropic$ export ANTHROPIC_API_KEY=sua-chave-vai-aqui# Execute Mutahunter em um arquivo específico. # O relatório de cobertura deve corresponder ao comando de teste.$ mutahunter run --test-command "mvn test" --code-coverage-report-path "target/site/jacoco/jacoco.xml" --coverage-type jacoco -- modelo "gpt-4o-mini". . . . .-. .-. . . . . . . .-. .-. .-.|/| | | | |-| |-| | | || | |- |(' ` `-' ' ` ' ' ` `-' ' ` ' `-' ' '2024-07-29 12:31:22,045 INFO:=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Cobertura geral de mutação: 100,00% ? Cobertura: 63,33% ? Mutantes totais: 30 ??️ Mutantes sobreviventes: 11 ?️ ?️ Mutantes mortos: 19 ?️ Mutantes de tempo limite: 0 Mutantes de erro de compilação: 0 ? ?=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=2024-07-29 12 :31:22.050 INFO: Relatório HTML gerado:mutation_report.html2024-07-29 12:31:22.058 INFO: Relatório HTML gerado: 1.html2024-07-29 12:31:22.058 INFORMAÇÕES: O teste de mutação foi concluído em 127s.
Vá para o diretório de exemplos para ver como executar o Mutahunter em diferentes linguagens de programação:
Verifique Exemplo de Java para ver alguns exemplos interessantes de testes de mutação baseados em LLM.
Exemplo Java
Vá exemplo
Exemplo de JavaScript
Exemplo de FastAPI em Python
Sinta-se à vontade para adicionar mais exemplos!
Você pode integrar o Mutahunter ao seu pipeline de CI/CD para automatizar o teste de mutação. Aqui está um exemplo de arquivo de fluxo de trabalho do GitHub Actions:
nome: Mutahunter CI/CD em: push: ramos: - main pull_request: ramos: - mainjobs: mutahunter: executa-on: ubuntu-latest passos: - nome: repositório Checkout usa: actions/checkout@v4 com: fetch-profundidade: 2 # necessário para git diff - nome: Configurar Python usa: actions/setup-python@v5 com: python-version: 3.11 - nome: Instalar Mutahunter executar: pip install mutahunter - nome: Configure o Java para seu projeto usa: actions/setup-java@v2 com: distribuição: "adopt" java-version: "17" - nome: Instale dependências e execute testes execute: mvn test - nome: Execute o ambiente Mutahunter: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} execute: | mutahunter execute --test-command "teste mvn" --code-coverage-report-path "target/site/jacoco/jacoco.xml" --coverage-type jacoco --model "gpt-4o" --diff - nome : Comentário de PR que a cobertura de mutação usa: thollander/[email protected] com: filePath: logs/_latest/coverage.txt