Sistemas Legados: Desafios e estratégias para manter a atualização
Recentemente, tive uma conversa com um amigo sobre sistemas legados. Ambos trabalhamos principalmente com manutenção e suporte desses sistemas. O ponto central da nossa discussão foi: “Apesar da tecnologia ultrapassada, como podemos mantê-la o mais atual possível?”
Primeiro, identificamos alguns pontos negativos e a partir daí ver o que seria necessário para mantê-los. Vou usar um sistema com o qual já trabalhei como exemplo:
1. Versão da Tecnologia e Framework:
A migração para uma versão mais recente do Framework (no meu caso, o .NET) é crucial. Isso nos permite manter o sistema atualizado e aproveitar as melhorias e novidades oferecidas pelo framework. Afinal, quem não quer trabalhar com tecnologias mais atuais?
2. Arquitetura Desatualizada:
Em sistemas antigos, muitas vezes usamos abordagens que seriam mais eficientes hoje. Por exemplo, trabalhei em um sistema Windows Forms com módulos separados em soluções individuais. No entanto, à medida que as aplicações cresceram, a instalação local se tornou inviável devido ao tempo e tamanho.
Na época, dividimos as aplicações, colocando as camadas mais pesadas no servidor para reduzir o tamanho dos arquivos de instalação. Hoje, a abordagem de micro serviços seria mais adequada, mas naquela época, Web Services eram a opção.
A comunicação entre camadas era feita via HTTP usando um proxy, o que tornava algumas operações lentas, especialmente relatórios exibidos em tela. Atualmente, temos melhores soluções, mas naquela época, precisávamos nos virar com consultas SQL e otimização de dados.
3. Padrões e Melhores Práticas:
Desde o início, devemos considerar padrões e boas práticas. Muitos sistemas legados passaram por várias mãos transformando o código em uma “salada de frutas”, resultando em um código confuso e sem documentação. Esse tipo de situação gerava uma grande dependência dos profissionais mais experientes e antigos na empresa para ajudar a entender como as coisas funcionam.
Mudanças graduais são necessárias para evitar transformar o código em uma “salada de legumes” junto com a “salada de frutas”.
4. Documentação Defasada ou Inexistente:
Esse é um problema comum em sistemas antigos. A falta de documentação, especialmente do código, nos obriga a decifrar o funcionamento com base na leitura e tentativa.
Uma solução é criar uma Wiki com boas práticas e documentar as principais regras e fluxos do sistema.
5. Testes Unitários, Automatizados e Manuais em Sistemas Legados
Vamos discutir os diferentes tipos de testes em sistemas legados e as estratégias para mantê-los atualizados.
A. Testes Unitários:
Bons testes unitários dependem da qualidade do código. Em sistemas mais antigos, pode ser difícil escrever testes unitários, mas há soluções.
Recomendados pelo LinkedIn
Se possível, faça refatorações aplicando o princípio da Responsabilidade Única (SRP) do SOLID e, em seguida, escreva os testes.
Se o refactoring não for viável, concentre-se nas partes críticas dos métodos e escreva testes, mesmo que sejam básicos.
B. Testes Automatizados:
A automação de testes é desafiadora em sistemas legados. Identificar ferramentas adequadas e mapear os pontos críticos é essencial para evitar surpresas para os usuários.
No passado, os testadores encontraram ferramentas interessantes para testar aplicativos Windows Forms.
C. Testes Manuais:
Infelizmente, muitas vezes, os testes manuais são a única opção. Eles garantem o fluxo básico do sistema, mas não são suficientes para cobrir todos os cenários.
Quando ocorrem problemas, é necessário depurar manualmente para encontrar os erros.
6. Monolitão:
Mesmo após dividir o sistema em duas partes (servidor e cliente), ainda temos dois monolitos.
Avalie a possibilidade de modernização, mas lembre-se de estudar as necessidades, prós e contras antes de fazer alterações significativas.
Outros Pontos:
Existem diversos outros pontos como infra estrutura, disponibilidade, versionamento de código... Tantas coisas devem ser observadas que chegamos a esquecer de muitas.
Evite a mentalidade de “time que está ganhando não se mexe”. Às vezes, a manutenção contínua pode evitar problemas maiores no futuro.
Sistemas legados são desafiadores, mas com abordagens cuidadosas, podemos mantê-los funcionando de forma eficaz.
Espero que essa revisão seja útil! Se precisar de mais alguma ajuda, estou à disposição. 😊