Leis de Lehman
As leis de Lehman são um conjunto de leis que descrevem o comportamento de um software em evolução. Criadas por Meir Lehman na década de 70. Em 74 publicou o que seria mundialmente conhecido como as “Leis de Lehman sobre evolução de software” para sistemas do tipo E ou E-Programs. Sistemas do tipo E são os softwares desenvolvidos para resolver problemas do mundo real, operados por pessoas que se beneficiem deles em seu dia-a-dia.
1. Mudança contínua
Um software deve ser continuamente adaptado, senão torna-se aos poucos, cada vez menos satisfatório. A cada alteração no ambiente em que ele roda que exija nele melhorias, não fazê-las o tornarão progressivamente menos satisfatório naquilo para o que foi construído.
2. Complexidade crescente
Se não forem tomadas medidas para reduzir ou manter a complexidade de um software, conforme ele é alterado sua complexidade irá aumentar progressivamente. Deve haver um esforço para reduzir a complexidade final de um sistema enquanto este recebe alterações.
3. Auto regulação
A curva pertinente ao processo de evolução de um software em relação a seus atributos e processos são auto reguláveis e próximos a uma curva normal, subindo até um teto, quando começa a diminuir.
4. Conservação da estabilidade organizacional
A velocidade de atividade global efetiva de um software em evolução deverá se manter invariável durante todo o ciclo de vida deste produto. O mix que é levado em consideração para as tomadas de decisão que levam a evolução de um software tendem a ser constantes.
5. Conservação de familiaridade
Durante a vida útil de um software em evolução, a taxa de mudanças tende a ser proporcional ao domínio que a equipe detém. A taxa de evolução de um software está intimamente ligado ao grau de familiaridade dentre os profissionais que o mantém.
6. Crescimento Contínuo
Todo software deve ter o conteúdo funcional continuamente ampliado durante seu ciclo de vida para manter a satisfação dos seus usuários. O projeto inicial não consegue incluir absolutamente tudo o necessário e progressivamente precisará ser aumentado.
7. Qualidade diminuindo
Os softwares desenvolvidos para resolver problemas do mundo real se depreciam progressivamente se eles não receberem as mudanças necessárias para adaptar-se ao que acontece em seu ambiente operacional durante todo o tempo de seu ciclo de vida útil.
8. Sistema de feedback
Os processos de manutenção e evolução de um software refletem sistemas de feedback em múltiplos níveis, loops e agentes e devem ser assim tratados para manter-se significativos.