🏺 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ção | Descrição / Impacto no Ecossistema |
|---|---|
| Adaptação | O software precisa rodar em novos SOs ou nuvem. Ex: Migrar de um servidor Tomcat local para a nuvem da AWS. |
| Aperfeiçoamento | Implementação de regras de negócio modernas. |
| Expansão | Integração via chamadas HTTP (ex: WebClient do Spring) para permitir interoperabilidade. |
| Rearquitetura | Reorganizaçã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.