Se você é de TI, tenho certeza que já ouviu diversas vezes a expressão “sistema legado”. Porém, a não ser que você tenha realizado uma pesquisa por conta própria, duvido que alguém tenha se dado ao trabalho de lhe explicar o que isso significa. Como ocorre com diversos jargões, muitas pessoas os usam sem saber seu exato significado e quem ouve fica constrangido de dizer que não sabe exatamente o que aquilo significa. Assim surgem as lendas. Afinal, todos nascemos sabendo algo tão óbvio, não é mesmo?
Definindo um sistema legado
Mas o que é um sistema legado? Alguns dizem que é um sistema antigo, outros que é um sistema recebido de terceiros e há quem diga que é um sistema que não pode ser alterado. Na verdade, não existe uma definição única do que é um sistema legado, mas existe um conjunto de indicadores que devemos analisar. Vejamos alguns:
Tempo de Vida
Um sistema “velho”, desenvolvido há um tempo relativamente grande, não é necessariamente um legado. O tempo que um sistema tem pode ser um indicador inicial de alerta, mas não define um sistema como legado.
Utilidade
Um sistema velho que não é mais usado não é considerado um legado. Um bom indicador de um sistema legado é quando o mesmo ainda é essencial para o negócio, isto é, não se consegue abandoná-lo.
Tecnologias e Hardware Obsoletos
Um terceiro indicador de um sistema legado é a sua obsolescência. Alguns sistemas funcionam em hardware antigo, principalmente mainframes, cujos componentes são extremamente caros. Linguagem de programação, ferramentas de desenvolvimento, protocolos, bancos de dados e formatos de arquivos depreciados também são itens importantes.
Dificuldade de Manutenção
Um outro indicador é se os desenvolvedores originais do sistema já se aposentaram ou trocaram de emprego e é difícil encontrar mão-de-obra para manutenção. Na verdade, se “colocar a mão num vespeiro” é uma metáfora válida para mexer em um sistema, quase certamente você possui um legado em mãos.
Documentação
Alguns autores afirmam que uma característica de sistemas legados é a falta de documentação. Discordo completamente. Se fosse assim praticamente todos os sistemas modernos também seriam legados. 😉
Entretanto, se ninguém conhece as regras de negócio implementadas em um sistema e não é possível extraí-las da implementação de alguma forma, isso pode ser um indicador de um legado.
Criando um sistema legado
Além das características de um sistema, existem determinadas ações, ou a falta delas, que colaboram para ele tornar-se um legado.
Não projetar adequadamente
O principal ato produtor de sistemas legados ocorre logo em seu nascimento. Um sistema crítico do ponto de vista do negócio sem um projeto adequado inevitavelmente se tornará em um legado muito mais rapidamente, tão logo ele seja implantado e novas funcionalidades sejam difíceis de adicionar.
Não realização de melhorias
A complexidade de um sistema aumenta na medida em que ele é alterado para atender a novas necessidades do negócio. Código é acrescentado e modificado sem controle, tornando-se cada vez mais desorganizado e confuso. Sem refatoração e melhoria da qualidade interna, chega um momento em que é quase impossível alterar uma funcionalidade sem impactar em outra.
Como diz um colega: “esse sistema é igual cobertor curto, você cobre o pé e ele descobre a cabeça, cobre a cabeça e ele descobre o pé”. Já ouviu de casos onde, para cada bug corrigido, dois novos eram introduzidos? Eu já vi um caso onde decidiu-se não arrumar um sistema devido ao medo dele parar de funcionar, pois as consequências das alterações eram imprevisíveis.
Conclusões
Vimos diversos indicadores de sistemas legados, além de alguns itens sobre como nós, desenvolvedores, contribuímos para o surgimento deles.
Uma definição mais genérica e abrangente de “sistema legado”, que aprendi com meu orientar de monografia, é a seguinte: a partir de um momento do ciclo de vida do sistema, sua arquitetura torna-se tão complexa ao ponto do custo de manutenção ser maior do que o custo de desenvolver um novo sistema. Há várias questões nessa definição, nas quais não vou entrar em detalhes, mas a ideia geral é que, se o custo de acrescentar novas funcionalidades é um impeditivo para o negócio, temos um sistema legado.
Enfim, não há uma regra absoluta para definir o que é um legado, mas tais conhecimentos sobre esse tipo de sistema certamente ajudam em decisões gerenciais e também no desenvolvimento de novos sistemas, desde que tomemos ações contra a complexidade crescente do software que prolonguem sua vida útil.