Testar grátis
7 min leitura Guide 535 of 877

Gerenciando Código Legado em Projetos Ativos

Código legado requer manuseio cuidadoso para evitar quebrar funcionalidades existentes enquanto permite novo desenvolvimento. O GitScrum ajuda times a rastrear trabalho relacionado a legado separadamente, planejar melhorias incrementais e manter visibilidade clara no equilíbrio entre carga de manutenção e desenvolvimento de features.

Estratégias de Código Legado

EstratégiaQuando UsarEsforço
Adicionar apenas testesAlto risco, mudado frequentementeBaixo
Extrair e testarMódulo vale preservarMédio
Envolver e substituirPadrão Strangler FigMédio-Alto
Reescrita completaObsoleto, impossível de manterAlto

Trabalhando com Código Legado

FRAMEWORK DE MELHORIA DE CÓDIGO LEGADO

1. AVALIAR O CÓDIGO LEGADO
┌─────────────────────────────────────────────────┐
│  Para cada componente legado, avaliar:          │
│                                                 │
│  Frequência de Mudança:                         │
│  ├── Alta: Modificado mensalmente   → Priorid. │
│  ├── Média: Modificado trimestr.    → Planejar │
│  └── Baixa: Raramente tocado        → Deixar   │
│                                                 │
│  Taxa de Bugs:                                  │
│  ├── Alta: Bugs frequentes          → Corrigir │
│  ├── Média: Bugs ocasionais         → Melhorar │
│  └── Baixa: Estável                 → Manter   │
│                                                 │
│  Cobertura de Testes:                          │
│  ├── Nenhuma: Sem testes            → Add test │
│  ├── Baixa: < 40%                   → Melhorar │
│  └── Boa: > 70%                     → Manter   │
└─────────────────────────────────────────────────┘

