"Afferent Coupling (Ca)"와 "Efferent Coupling (Ce)"는 소프트웨어 설계에서 결합도를 측정하는 중요한 메트릭입니다. 이들은 각각 모듈이 외부로부터 얼마나 많은 의존성을 받는지, 그리고 외부 모듈에 얼마나 의존하는지를 정량적으로 평가합니다. 이러한 메트릭은 Robert C. Martin의 저서 “Agile Software Development: Principles, Patterns, and Practices”에서 널리 알려졌으며, 소프트웨어 아키텍처 설계의 품질을 평가하는 데 중요한 역할을 합니다.
Afferent Coupling (Ca)
Afferent Coupling은 특정 모듈(또는 패키지, 클래스)에 의존하는 외부 모듈의 수를 나타냅니다. Ca는 외부 모듈이 해당 모듈의 기능을 얼마나 사용하는지를 측정하는 지표입니다. Ca 값이 높을수록 해당 모듈은 시스템 내에서 중요한 역할을 하고 있으며, 다른 모듈이 많이 의존하고 있음을 의미합니다. 이런 모듈은 시스템에서 변경하기가 어렵고, 변화가 발생하면 여러 다른 모듈에 영향을 미칠 수 있습니다.
높은 Ca를 가진 모듈은 시스템의 중심적인 역할을 하기 때문에, 이러한 모듈의 안정성은 매우 중요합니다. 이러한 모듈을 설계할 때는 신중을 기해야 하며, 변경 시 다른 모듈에 미치는 영향을 고려해야 합니다.
Efferent Coupling (Ce)
Efferent Coupling은 특정 모듈이 의존하는 외부 모듈의 수를 나타냅니다. Ce는 해당 모듈이 외부 기능을 얼마나 많이 사용하는지를 측정하는 지표입니다. Ce 값이 높을수록 해당 모듈은 많은 외부 모듈에 의존하고 있으며, 외부 모듈에 변경이 발생할 경우 이 모듈 역시 영향을 받을 가능성이 큽니다. Ce가 높은 모듈은 결합도가 높다고 평가되며, 이러한 모듈은 시스템의 유연성을 떨어뜨릴 수 있습니다.
높은 Ce를 가진 모듈은 외부 의존성이 많기 때문에, 시스템의 변경에 취약할 수 있습니다. 이러한 모듈은 리팩토링을 통해 의존성을 줄이는 것이 바람직할 수 있습니다.
Ca와 Ce의 비교 및 활용
- Ca는 다른 모듈들이 얼마나 많이 특정 모듈을 사용하는지를 나타내므로, 시스템에서 해당 모듈의 중요도를 평가하는 데 유용합니다.
- Ce는 특정 모듈이 외부 모듈에 얼마나 많이 의존하는지를 나타내므로, 해당 모듈의 유연성을 평가하는 데 유용합니다.
- 활용 예:
- Ca 값이 높은 모듈은 시스템의 중심적 모듈로 간주되며, 높은 안정성이 요구됩니다. 이러한 모듈은 잘 설계되고, 변경 가능성을 최소화해야 합니다.
- Ce 값이 높은 모듈은 의존성을 줄여 결합도를 낮추는 것이 중요합니다. 외부 의존성을 줄이면 모듈의 독립성을 높이고, 시스템의 유연성을 증대시킬 수 있습니다.
Ca와 Ce를 활용한 모듈 설계 개선 (불안정성, Instability)
불안정성(Instability) 분석: 모듈의 Ca와 Ce 값을 이용해 모듈의 불안정성(Instability)을 계산할 수 있습니다. 이는 모듈이 얼마나 쉽게 변경될 수 있는지를 평가하는 지표로 사용됩니다.
- I (Instability): 불안정성 지표입니다. 값이 1에 가까울수록 모듈이 불안정하고, 0에 가까울수록 안정적입니다.
- Ce: Efferent Coupling
- Ca: Afferent Coupling
불안정성(Instability)와 추상성(Abstractness)을 이용한 모듈 설계 개선
D (Normalized Distance from Main Sequence): 이 지표는 이상적인 모듈 위치(Instability와 Abstractness 간의 균형)를 나타내는 메트릭입니다. D 값을 통해 모듈이 얼마나 이상적인 설계 위치에서 벗어나 있는지 평가할 수 있습니다. 추상성(Abstractness)은 모듈 내의 추상화 수준을 나타내며, 추상 클래스와 인터페이스의 비율로 표현됩니다. 추상 클래스가 많을수록 추상성이 높습니다. A 값은 0에서 1 사이의 값으로, 1에 가까울수록 모듈이 더 추상적입니다.
여기서 메인 시퀀스는 추상성(A)과 불안정성(I)간의 이상적인 균형을 나타내는 직선으로, 이 직선 위에 위치한 모듈은 설계적으로 이상적 위치에 있다고 간주됩니다. 이 직선의 방정식은 다음과 같습니다.
이때 모듈이 메인 시퀀스로부터 얼마나 멀리 떨어져 있는지를 계산한 것이 바로 Normalized Distance from Main Sequence(D) 입니다.
- D (Distance): 메인 시퀀스로부터의 거리입니다. 이 값은 0에서 1 사이의 값으로, 0에 가까울수록 이상적인 위치에 있으며, 1에 가까울수록 메인 시퀀스에서 멀리 떨어져 있음을 나타냅니다. 아래 그림은 이 개념을 잘 나타내고 있습니다.
- A: 모듈의 추상성
- I: 모듈의 불안정성
그런데 만약 수많은 컴포넌트가 아래 그림에서 보는바와 같이 고통 구역(Zone of Pain)과 무용 구역(Zone of Uselessness) 중 어느 한쪽으로 치우치게 D가 계산되는 경우, 우선 이런 현상을 바로 잡을 수 있을 때까지 내부 구조를 강화하는 것이 필요합니다.
참고 문헌
- Martin, R. C. (2003). “Agile Software Development: Principles, Patterns, and Practices.” Prentice Hall.
- Chidamber, S. R., & Kemerer, C. F. (1994). “A Metrics Suite for Object Oriented Design.” IEEE Transactions on Software Engineering, 20(6), 476-493.
- Pressman, R. S. (2014). “Software Engineering: A Practitioner’s Approach.” McGraw-Hill.
'Software Engineering > Architecture' 카테고리의 다른 글
Software Architect Architecting Architecture: 소프트웨어 아키텍처와 설계의 역할 (0) | 2024.11.28 |
---|---|
High Level Architecture 오해 : 추상적이고 실제 개발과 동떨어져 있다. (0) | 2024.11.28 |
SW 아키텍처 모듈화: 아키텍처 응집도 측정 기법 (Lack of Cohesion in Methods, LCOM) (1) | 2024.09.02 |
ChatGPT가 말하는 소프트웨어 아키텍처가 필요한 이유 (0) | 2024.09.01 |
SW 아키텍처 모듈화: 어떻게 할 수 있을까? 고려사항은 무엇일까? (0) | 2024.09.01 |