De acordo com Sommerville, existe uma necessidade constante e inevitável de evolução por parte de todo software que espera manter-se ativo por um longo período de tempo. Lehman, com a ajuda de outras pessoas durante cerca de 30 anos, realizou estudos sobre o crescimento e a evolução de softwares. Desses estudos foram desenvolvidas leis, que na verdade são teorias que buscam classificar as características da evolução de software.

As leis de evolução de software são mais conhecidas por Leis de Lehman e são dividida em oito leis, onde as três primeiras leis foram apresentadas em 1974, a quarta, quinta e sexta lei foram apresentadas em 1980 e as duas últimas leis em 1996. A partir de análises é possível definir estas leis. São elas:

  • Lei da Modificação Contínua (1974): Softwares devem ser continuamente adaptados, e caso não sejam adaptados, com o tempo deixaram de atender as necessidades para a qual foram desenvolvidos e desta forma se tornaram com o tempo menos satisfatórios, essas adaptações se devem as constantes mudanças de requisitos no ambiente em que o software esta inserido, devido a esta condição qualquer software está sujeito a mudanças e precisa acompanhá-la.
  • Lei da Complexidade Crescente (1974): Conforme o Software sofre alterações, sua estrutura original passa a ser descaracterizada e sua complexidade aumenta, de modo que também aumente gradativamente os custos de sua manutenção até o momento que a manutenção passe a se tornar inviável. Sendo assim, a solução seria aumentar os esforços em manutenções preventivas que resultaria no aprimoramento de sua estrutura o que facilitaria as manutenções posteriores.
  • Lei da Auto-Regulação (1974): Sugere que o software possui uma dinâmica própria definida, o que decide as tendências da manutenção, e limita o número de possíveis mudanças, de forma que esta lei é uma consequência da organização responsável que determina a prioridade das mudanças baseada nos riscos, valores da mudança e custos envolvidos.
    Lei da Conservação da Estabilidade Organizacional (1980): Durante o ciclo de vida os resultados serão quase constantes, de modo que à substituição de recursos ou pessoas tenham efeitos imperceptíveis na evolução do software.
  • Lei da Conservação da Familiaridade (1980): À medida que o software evolui, todos os que estão a ele associados, devem manter o domínio de seu conteúdo e comportamento para conseguir uma evolução satisfatória. Com as mudanças incrementais sendo quase constante, a complexidade vai aumentando e com isto torna-se mais difícil obter este domínio, podendo haver um ou mais tamanhos críticos, que quando excedidos acarretam em mudanças comportamentais.
  • Lei do Crescimento Contínuo (1980): Com a necessidade de manter o conteúdo do software funcional, mudanças que não foram previstas na fase de desenvolvimento, mudanças para correção de erros, adições de novas funcionalidades ou melhorias em funções pré-existentes ocasionadas pelo domínio operacional em que o software esta inserido deverão ser realizadas para manter a contínua satisfação dos usuários, ocasionando no aumento do conteúdo funcional do software.
  • Lei da Qualidade Declinante Modificação Contínua (1996): A qualidade do software diminui com a sua evolução, por possíveis problemas no desenvolvimento e agravado pela possibilidade de mudanças externas, o que torna o ambiente imprevisível quanto ao surgimento de agravantes a sua qualidade, e mesmo que o software funcione satisfatoriamente em um presente momento não é possível garantir que este continue assim ao longo dos anos, o que torna necessário medidas que evitem a detecção e correção contínua destes agravantes.
  • Lei da Realimentação do Sistema (1996): Os processos de evolução do software constituem um complexo sistema de realimentação que é constantemente realizado por seus usuários, podendo ser estes retornos positivos e negativos entre as versões, o que de certa forma estabelece o crescimento do software de acordo com a quantidade de retornos negativos e positivos, somado a outros fatores da organização.