이 문서에서는 개체 지향 분석을 위해 특별히 설계된 메트릭 중 하나인 상속 깊이에 대해 알아봅니다. DIT(상속 트리 깊이)라고도 하는 상속 깊이는 "노드에서 트리의 루트까지의 최대 길이" CK로 정의됩니다. 간단한 예제를 통해 이를 확인할 수 있습니다. 새 클래스 라이브러리 프로젝트를 만들고, 코드를 작성하기 전에
모든 클래스가 System.Object에서 상속받기 때문에 현재 깊이는 1입니다. 이 클래스에서 상속하고 새 클래스를 검사하면 결과를 볼 수 있습니다.
트리의 노드가 낮을수록(Class2 이 경우) 상속 깊이가 높아질 수 있습니다. 자식을 계속 만들고 깊이가 원하는 만큼 증가하도록 할 수 있습니다.
가정 (전제)
상속의 깊이는 CK의 세 가지 기본 가정에 근거합니다.
계층 구조의 클래스가 깊을수록 상속할 메서드 수가 많을수록 동작을 예측하기가 더 어려워집니다.
더 깊은 트리에는 더 많은 클래스와 메서드가 포함되므로 디자인 복잡성이 더 커집니다.
트리의 더 깊은 클래스는 상속된 메서드를 다시 사용할 가능성이 더 큽니다.
가정 1과 2는 깊이에 대한 더 높은 숫자를 갖는 것은 나쁜 것을 알려줍니다. 그것으로 끝났다면, 상황이 좋았겠지만, 가정 3에 따르면 더 큰 깊이는 잠재적인 코드 재사용에 유리하다고 합니다.
분석
깊이 메트릭을 읽는 방법은 다음과 같습니다.
깊이에 대한 낮은 수
깊이가 낮을수록 복잡성이 줄어들지만 상속을 통해 코드 재사용이 줄어들 수 있습니다.
깊이를 위한 높은 값
깊이가 높을수록 상속을 통해 코드가 재사용될 가능성이 더 높지만 코드에서 오류 가능성이 높아질수록 복잡성도 높아집니다.
코드 분석
코드 분석에는 유지 관리 규칙 범주가 포함됩니다. 자세한 내용은 유지 관리 규칙참조하세요. 레거시 코드 분석을 사용하는 경우 확장 디자인 지침 규칙 집합에는 유지 관리 영역이 포함됩니다.
유지 관리 영역 내에는 상속에 대한 규칙이 있습니다.
이 규칙은 상속 깊이가 6 이상에 도달하면 경고를 발생하므로 과도한 상속을 방지하는 것이 좋습니다. 규칙에 대한 자세한 내용은 CA1501을 참조하세요.
모든 것을 하나로 묶습니다.
DIT 값이 높으면 오류 가능성도 높고, 값이 낮으면 오류 가능성이 줄어듭니다. DIT에 대한 높은 값은 상속을 통해 코드 재사용 가능성이 더 높음을 나타내며, 값이 낮으면 상속을 통한 코드 재사용 가능성이 낮음을 시사합니다. 충분한 데이터가 없기 때문에 DIT 값에 대해 현재 허용되는 표준이 없습니다. 최근에 수행된 연구조차도 이 메트릭 Shatnawi의 표준 숫자로 사용할 수 있는 실행 가능한 숫자를 결정하기에 충분한 데이터를 찾지 못했습니다. 이를 지원할 경험적 증거는 없지만, 몇몇 리소스는 DIT 약 5 또는 6이 상한이어야 한다고 제안합니다. 예를 들어 https://www.devx.com/architecture-zone/45611/를 참조하세요.
인용
CK 님
치담버, S. R. & 케머, C. F. (1994). 객체 지향 설계를 위한 메트릭스 스위트 (IEEE 소프트웨어 엔지니어링 트랜잭션, 제20권, 제6호). 2011년 5월 14일 피츠버그 대학교 웹 사이트에서 검색: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf
크리슈난 주
수브라마니암, R. & 크리슈난, 엠 에스 (2003). 객체 지향 설계 복잡성에 대한 CK 메트릭스의 경험적 분석: 소프트웨어 결함에 대한 영향 (IEEE 소프트웨어 엔지니어링 논문집, 제 29권, 제 4호). 2011년 5월 14일 검색, 원래 매사추세츠 다트머스 대학 웹사이트 출처 https://ieeexplore.ieee.org/abstract/document/1191795
샤트나위 주
샤트나위, R. (2010). 오픈 소스 시스템에서 객체 지향 메트릭의 허용 가능한 위험 수준에 대한 정량적 조사 (IEEE 소프트웨어 엔지니어링 트랜잭션, Vol. 36, No. 2).