56 lines
1.7 KiB
Text
56 lines
1.7 KiB
Text
---
|
|
type: rule
|
|
name: refatoracao-segura
|
|
description: Toda refatoração deve preservar comportamento e ter cobertura de testes
|
|
scope: local
|
|
trigger: always_on
|
|
updatedAt: "2026-06-19"
|
|
---
|
|
|
|
# Regra: Refatoração Segura
|
|
|
|
## Contexto
|
|
|
|
Refatoração é a melhoria da estrutura interna do código **sem alterar seu comportamento externo**. Sem essa garantia, refatoração vira regressão.
|
|
|
|
## Regra
|
|
|
|
Antes de executar qualquer refatoração, verificar:
|
|
|
|
1. **Testes existem** — o comportamento que será afetado tem cobertura
|
|
2. **Testes passam** — o estado antes da mudança é verde
|
|
3. **Passos pequenos** — cada mudança deve ser verificável isoladamente
|
|
4. **Sem surpresas** — nenhuma funcionalidade nova introduzida junto com refatoração
|
|
|
|
Se não há testes cobrindo o trecho:
|
|
- **PARAR** a refatoração
|
|
- Solicitar ao `@testes` a criação de testes de cobertura
|
|
- Só prosseguir após testes existirem e passarem
|
|
|
|
## Exemplos
|
|
|
|
### ✅ Correto
|
|
```
|
|
1. Verificar testes existentes para `calcularLicenca()`
|
|
2. Executar testes → todos passam
|
|
3. Extrair cálculo de multa para `calcularMulta()`
|
|
4. Executar testes → todos passam
|
|
5. Commit: "refactor: extrair calcularMulta de calcularLicenca"
|
|
```
|
|
|
|
### ❌ Incorreto
|
|
```
|
|
1. Refatorar `calcularLicenca()` inteiro
|
|
2. Adicionar nova regra de desconto (feature!)
|
|
3. Descobrir que não tinha testes
|
|
4. Commit: "refactor: melhorar cálculos" ← mentira, é feature + refatoração
|
|
```
|
|
|
|
## Impacto
|
|
|
|
Sem esta regra, refatorações introduzem regressões silenciosas que só são descobertas em produção.
|
|
|
|
## Referências
|
|
|
|
- Martin Fowler — "Refactoring: Improving the Design of Existing Code"
|
|
- Persona: `agents/refatorar/persona`
|