Skip to content

About

Demo feita como projeto avaliativo da disciplina "Tópicos Especiais em Linguagem de Programação" na UNEB

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

28 Commits

Folders and files

Repository files navigation

MuTAP Demo — Geração de Testes com LLMs e Teste de Mutação

Implementação didática do pipeline MuTAP (Mutation Test case generation using Augmented Prompt), proposto no artigo "Effective Test Generation Using Pre-trained Large Language Models and Mutation Testing" (arXiv:2308.16557) (Dakhel et al., 2023).

Objetivo

Demonstrar como Large Language Models (LLMs) podem gerar testes unitários automatizados e como o Teste de Mutação pode ser usado como mecanismo de feedback para melhorar iterativamente a eficácia desses testes na detecção de bugs.

O projeto implementa o pipeline completo do MuTAP, incluindo todas as etapas do artigo original:

  1. Geração inicial — LLM gera um teste inicial para a PUT (zero-shot ou few-shot)
  2. Correção sintática — Teste é executado; se falhar, LLM corrige erros de sintaxe
  3. Correção semântica — Cada assert é executado individualmente contra a PUT; valores esperados errados são corrigidos automaticamente computando o valor real
  4. Mutação — MutPy cria mutantes (versões com bugs sintéticos) da função
  5. Mutation Score — Testes são executados contra os mutantes → MS inicial
  6. Prompt aumentado — Mutantes sobreviventes viram contexto para o LLM gerar novos testes direcionados
  7. Loop — Repete até MS = 100% ou limite de iterações

fluxo-de-mutacao diagrama-mutap

Stack

Camada Tecnologia Função
LLM Gemini API Geração de testes via API Google (gratuito, gemini-2.5-flash)
Mutação MutPy Gera mutantes (bugs sintéticos) do código testado
Testes Pytest Executa os testes unitários gerados
Linguagem Python 3.11.0 —

Opções de linha de comando

Flag Descrição Padrão
put Caminho do arquivo PUT (obrigatório) —
--shot Tipo de prompt: zero ou few zero
--max-iterations Máximo de iterações de aumento de prompt 3

Referências

Estrutura do projeto

mutap-demo/
├── README.md                   # Este arquivo
├── pyproject.toml              # Dependências (gerenciado pelo uv)
├── .env                        # Configurações (API key, etc.)
├── .env.example                # Modelo do .env
├── .gitignore
├── assets/                     # Imagens para documentação
│   ├── diagrama-mutap.png
│   └── mutation.png
├── put_examples/               # Funções para testar (PUTs)
│   ├── calculator.py           #   add(), divide(), is_even()
│   ├── gradebook.py            #   calculate_grade_statistics()
│   └── string_utils.py         #   reverse(), is_palindrome()
└── src/                        # Código fonte do pipeline
    ├── mutap_pipeline.py       # Orquestrador principal
    ├── llm_option.py           # Interface LLM (Gemini)
    ├── prompts.py              # Templates de prompt (zero-shot, few-shot, aumentado)
    ├── mutation.py             # MutPy runner + parsing de saída + geração de arquivos mutantes
    ├── sintatic_correction.py           # Correção sintática de testes
    ├── semantic_correction.py             # Correção semântica de asserções
    └── utils.py                # Utilitários (path do MutPy, extract_code)

Tutorial

1. Pré-requisitos

# Python 3.11
python --version  #ou python3 --version

# Instalar uv (gerenciador de pacotes)
pip install uv

# Instalar dependências (modo nativo)
uv sync

2. Configurar o LLM

Opção A — Gemini (recomendado):

  1. Acesse aistudio.google.com/apikey
  2. Crie uma API key gratuita
  3. Salve no arquivo .env:
GEMINI_API_KEY=sua_chave_aqui

3. Executar o pipeline

# Pipeline completo (zero shot por padrão)
uv run src/mutap_pipeline.py put_examples/calculator.py

# Few-shot em vez de zero-shot
uv run src/mutap_pipeline.py put_examples/calculator.py --shot few

O pipeline executa as seguintes etapas na ordem:

  1. Carrega a função alvo (PUT)
  2. LLM gera teste inicial (zero-shot ou few-shot)
  3. Correção sintática: valida e corrige o teste gerado para que ele seja executável com pytest
  4. Correção semântica: asserções com valores esperados errados são corrigidas automaticamente
  5. MutPy gera mutantes e calcula Mutation Score inicial
  6. Para cada mutante sobrevivente → prompt aumentado → LLM gera novo teste direcionado
  7. Exibe teste final e MS

Sobre os experimentos

Foram executados sobre os exemplos definidos na pasta /put_examples e o detalhamento do output gerado pode ser visto na branch experiments-v2 desse mesmo repositório. É possível ver uma tabela com resumo dos resultados nessa apresentação: https://canva.link/zfh75gak725tab0 (além de mais conteúdo didático).

About

Demo feita como projeto avaliativo da disciplina "Tópicos Especiais em Linguagem de Programação" na UNEB

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages