Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🏺 Software Legado (Legacy Systems)

Segundo Pressman e Maxim (2016), os softwares legados são sistemas mais antigos que demandam atenção contínua dos engenheiros. Embora desenvolvidos há anos (ex: sistemas em Java EE antigo, Cobol ou sistemas monolíticos pesados), eles permanecem em uso por suportarem funções de negócio vitais e indispensáveis para grandes corporações.

📊 Os Desafios Técnicos do Legado

Estes sistemas, muitas vezes chamados de "sistemas de herança", apresentam desafios técnicos significativos no dia a dia de um Desenvolvedor Sênior:

  • 🛠️ Arquiteturas Rígidas: Difíceis de expandir ou integrar com APIs REST modernas.
  • 🍝 Código Espaguete: Funções acopladas que quebram o padrão MVC ou SOLID.
  • 📝 Documentação Escassa: Muitas vezes inexistente.
  • ❌ Falta de Testes: Ausência de validação automatizada (ex: sem cobertura de JUnit).

🌀 Quando Evoluir um Sistema Legado?

A recomendação inicial da engenharia de software é prudente: não altere nada, a menos que o sistema exija modificações significativas para continuar operando. Refatorar "só para usar a tecnologia da moda" é um erro amador.

As razões inevitáveis para a evolução técnica são:

Tipo de MotivaçãoDescrição / Impacto no Ecossistema
AdaptaçãoO software precisa rodar em novos SOs ou nuvem. Ex: Migrar de um servidor Tomcat local para a nuvem da AWS.
AperfeiçoamentoImplementação de regras de negócio modernas.
ExpansãoIntegração via chamadas HTTP (ex: WebClient do Spring) para permitir interoperabilidade.
RearquiteturaReorganização interna, como fatiar um monólito engessado em dezenas de Microservices usando Spring Cloud.

[!TIP] 💡 Dica de Performance: O objetivo da engenharia moderna não é sair construindo coisas novas do zero o tempo todo, mas elaborar estratégias para evoluir o código herdado de forma segura e incremental.