Se eu não escrevi, então é legado.

Muita se fala sobre código legado, sobre práticas pra gerenciar código legado, como evoluir uma base de código legado, mas você já parou pra pensar o que é código legado?

Alguns dias atrás tivemos uma discussão com os membros da equipe utilizando como base o famoso livro “Working Effectively With Legacy Code” de Michael Feathers [1], e antes de entrar no livro eu propus que discutíssemos o que é código legado e chegamos a um conjunto de pontos interessantes sobre código legado.

Subjetividade

Michael Feathers define código legado como código que não possui testes [2], no entanto esta definição é um pouco antiga, pois o livro é de 2004, quando as práticas de testes automatizados ainda estavam sendo difundidas pela comunidade e as ferramentas começaram a aparecer.

O ponto de vista extremo do autor ressalta o fato de que código legado é um código que é difícil de ser mantido. Um código que não possui uma boa suíte de testes dificulta a análise do impacto de suas mudanças, e isso contribui para a inércia da equipe, que evita ao máximo realizar alterações profundas.

No entanto, hoje em dia com a grande abrangência e utilização de ferramentas de testes, não podemos confiar apenas nesse fato, pois um outro conjunto de fatores pode contribuir, talvez não com a mesma intensidade, para que a equipe sofra com mudanças.

É difícil escrever uma frase que defina totalmente o que é código legado, vamos então analisar um conjunto de pontos que podem facilitar essa análise e reflexão sobre o que um projeto legado.

Tecnologia

A tecnologia utilizada em um projeto modifica bastante o desempenho da equipe e sempre discutimos quais as melhores de acordo com cada situação. Com relação a código legado, será que a tecnologia faz um código ser legado ou não?

Os sistemas de pagamento que são escritos em cobol, podem ser considerado sistemas legados? Nesse caso a tecnologia não é mais presente no cenário atual de desenvolvimento, a dificuldade para manter esse tipo de sistema é muito grande, principalmente para encontrar desenvolvedores com conhecimento sobre a tecnologia.

Considere então um sistema que utiliza uma linguagem atual, mas que faz uso de bibliotecas, gems ou frameworks que não são compatíveis com novas versões. Nesse caso a tecnologia impede o aplicativo de continuar a evoluir e contribui para deixar a base de código legado, pois com a renovação da equipe fica difícil manter o conhecimento sobre versões anteriores.

No entanto a tecnologia não pode ser utilizado como único fator para indicar que o projeto é legado. Como um exemplo podemos analisar os aplicativos móveis que precisam manter compatibilidade com versões de sistemas anteriores. Apesar da tecnologia ser antiga o desenvolvimento continua ativo, apesar dos problemas com rotatividade de membros.

Manutenção

Isso leva a outro ponto interessante, o livro fala que código legado é código sem testes, mas qual é o papel da bateria de testes de um projeto? Talvez o mais importante seja facilitar a manutenção a longo prazo, ou seja, um código sem testes é muito difícil de ser mantido, caindo facilmente no limbo do código legado.

Um exemplo são sistemas antigos que ninguém mais altera com medo de fazer parar de funcionar. A solução na maioria dos casos é confiar que aquele monstrengo funciona e cercar ele de serviços que podem ser testados.

E quando a empresa não acredita em testes, então a linha que acaba de ser escrita já está legada? Não necessariamente, pois caso seja um sistema pequeno, onde é fácil entender e alterar (um CRUD simples, por exemplo), talvez os testes não sejam tão importantes.

Mas um sistema médio/grande que não possui nenhuma garantia de funcionamento está amaldiçoado a ser legado. Conforme o time for sendo renovado, os novatos precisarão de muita coragem e tempo de treinamento para realizar alterações, mesmo que sejam superficiais.

Abandonado

Passado algum tempo onde os desenvolvedores não tocam mais em uma determinada parte do sistema, ele começa a ficar abandonado. Um sistema, ou parte dele, que não é tocado por um longo tempo pode ser considerado legado?

Essa discussão leva a dois pontos, o primeiro é de que um desenvolvedor novo pode considerar o sistema legado e um mais experiente não. Isso geralmente acontece quando o conhecimento não está distribuído entre a equipe, então apenas uma pessoa do grupo fica “responsável” por atualizar aquela parte que realiza pagamentos.

O segundo ponto é de que o conceito de legado pode ser aplicado apenas em uma parte do sistema. No caso de sistemas realmente grandes pode ser que a utilização de determinada ferramenta que apenas uma pessoa da equipe conhece crie dificuldades para manter o sistema.

Idade

Um sistema velho pode ser considerado legado? A resposta depende do que é velho, que também é um conceito subjetivo. Um sistema de cinco anos que utiliza versões não tão atuais das tecnologias e que a equipe já foi completamente renovada, pode ser considerado legado?

É fácil perceber que não dá pra escrever um parágrafo que descreva o que é um sistema legado. A conclusão que nós chegamos foi de que, a partir de uma lista de conceitos relacionados a código legado podemos analisar se o nosso projeto é legado ou não. E essa discussão foi muito positiva, pois tratou principalmente sobre a confiança dos membros da equipe em alterar o sistema.

E o que é código legado para você? O quão confiável está você e sua equipe com o sistema que vocês desenvolvem?

Referências:

[1] FEATHERS, Michael C. Working effectively with legacy code.
[2] http://en.wikipedia.org/wiki/Legacy_code

Anúncios

Um comentário sobre “Se eu não escrevi, então é legado.

  1. Para mim, código legado é aquele que depois que entrou em produção e requer alguma alteração, e essas alterações dão mais trabalho por não ter testes. Ou seja, a facilidade de qualquer membro do time, como o minimo de conhecimento de como o código funciona, a partir dos testes, fazer alterações diz se o código é legado (ou “largado”) ou não.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s