Lehman의 소프트웨어 진화의 법칙(Lehman's Laws of Software Evolution)

Lehman의 소프트웨어 진화의 법칙(Lehman's Laws of Software Evolution)은 소프트웨어 공학의 선구자인 메이어 리만(Meir M. Lehman)과 라즐로 벨라디(Laszlo Belady)가 1974년부터 제안한 이론입니다. 이 법칙의 핵심은 "소프트웨어는 완성된 후에도 계속해서 변화하고 진화해야 하며, 그렇지 않으면 도태된다"는 것입니다. 8가지 주요 법칙 (The 8 Laws)에 대해 정리하여 드립니다.

1. 계속적인 변경의 법칙 (Law of Continuing Change)

  • 핵심: 시스템은 현실 세계의 변화에 맞춰 끊임없이 변경되어야 합니다.
  • 이유: 사용자의 요구사항과 운영 환경은 멈춰있지 않고 계속 변하기 때문입니다.
  • 결과: 변경되지 않는 시스템은 유용성이 점차 떨어져 결국 사용할 수 없게 됩니다.

2. 복잡성 증가의 법칙 (Law of Increasing Complexity)

  • 핵심: 시스템이 진화(변경)함에 따라 구조는 점점 더 복잡해집니다.
  • 대응: 이 복잡성을 제어하기 위해 리팩토링(Refactoring)이나 구조 개선 작업을 의도적으로 수행하지 않으면, 시스템은 유지보수가 불가능한 상태가 됩니다(엔트로피 증가).

3. 자기 규제의 법칙 (Law of Self Regulation)

  • 핵심: 시스템의 진화 과정은 자기 스스로 조절되는 경향이 있습니다.
  • 의미: 시스템의 크기, 변경 빈도, 오류 발생률 등은 시스템 고유의 추세와 패턴을 따르며, 이는 통계적으로 예측 가능합니다. 즉, 관리자가 무리하게 일정을 당기려 해도 시스템의 '자연스러운 속도'가 존재합니다.

4. 조직적 안정성 보존의 법칙 (Law of Conservation of Organizational Stability)

  • 핵심: 시스템의 생명주기 동안 개발 생산성(또는 평균 작업량)은 대체로 일정하게 유지됩니다.
  • 의미: 인력을 갑자기 늘린다고 해서 개발 속도가 비례해서 빨라지지 않습니다(브룩스의 법칙과 유사). 조직의 소통 비용과 복잡성 때문에 전체적인 진화 속도는 일정하게 수렴합니다.

5. 친숙성 보존의 법칙 (Law of Conservation of Familiarity)

  • 핵심: 각 릴리스(Release)마다 시스템의 변경 양(콘텐츠)은 일정하게 유지됩니다.
  • 이유: 개발자와 사용자가 시스템의 변화를 이해하고 적응하는 데는 한계가 있기 때문입니다. 너무 많은 변화를 한꺼번에 도입하면 혼란을 초래하여 시스템 안정성을 해칩니다. 

6. 계속적인 성장의 법칙 (Law of Continuing Growth)

  • 핵심: 사용자를 만족시키기 위해 시스템의 기능적 콘텐츠는 계속 늘어나야 합니다.
  • 이유: 시스템이 해결해야 할 문제의 범위가 넓어지고, 사용자는 더 많은 기능을 원하기 때문에 시스템의 사이즈(코드 라인 수, 데이터베이스 등)는 지속적으로 성장합니다.

7. 품질 하락의 법칙 (Law of Declining Quality)

  • 핵심: 변화하는 운영 환경에 적응하지 못하면 시스템의 품질은 하락하는 것으로 인식됩니다.
  • 의미: 코드 자체에 버그가 없더라도, 최신 OS를 지원하지 않거나 UI가 낡아 보이면 사용자는 이를 '품질이 낮다'고 평가합니다.

8. 피드백 시스템의 법칙 (Law of Feedback System)

  • 핵심: 소프트웨어 진화 과정은 다중 루프 피드백 시스템입니다.
  • 의미: 사용자, 개발자, 관리자, 시장 상황 등 다양한 요인이 서로 복합적으로 상호작용하여 시스템의 진화 방향을 결정합니다.