5. 소프트웨어 설계 문제

5.1. 변경의 어려움

새로운 소프트웨어 개발을 시작할때 항상 모든 요구사항을 고려할 수 없다. 새로운 기능을 시연할 때마다 요구사항은 변화할 수 있다. 우리가 설계를 진행하기 전 인터뷰를 통해 요구사항을 최대한 끌어냈음에도, 고객은 미처 생각 하지 못했던 추상적인 기능이 있을 수 있다.

모든 프로젝트에서 이러한 변경은 허용될 수 밖에 없다. 변경을 진행하는 과정에서 설계에 따라 변경이 많이 필요할 수도 있고, 적게 필요할 수도 있다. 어찌됐든 이러한 변경을 불가피할 것이다.

시스템(기능)을 변경을 할때 크게 3가지 문제가 있다.

  • 기능 변경을 할때 생각보다 많은 코드를 수정해야 하는 문제
  • 기능 변경 후 관련 없는 부분에서 오류가 발생하는 문제
  • 기능 변경을 할때 기존 설계를 유지하는 것이 설계를 유지하지 않는것 보다 복잡할때

5.1.1. 소프트웨어 경직성

기능 추가나 변경에 의해 소스코드가 변경될 때, 하나의 변경에 의해 수 많은 부수적인 변경이 생길 경우 소스코드에 경직성이라는 안좋은 특성이 있다고 할 수 있다. 경직성은 소프트웨어 변경을 어렵게 하고 추가적인 비용을 발생시킨다. 잘못된 설계로 인터페이스 수준에서 여러가지 역할을 강제화 하여 경직화될 수 있으며, 클래스 수준에서 2가지 이상의 책임이 부여될 경우 경직성이 생길 확률이 매우 높아진다.

물론 변경에 어떻게 일어나느냐에 따라 아무런 경직성의 문제가 없이 개발 및 유지보수가 잘 될 수 있다. 하지만 일반적인 소프트웨어의 경우라면 경직성의 문제가 발생할 것이다.

5.2. 재사용의 어려움

프로젝트를 할때 일반적으로 낮은 수준부터 다시 개발하는 경우는 없으며, 일반적으로 미리 잘 만들어진 모듈을 재사용 한다.

같은 시스템 안에서도 특정 모듈이 다른 모듈에서 재사용이 어려울 경우 설계의 문제가 있다고 볼 수 있다.

시스템(기능)을 재사용 할때 문제가 있다.

  • 재사용 하려고 했지만 가능한지 의심되며, 기존 시스템에 강하게 결합되어 재사용하기 어려운 문제