Ferramenta para identificação de conflitos semânticos em cenários de merge para projetos Python.
O PySMAT trabalha com 4 versões de arquivos Python:
python_files/base.py- Versão base do códigopython_files/left.py- Versão do branch esquerdopython_files/right.py- Versão do branch direitopython_files/merge.py- Versão merged
A ferramenta gera testes automaticamente usando IA (Gemini) ou Pynguin e executa esses testes nas 4 versões para detectar conflitos semânticos.
Este guia explica como executar o PySMAT em um ambiente containerizado usando Docker Compose. Isso garante um ambiente consistente com Python 3.11, independentemente do seu sistema operacional.
Instale o Docker no seu sistema:
- Docker Desktop (Recomendado para Windows e Mac): Download aqui
- Docker Engine (Para Linux): Guia de Instalação
Antes de executar o container, você precisa ajustar o arquivo de configuração (nimrod/tests/env-config.json). Aponte o caminho input_smat para a localização dentro do container. Se estiver na pasta raiz:
"input_path": "/app/input-smat.json",Além disso, certifique-se de que o caminho para os arquivos python em input_smat esteja correto e aponte para a localização dentro do container. Por exemplo:
"scenarioFiles": {
"base": "/app/python_files/base.py",
"left": "/app/python_files/left.py",
"right": "/app/python_files/right.py",
"merge": "/app/python_files/merge.py"
},Configure também a chave da API do Gemini em api_params (campo api-key).
- Se não tiver uma chave, crie acessando esse url com sua conta Google.
Navegue até a raiz do projeto e execute o seguinte comando de acordo com seu SO:
O seguinte comando passa seus IDs de usuário e grupo para evitar problemas de permissão com arquivos gerados:
USER_ID=$(id -u) GROUP_ID=$(id -g) docker compose run --rm --build pysmatNo PowerShell, as variáveis são tratadas de forma diferente:
$env:USER_ID=1000; $env:GROUP_ID=1000; docker compose run --rm --build pysmatNota: No Windows, os UIDs/GIDs padrão 1000 geralmente são suficientes para o Docker Desktop.
Uma vez que o comando termine, você estará dentro do shell em /app. Você pode executar testes ou iniciar uma análise:
# Verifique se o volume está montado corretamente
ls
# Execute a ferramenta
python3 run_experiment.py- Permissão Negada: No Linux, verifique se
USER_IDeGROUP_IDcorrespondem à saída do comandoidno seu terminal host. - Mudanças de Arquivos: Como usamos volumes, qualquer mudança de código feita na sua máquina host será instantaneamente refletida dentro do container.