JDepend
잡동사니
개요
아래 내용은 JDepend 홈페이지의 문서를 의역한 것입니다. 본문의 뜻이 통하는 수준에서 국문에 맞춰 번역하였으며 의미가 불분명한 경우 원문을 확인하시기 바랍니다.
닫는 꺽쇠(
>)로 시작하는 문단은 제가 추가한 주석입니다.
JDepend는 Java 클래스 파일 디렉터리를 탐색하여 아래 항목을 포함한 각 패키지의 설계 품질을 측정한 수치를 계산합니다:
- 클래스와 인터페이스의 수(Number of Classes and Interfaces)
- 패키지에 존재하는 구체적인 클래스와 추상 클래스(그리고 인터페이스)의 수로서, 확장성의 척도가 됩니다.
- > 원문에는 클래스와 인터페이스를 한 번에 설명하고 있지만 실제 결과에서는 CC(구체적인 클래스)와 CA(추상 클래스 및 인터페이스)로 나뉘어 출력됩니다.
- 영향 주는 패키지 수(Afferent Couplings (Ca))
- 패키지의 클래스가 영향을 주는 패키지 수로서, 책임의 척도가 됩니다.
- > 이 수치가 큰 패키지는 해당 패키지 내부에서 변화가 일어났을 때 그 영향이 많은 곳에 전달이 됩니다.
- 영향 받는 패키지 수(Efferent Couplings (Ce))
- 패키지의 클래스에 영향을 주는 패키지 수로서, 의존성의 척도가 됩니다.
- > 이 수치가 큰 패키지는 Ca와 반대로 외부에서 발생한 변화에 해당 패키지가 쉽게 영향을 받습니다.
- 추상성(Abstractness (A))
- 패키지의 추상 클래스 수를 전체 클래스 수로 나눈 비율입니다. 따라서 0에서 1 사이의 값을 가지며, 0은 모든 완전히 구체적 패키지임을, 1은 완전히 추상적 패키지임을 나타냅니다.
- 변동성(Instability (I))
- 영향 받는 패키지 수(Ce)를 전체 관계된(영향을 주고 받는) 패키지 수(Ce + Ca)로 나눈 값(I = Ce / (Ce + Ca))으로, 변화에 대한 탄성도를 나타냅니다. 따라서 0에서 1 사이의 값을 가지며, 0은 매우 안정적인 패키지임을, 1은 매우 변동적인 패키지임을 나타냅니다.
- > 변화에 대한 탄성도(resilience to change)란, 패키지 외부에서 일어난 변화에 얼마나 반사적이냐로 이해하면 좋습니다. 외부에 많이 의존할 수록(Ce가 클 수록) 이 값이 커지므로 외부 변화에 영향을 받습니다.
- 주요 흐름으로부터 거리(Distance from the Main Sequence (D))
- 패키지와 이상적인 선(A + I = 1)의 거리로, 패키지의 추상성과 안정성 사이의 균형을 나타냅니다. 주요 흐름 바로 위에 위치하는 패키지는 추상성과 안정성 사이에서 최적으로 균형이 잡혀 있습니다. 이상적인 패키지는 완전히 추상적이고 안정적(x=0, y=1)이거나 완전히 구체적이고 변동적(x=1, y=0)인 패키지입니다. 수치의 범위는 0에서 1로 거리가 0(D=0)인 패키지는 주요 흐름과 완전히 일치함을 나타내고, 거리가 1(D=1)인 패키지는 주요 흐름으로부터 최대한 멀리 떨어져 있음을 나타냅니다.
- > 이상적인 선(idealized line)은 평면에서 가로, 세로 축을 각각 변동성(x)과 추상성(y)으로 했을 때, (0, 1) 지점과 (1, 0) 지점을 잇는 대각선입니다. 추상적인 패키지는 인터페이스로 역할을 하기 때문에 변동성이 낮고 안정적이여야 하며(x=0, y=1), 반면 구체적인 패키지는 인테페이스를 구현했기 때문에 변동성이 높아지게 됩니다(x=1, y=0). 원문에서는 단순히 주요 흐름(main sequence)에 위치할 수록 균형잡혀 있다고 했지만, 양 끝 점 이외에 위치한 패키지는, 예를 들어 변동성 0.4에 추상성 0.6인 패키지는 추상 클래스와 구체적인 클래스가 섞여 있다는 의미가 되므로 두 종류의 클래스를 분리해서 약 끝 점에 위치하게 하는 것이 좋습니다.
- 패키지 의존성 순환
- 패키지 의존성 순환은 패키지의 경로의 계층을 따라 보고됩니다.

