No description
Find a file
2026-09-01 13:12:55 +02:00
.woodpecker chore: migrate CI to .woodpecker/{push,branch}.yml 2026-09-01 13:12:55 +02:00
src initial content 2026-09-01 13:12:53 +02:00
tests initial content 2026-09-01 13:12:53 +02:00
.gitignore Initial commit 2026-09-01 11:12:30 +00:00
Cargo.lock initial content 2026-09-01 13:12:53 +02:00
Cargo.toml chore: declare MSRV 1.85 (edition 2024) 2026-09-01 13:12:55 +02:00
LICENSE chore: add AGPL-3.0 license and standard .gitignore 2026-09-01 13:12:55 +02:00
README.md initial content 2026-09-01 13:12:53 +02:00

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

  1. Implementar classificar_severidade com regras de classificação por tipo de smell
  2. Implementar filtrar_por_severidade usando iterators e comparação de Ord
  3. Implementar calcular_pontuacao_saude com sistema de descontos por severidade
  4. Implementar sugerir_padrao mapeando smells para padrões adequados
  5. Implementar gerar_relatorio_refatoracao gerando sugestões ordenadas
  6. Implementar contar_por_severidade com fold ou contagem
  7. Implementar codigo_aprovado_deploy verificando critérios de aprovação
  8. Implementar calcular_complexidade contando 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)] em Severidade para 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
  • match arms contam como pontos de decisão individuais