quarta-feira, 20 de agosto de 2014

O custo do Código Morto

As Funcionalidades Vestigiais (no sentido da evolução dos sistemas) são uma praga comum no software e há um tipo especial dessas funcionalidades que muitas vezes passa despercebido.

Geralmente as Funcionalidades Vestigiais são recursos utilizáveis que, simplesmente, não são usados. Mas, internamente, cada sistema tem partes de código que não são sequer expostas, que não suportam funcionalidades a que os utilizadores possam aceder. São muitas vezes o resultado de experiências, ou de uma funcionalidade vestigial que não foi totalmente eliminada. Vamos referir-nos a isto como código morto.

Um pouco de código morto não é um problema. No entanto, quando a quantidade cresce, pode rapidamente sair fora de controlo. E o código morto tende a aumentar, não a diminuir. Porquê? Porque a maioria dos programadores têm medo de remover código. Eles preferem entrar, fazer as suas alterações e sair. Tudo de forma a perturbar o sistema o mínimo possível.

Há muitas razões para isto:

  • Eles podem não entender o que é suposto o sistema fazer;
  • Pode não haver uma explicação calara sobre o que o sistema deve fazer;
  • Eles podem não saber o que é o que não é código morto;
  • Podem não existir testes suficientes para os ajudar a ter confiança de que não estão a eliminar algo importante;
  • Provavelmente não lhes é dado o tempo necessário para pesquisar e remover o código morto;
  • E se alguma vez o programador cometer um erro no processo de tentar limpar parte do lixo interno, será castigado.

A maioria dos sistemas de controlo de versão são tão avançados que qualquer mudança ao sistema está acessível instantaneamente, mesmo sem uma conexão à internet. No entanto, é cada vez mais comum ver os programadores a comentar ou deixar código morto para trás, em vez de removê-lo. Para muitos programadores, simplesmente não há incentivo para remover código morto e, em vez disso, todos os motivos para não o fazer. É por isso que tende a crescer.

Mas por que isto é importante? É importante porque é a desordem. Se já visitou a casa de alguém que acumula coisas, consegue imaginar o que será estudar uma base de código que está cheio de código morto. Imagine que precisa encontrar alguma coisa na casa de um colecionador. Vai demorar um bocado. A mesma coisa acontece quando tentamos alterar código que está a transbordar de código morto. O código morto fica no caminho do código útil.

O código morto nem sempre é óbvio. E tem uma grande tendência para afectar o modo como os programadores acham que o sistema realmente funciona. Muitas vezes, é necessário estudar o sistema detalhadamente para o conseguir descobrir. Sem tempo para fazer este estudo, o código morto concorre com a capacidade mental de entender como um sistema funciona.

Código morto gera código morto. Código morto frequentemente usa outro código. Este código, por sua vez, pode ser código morto, se é usado apenas por outro código morto. Pense na casa do colecionador. Naquele conjunto extra de prateleiras, para guardar todas as coisas que nunca vai usar. Esse conjunto extra de prateleiras não seria necessário se não fosse por causa da desordem.

Mas não é apenas a desordem. Porque é difícil reconhecer o código morto, os programadores vão fazer tudo para o proteger, assim como ao resto do código útil do sistema. E justamente por isso, eles não querem ser imprudentes.

A posse não vem sem um custo. O código morto custa dinheiro real para manter.

O código morto torna difícil alterar um sistema. O Refactoring, ou a reescrita, é muito mais difícil se tiver que considerar o impacto do código morto. Os componentes críticos do sistema são constrangidos por código morto. Estes constrangimentos causam dificuldades na adaptação a novas funcionalidades. O código morto tende a cristalizar e nunca mudar, ancorando assim outras partes do sistema, de forma análoga à fixação de um barco.

Por outro lado, as consequências secundárias podem ser desastrosos. O código morto pode ser usado acidentalmente quando alguém altera o sistema no futuro. Porque é código morto, é altamente improvável que ele se comporte como esperado. Provavelmente está incompleto e, definitivamente, não foi bem testado. Consequentemente, a sua utilização pode ** introduzir defeitos*.

Como eliminar o Código Morto 

Felizmente, é bastante fácil de limpar o código morto.

Ao crescer, adorei participar em acampamentos de fim de semana, como Escoteiro. Depois de um fim de semana divertido, fazíamos o nosso melhor para deixar o acampamento melhor do que o encontramos.

Depois de um árduo dia de trabalho, deixe o seu código um pouco melhor do que o encontrou.

Se toda a gente comprar essa filosofia, os esforços serão recompensados. Os programadores devem manter a vista fora do código morto. Os gestores devem apoiar, e não desanimar, os programadores. Antes que se perceba, o código morto desaparecerá. De seguida, podemos passar a problemas maiores.

O código morto explicado de forma simples

Tradução livre do artigo “The cost of dead code and the only technique you need to know to clean it up”, de Wes McClure.

Sem comentários:

Enviar um comentário