2. CATEGORIZAR ABORDAGEM
┌─────────────────────────────────────────────────┐
│                                                 │
│       Alta Frequência de Mudança               │
│              │                                  │
│   ┌──────────┼──────────┐                       │
│   │ ENVOLVER │ EXTRAIR  │                       │
│   │   E      │   E      │                       │
│   │ SUBST.   │  TESTAR  │                       │
│   │          │          │                       │
│   ├──────────┼──────────┤                       │
│   │  ADIAR   │ ADICIONAR│                       │
│   │  (custo  │ APENAS   │                       │
│   │  excede  │ TESTES   │                       │
│   │ benefício│          │                       │
│   └──────────┴──────────┘                       │
│   Baixa Qual. │ Alta Qualidade                  │
│                                                 │
└─────────────────────────────────────────────────┘

Regra do Escoteiro

PRÁTICA DE MELHORIA INCREMENTAL

REGRA: Deixe o código melhor do que encontrou

AO TOCAR CÓDIGO LEGADO:
┌─────────────────────────────────────────────────┐
│  Antes de fazer sua mudança:                    │
│  1. Adicione testes para o código que modificar │
│  2. Verifique que testes capturam comportamento │
│                                                 │
│  Faça sua mudança:                              │
│  3. Implemente a feature/correção               │
│  4. Garanta que testes continuam passando       │
│                                                 │
│  Deixe melhor:                                  │
│  5. Pequena refatoração (renomear, extrair)    │
│  6. Adicione documentação faltante             │
│  7. Melhore cobertura de teste levemente        │
│                                                 │
│  Restrição: Melhoria adiciona ≤30% ao tempo    │
└─────────────────────────────────────────────────┘

EXEMPLO:
┌─────────────────────────────────────────────────┐
│  Tarefa: Adicionar cálculo de desconto ao pedido│
│  Estimativa: 3 horas                            │
│                                                 │
│  Budget de melhoria: ~1 hora                    │
│                                                 │
│  Melhorias feitas:                              │
│  ├── Adicionei 3 testes para calculateTotal    │
│  ├── Renomeei variáveis confusas               │
│  ├── Extraí lógica duplicada para helper       │
│  └── Adicionei JSDoc para métodos públicos     │
│                                                 │
│  Resultado: Feature funciona + código melhor   │
└─────────────────────────────────────────────────┘

Padrão Strangler Fig

ESTRATÉGIA DE SUBSTITUIÇÃO GRADUAL

ABORDAGEM STRANGLER FIG:
┌─────────────────────────────────────────────────┐
│  Novas features usam novo código               │
│  Features antigas migram gradualmente          │
│  Legado encolhe com o tempo                     │
└─────────────────────────────────────────────────┘

IMPLEMENTAÇÃO:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ ANTES:                                                      │
│ ┌────────────────────────────────────┐                     │
│ │ Sistema Legado Monolítico          │                     │
│ │ ├── Módulo A (usuários)            │                     │
│ │ ├── Módulo B (pagamentos)          │                     │
│ │ ├── Módulo C (relatórios)          │                     │
│ │ └── Módulo D (notificações)        │                     │
│ └────────────────────────────────────┘                     │
│                                                             │
│ DURANTE (gradual):                                          │
│ ┌────────────────────────────────────┐                     │
│ │ Façade/Proxy                       │                     │
│ │ ├─► Novo Módulo A ✓                │                     │
│ │ ├─► Novo Módulo B 🔄               │                     │
│ │ └─► Legado (C, D) ainda funciona   │                     │
│ └────────────────────────────────────┘                     │
│                                                             │
│ DEPOIS:                                                     │
│ ┌────────────────────────────────────┐                     │
│ │ Novo Sistema                       │                     │
│ │ ├── Novo Módulo A ✓                │                     │
│ │ ├── Novo Módulo B ✓                │                     │
│ │ ├── Novo Módulo C ✓                │                     │
│ │ └── Novo Módulo D ✓                │                     │
│ └────────────────────────────────────┘                     │
│                                                             │
│ BENEFÍCIOS:                                                 │
│ • Risco minimizado (sempre funciona)                       │
│ • Valor entregue continuamente                             │
│ • Pode pausar/continuar conforme capacidade                │
│ • Rollback possível em cada etapa                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Gestão de Backlog de Legado

Separando Trabalho de Legado

BACKLOG DE MELHORIA DE LEGADO:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ BACKLOG DE FEATURES (normal):                              │
│ ├── [FEAT] Nova dashboard de analytics                     │
│ ├── [FEAT] Integração com Slack                           │
│ └── [FEAT] Export de relatórios                           │
│                                                             │
│ BACKLOG DE LEGADO (separado):                              │
│ ├── [LEGACY] Adicionar testes ao módulo de pagamento      │
│ ├── [LEGACY] Extrair serviço de autenticação              │
│ ├── [LEGACY] Migrar queries para ORM                      │
│ └── [LEGACY] Documentar API de integração antiga          │
│                                                             │
│ ALOCAÇÃO DE CAPACIDADE:                                    │
│ ─────────────────────────                                   │
│ Features novas:      │ 80%                                 │
│ Melhoria de legado:  │ 15%                                 │
│ Bugs/manutenção:     │ 5%                                  │
│                                                             │
│ POR SPRINT (10 dias):                                      │
│ • 8 dias em features                                       │
│ • 1.5 dias em melhoria de legado                          │
│ • 0.5 dias em manutenção                                   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Métricas de Legado

RASTREANDO PROGRESSO:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ COBERTURA DE TESTES:                                       │
│ ─────────────────────                                       │
│ Jan: ████░░░░░░░░░░░░░░░░ 22%                              │
│ Fev: ██████░░░░░░░░░░░░░░ 31%                              │
│ Mar: ████████░░░░░░░░░░░░ 38%                              │
│ Abr: ██████████░░░░░░░░░░ 45%                              │
│ Meta: ██████████████████░░ 80%                              │
│                                                             │
│ TAXA DE BUGS EM CÓDIGO LEGADO:                             │
│ ──────────────────────────────                              │
│ Jan: 12 bugs/mês                                           │
│ Fev: 9 bugs/mês (-25%)                                     │
│ Mar: 7 bugs/mês (-22%)                                     │
│ Abr: 5 bugs/mês (-29%)                                     │
│ Tendência: ↓ Melhorando                                    │
│                                                             │
│ VELOCIDADE EM ÁREAS LEGADAS:                               │
│ ────────────────────────────                                │
│ Tempo médio para mudança:                                  │
│ Jan: 8 horas → Abr: 4 horas                               │
│ Redução: 50%                                               │
│                                                             │
│ % DO CODEBASE MODERNIZADO:                                 │
│ ──────────────────────────                                  │
│ Módulos migrados: 3/8 (37.5%)                              │
│ Linhas de código legado: 45K → 32K (-29%)                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Melhores Práticas

Checklist de Implementação

CHECKLIST DE GESTÃO DE LEGADO
═════════════════════════════

AVALIAÇÃO:
☐ Inventário de código legado feito
☐ Áreas de alto risco identificadas
☐ Cobertura de testes medida
☐ Dependências mapeadas
☐ Prioridades definidas

PROCESSO:
☐ Backlog de legado separado criado
☐ Capacidade dedicada alocada
☐ Regra do Escoteiro adotada
☐ Testes antes de mudanças (obrigatório)

TÉCNICAS:
☐ Strangler Fig para grandes migrações
☐ Refatoração incremental para pequenas
☐ Interfaces limpas entre legado e novo
☐ Feature flags para transições

MÉTRICAS:
☐ Cobertura de testes rastreada
☐ Taxa de bugs monitorada
☐ Velocidade em legado medida
☐ Progresso de migração visível

CULTURA:
☐ Time entende valor de melhoria
☐ Tempo de legado é respeitado
☐ Documentação é valorizada
☐ Conhecimento é compartilhado

Código legado bem gerenciado deixa de ser um fardo - torna-se um ativo que melhora a cada sprint.

Soluções Relacionadas