Este repositório contém o código-fonte e os dados utilizados na pesquisa sobre a eficácia de Grandes Modelos de Linguagem (LLMs) na detecção de Code Smells em projetos Java.
Pergunta Científica: Modelos de linguagem (especificamente GPT-4o) são capazes de identificar code smells complexos quando submetidos a diferentes estratégias de engenharia de prompt?
Abordagem: A pesquisa avalia a detecção de três smells principais: Long Method, Multifaceted Abstraction e Long Parameter List. O estudo é conduzido através de quatro experimentos progressivos:
- EXP1 (Baseline): Detecção baseada apenas na menção do nome do smell.
- EXP2 (Definições): Inclusão de definições teóricas detalhadas nos prompts.
- EXP3 (Métricas): Enriquecimento do contexto com métricas estáticas de software (ex: LOC, CC, LCOM).
- EXP4 (Tunning): Ajuste de hiperparâmetros (temperatura, top-p) para refinar a precisão.
Arquivos Principais:
main.py: Orquestrador que executa o pipeline completo (download de dados -> experimentos -> relatórios).Experiments.py: Lógica de execução dos 4 experimentos.DataPreparation.py: Tratamento e normalização do dataset (Ground Truth).ExperimentsUtil.py: Definições de prompts, métricas e avaliação.
Siga os comandos abaixo para configurar o ambiente e reproduzir os experimentos.
- Python 3.8 ou superior.
- Uma chave de API válida (OpenAI ou compatível).
Clone o repositório e crie um ambiente virtual para isolar as dependências:
git clone [https://github.com/seu-usuario/seu-repo.git](https://github.com/seu-usuario/seu-repo.git)
cd seu-repopython -m venv .venvNo Linux/Mac:
source .venv/bin/activateNo Windows:
.venv\Scripts\activateInstale as bibliotecas necessárias listadas no requirements.txt:
pip install -r requirements.txtO projeto requer uma variável de ambiente chamada AS_OPENAI_API_TOKEN. Faça:
Linux/Mac:
export AS_OPENAI_API_TOKEN="sua-chave-api-aqui"Windows (PowerShell):
$env:AS_OPENAI_API_TOKEN="sua-chave-api-aqui"Para rodar todo o fluxo (download dos dados, execução dos EXP1-EXP4 e geração dos gráficos):
python main.py
Os resultados (tabelas CSV e gráficos) serão salvos na pasta raiz ou em subdiretórios gerados automaticamente.Para garantir a transparência e reprodutibilidade deste estudo, detalhamos abaixo as configurações utilizadas:
O download é feito automaticamente pelo script (main.py) a partir de um repositório público no Google Drive.
O código utiliza sementes aleatórias padrão do Python. Recomenda-se configurar random.seed(42) e numpy.random.seed(42) caso deseje determinismo estrito (veja Issues do projeto).
Python: 3.10+
pandas, scikit-learn, matplotlib, requests.
Como o processamento pesado ocorre via API externa, não é necessário GPU local. Uma CPU padrão é suficiente para o cálculo das métricas de avaliação.
-
Causa: A variável de ambiente AS_OPENAI_API_TOKEN não foi definida.
-
Solução: Volte ao passo 4 e certifique-se de exportar a variável no mesmo terminal onde executará o script.
-
Causa: Link do Google Drive expirado ou bloqueio de rede.
-
Solução: Verifique se o link em main.py ("download_url") está acessível via navegador. Se necessário, baixe o CSV manualmente e coloque na raiz do projeto.
-
Causa: Dependências não instaladas.
-
Solução: Certifique-se de que o ambiente virtual (.venv) está ativo e rode:
pip install-r requirements.txt novamente.Como o passo a passo menciona o requirements.txt (e o seu código usa bibliotecas externas), você deve criar este arquivo na mesma pasta com o seguinte conteúdo, baseado nas importações que identifiquei em UtilitaryFunctions.py e ExperimentsUtil.py:
pandas
matplotlib
scikit-learn
requests