No description
- Rust 100%
| .woodpecker | ||
| src | ||
| tests | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
Lição 51: Engenharia de Revisão (Code Review, Refactoring, Design Patterns)
1. Narrativa
Após cada missão, os pilotos da Academia Æther submetem o código de seus mechas à revisão rigorosa dos engenheiros-chefe. Engenharia de Revisão é a disciplina sagrada de analisar, refatorar e aplicar padrões de projeto para que cada linha de código seja digna do campo de batalha. O piloto sênior não apenas escreve código funcional — ele revisa, refina e eleva o trabalho de toda a esquadra.
2. Conceito
Code Review e Refactoring são práticas fundamentais para manter a qualidade do software em produção:
- Code Smells: Indicadores de problemas no código (funções longas, parâmetros excessivos, duplicação)
- Refactoring: Reestruturação do código sem alterar comportamento externo
- Design Patterns: Soluções comprovadas para problemas recorrentes (Builder, Strategy, Observer, Factory)
- Complexidade Ciclomática: Medida do número de caminhos independentes em uma função
3. Requisitos
- Classificar severidade de code smells
- Filtrar problemas por severidade
- Calcular pontuação de saúde do código
- Sugerir padrões de projeto para resolver smells
- Gerar relatórios completos de refatoração
- Avaliar se o código está pronto para deploy
4. Design de Dados
graph LR
A[CodeSmell] --> B[classificar_severidade]
B --> C[Severidade]
A --> D[sugerir_padrao]
D --> E[PadraoProjeto]
A --> F[gerar_relatorio_refatoracao]
F --> G[SugestaoRefatoracao]
A --> H[calcular_pontuacao_saude]
H --> I[u32: 0-100]
5. Diagrama de Fluxo
flowchart TD
A[Início: Lista de Smells] --> B[Para cada smell]
B --> C[Classificar Severidade]
C --> D[Sugerir Padrão]
D --> E[Criar Sugestão]
E --> F{Mais smells?}
F -->|Sim| B
F -->|Não| G[Ordenar por Severidade]
G --> H[Calcular Pontuação]
H --> I{Pontuação >= 60?}
I -->|Sim| J[Aprovado para Deploy]
I -->|Não| K[Reprovado - Refatorar]
6. Funções
| Função | Descrição |
|---|---|
classificar_severidade |
Classifica a severidade de um code smell |
filtrar_por_severidade |
Filtra smells por severidade mínima |
calcular_pontuacao_saude |
Calcula pontuação de 0 a 100 |
sugerir_padrao |
Sugere padrão de projeto para smell |
gerar_relatorio_refatoracao |
Gera relatório completo ordenado |
contar_por_severidade |
Conta smells por severidade |
codigo_aprovado_deploy |
Verifica se código pode ser deployado |
calcular_complexidade |
Calcula complexidade ciclomática |
7. Exemplo
let smells = vec![
CodeSmell::FuncaoLonga { funcao: "controle".into(), linhas: 120 },
CodeSmell::MagicNumber { funcao: "calc".into(), valor: 42 },
];
let severidade = classificar_severidade(&smells[0]);
assert_eq!(severidade, Severidade::Critica);
let pontuacao = calcular_pontuacao_saude(&smells);
assert_eq!(pontuacao, 72); // 100 - 25 - 3
8. Missão
- Implementar
classificar_severidadecom regras de classificação por tipo de smell - Implementar
filtrar_por_severidadeusando iterators e comparação deOrd - Implementar
calcular_pontuacao_saudecom sistema de descontos por severidade - Implementar
sugerir_padraomapeando smells para padrões adequados - Implementar
gerar_relatorio_refatoracaogerando sugestões ordenadas - Implementar
contar_por_severidadecom fold ou contagem - Implementar
codigo_aprovado_deployverificando critérios de aprovação - Implementar
calcular_complexidadecontando pontos de decisão no código
9. Como Executar
cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check
10. Dicas
- Use
#[derive(Ord, PartialOrd)]emSeveridadepara comparação fácil - Code smells são melhor modelados como enums com dados associados
- O Builder pattern resolve o problema de construtores com muitos parâmetros
- Complexidade ciclomática = 1 + número de pontos de decisão
matcharms contam como pontos de decisão individuais