Software entropy: O que é? Como evitar?
Conheça o conceito de entropia de software e como evitá-la
Algo extremamente comum no ciclo de vida de um software: é desenvolvido usando o que há de melhor na época, seguindo os requisitos correntes, e tudo funciona bem. Com o tempo, os requisitos vão mudando, o que exige mudanças no software também: novos recursos são adicionados, alguns comportamentos mudam. Além dos requisitos, o ambiente em volta do software também muda: novas configurações de servidores, novos sistemas operacionais, novas linguagens.
Tudo isso faz com que o software, que parecia tão bom no começo, agora pareça inadequado: seu desempenho já não é mais tão bom, mudanças são cada vez mais custosas e com maior chance de introduzir bugs. Até que chega o dia em que se desiste de mantê-lo, e uma nova versão é desenvolvida.
Conceito emprestado da termodinâmica, a entropia é a quantidade de desordem de um sistema, e esta nunca diminui, apenas mantém-se a mesma ou aumenta com o tempo. Para se ter um desenvolvimento sustentável, é importante trabalhar formas de minimizar o aumento da entropia do software, assim ele vai durar mais tempo.
O que causa o aumento da entropia?
A entropia do software aumenta quando são feitas alterações sem o completo conhecimento do sistema: seja de comportamentos esperados, seja do seu funcionamento interno, integrações e dependências. Isso acontece muitas vezes quando as pessoas que mantém o software são trocadas, e as pessoas novas não tem todo o conhecimento do sistema que as antigas tinham. O “tempo” também é poderoso em fazer o conhecimento se perder.
Caso a arquitetura do software não seja feita levando em consideração que ele será alterado no futuro (caso não siga os princípios SOLID, por exemplo), o aumento descontrolado das dependências entre as unidades de código aumenta rapidamente a entropia do software, deixando-o cada vez mais complexo (e difícil para ser mantido).
Por fim, o aumento do débito técnico, com a introdução de code smells e bugs no software, geralmente uma combinação de prazos apertados e pouco conhecimento do time de desenvolvimento, também vai aumentando a entropia do sistema, deixando alterações cada vez mais difíceis.
Formas de diminuir o aumento da entropia
O primeiro ponto a ser atacado é a falta de conhecimento do sistema: investir em documentação , tanto do que o sistema tem que fazer (uma visão de negócios), quanto do como ele faz (uma visão técnica) é fundamental para mitigar o aumento da entropia quando antigos desenvolvedores saem da equipe e novos entram. E ter o cuidado de manter a documentação sempre atualizada, é claro.
Ter em mente, quando o sistema for projetado, que ele será alterado no futuro, e seguir boas práticas em seu design para facilitar a sua manutenção. Aqui entram os princípios SOLID e a adoção de design patterns.
Para a questão de bugs e code smells, há duas ações a serem tomadas em conjunto: adotar uma inspeção de código de forma automatizada que indique a introdução de code smells e bugs (aqui temos ferramentas como o SonarQube que realizam esse papel muito bem) e realizar refactorings frequentes para aumentar a qualidade do código.
Conclusão
Software entropy ou entropia de software é a tendência que o software tem de ficar mais caótico com o tempo, que assim como na termodinâmica sua desordem apenas aumenta com o tempo, até chegar o momento em que a desordem é tanta que é impossível o software ser mantido.
Para mitigar o aumento da entropia e ter o software funcional por mais tempo, deve-se pensar desde o início que o software vai ser alterado, atuar para manter uma documentação efetiva tanto de negócio quanto técnica, e evitar a introdução de bugs e code smells.
Conhecer o conceito de entropia de software e atuar para mitigar o aumento da entropia acaba sendo essencial para um desenvolvimento sustentável.