소프트웨어 설계는 소프트웨어 품질에 상당한 영향을 미친다고 알려져 있다. 이 책의 초점은 소프트웨어 설계에 맞췄는데, 표 2.1은 소프트웨어 설계 맥락에서 품질*을 정리한 것이다. 표 2.1에서는 ‘설계 단편’Design Fragment이라는 용어를 사용하여 추상화(클래스, 인터페이스, 추상 클래스)나 추상화의 집합과 이들 사이의 관계(상속 계층, 의존성 그래프) 등 설계의 일부를 표시하는데, 이 점에 주목하자.
▼ 표 2.1 중요한 품질 속성과 정의
품질 속성 |
정의 |
이해 가능성 |
설계 단편을 어느 정도 쉽게 이해할 수 있는가? |
변경 가능성 |
기존 기능을 변경할 때, 파급 효과를 일으키지 않고 설계 단편을 얼마큼 쉽게 수정할 수 있는가? |
확장 가능성 |
새로운 기능을 지원할 때, 파급 효과 없이 설계 단편을 얼마큼 쉽게 개선하거나 확장할 수 있는가? |
재사용 가능성 |
원래 설계 단편을 개발한 목적 이외에 다른 맥락의 문제에서 얼마큼 쉽게 해당 설계 단편을 사용할 수 있는가? |
테스트 가능성 |
테스트를 거쳐 결함을 설계 단편에서 얼마큼 쉽게 감지할 수 있는가? |
안정성 |
설계 단편이 기능을 얼마큼 올바르게 현실화하고, 실행 과정에서 문제점이 발생할 때 효과적으로 방어할 수 있는가? |
* 구조적인 설계 악취가 영향을 미치는 다른 중요한 품질 속성(성능과 보안 등)이 많다는 사실에 주목하자. 하지만 이런 품질과 설계 악취의 관련성을 자세히 설명하면 책 한 권 분량이므로 책에서는 다른 품질 속성은 설명을 생략한다.