Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HEDGE CLI

Detector híbrido de Eager Test em projetos Java, em nível de método de teste.

O HEDGE combina análise estática + heurística e consulta um LLM apenas em casos de incerteza, buscando reduzir custo sem perder capacidade de classificação. É um projeto independente de Engenharia de Software voltado a análise de código e uso seletivo de IA.

O que este projeto demonstra

  • Parsing de testes Java e extração de features por método.
  • Heurística de baixo custo para classificação inicial.
  • Gate de incerteza para decidir quando consultar um LLM.
  • Ensemble entre heurística e resposta do modelo.
  • Métricas de avaliação como Precision, Recall, F1, MCC e AUC.
  • Medição do custo agregado de chamadas ao LLM.
  • Execução reproduzível via Python ou Docker.

Pipeline

graph LR
    A[Projeto Java] --> B[Extração de features]
    B --> C[Heurística]
    C --> D{Score incerto?}
    D -- Não --> F[Ensemble]
    D -- Sim --> E[LLM]
    E --> F
    F --> G[Predição final]
    G --> H[Métricas opcionais]
Loading

O LLM não é obrigatório. Sem chave configurada, o fluxo continua sem realizar chamadas externas.

Stack

  • Python 3.11+
  • análise de AST / tree-sitter
  • heurísticas e ensemble
  • integração opcional com LLM
  • scikit-learn para métricas
  • Docker

Instalação

Local

git clone https://github.com/rebecanonato89/hedge-cli.git
cd hedge-cli
pip install -r requirements.txt

Docker

docker build -t hedge-cli:latest .

Uso rápido

python -m hedgelib --project /caminho/projeto-java --out /caminho/outputs

A CLI procura testes em src/test/java/**.

Parâmetros principais:

  • --project: raiz do projeto Java.
  • --out: diretório de saída.
  • --features <csv>: reutiliza features previamente extraídas.
  • --config <yaml>: usa configuração alternativa ao hedge.yaml.

Configuração

Variáveis de ambiente suportadas:

HEDGE_GATE=0          desliga consultas ao LLM
HEDGE_LABELS=<path>   ground truth opcional para métricas
LLM_API_KEY            chave do provedor, opcional
LLM_API_URL            endpoint, opcional
LLM_MODEL              modelo, opcional

Exemplo de hedge.yaml:

heuristic:
  threshold: 0.50
llm_gate:
  enabled: true
  gate_low: 0.40
  gate_high: 0.60
ensemble:
  w_heur: 0.60
  w_llm: 0.40
io:
  features_filename: features_all.csv

Principais saídas

Arquivo Conteúdo
methods_index.csv índice dos métodos de teste encontrados
features_all.csv features extraídas por método
heuristic_preds.csv predição e score da heurística
llm_preds.csv resultado do LLM quando consultado
llm_cost.json chamadas, tokens, tempo e custo agregado
ensemble_preds.csv predição final e score do ensemble
metrics_table.csv métricas, quando ground truth é fornecido

Resultado principal: ensemble_preds.csv.

Reprodutibilidade

O repositório mantém dependências, configuração e pipeline versionados para facilitar repetição dos experimentos. Docker também pode ser usado para reduzir diferenças de ambiente.

Contexto

Projeto independente de Engenharia de Software. Ele não faz parte de uma pesquisa de doutorado e não representa código corporativo.

Portfólio: rebecanonato89.dev

About

Hybrid static analysis + LLM pipeline for detecting Eager Test smells in Java test code.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages