Software Architecture metric


1~2년 전쯤 자료 정리한 것을 드디어 이용할 때가 되어서 발표자료를 만드는 도중 다시 살펴보니 이해가 되지 않는 부분이 있길래 검색해봤다.

Object Oriented 개념의 indicator이긴 하지만, 일부는 C에서도 유용하게 사용할 만한 것들이 있다.

단, 문제는 이것을 어떻게 기계적으로 추출하느냐의 문제는 있다.

실무적인 문제가 남아있기는 하지만, 방법은 있을거라고 생각하고 일단 그 고민은 남겨두고..

embedded sw가 아직 c를 주로 사용하고 있기 때문에 c로의 적용 가능성에 대해서만 논의한다.

CBO : Coupling between objects – 한 object에서 다른 object를 몇개를 참조하였는가?

  • 이것을 c에 접목하자면, 한 component(라고 쓰고 file이라고 이해한다. file1개당 1개의 component로 정의된 설계를 했다고 가정하자)가 다른 component를 얼만큼 사용했는가?  (데이터 및 제어 관점)
    • 데이터 관점이라 함은 다른 component의 data를 끌어다 쓴 경우를 의미할 것이겠다. (global은 없다고 가정한다.)
    • 제어 관점이라 함은 다른 component의 function을 호출한 경우를 의미할 것이겠다.
    • DSM의 tabular notation을 사용해서도 표시할 수 있으며, 도구도 존재한다. (cppdepend, Lattix) 단 도구는 제어흐름만 추출되는 것으로 알고 있음.
  • 사용 용례: 해당 component를 필요로 한다면 추가적으로 어떤 component를 가져와야 하는지에 대한 정보 정도는 얻을 수 있다. 물론 dependency가 있는 해당 component에 대해서도 재귀적으로 그런 일을 해야만 Total Set을 알 수 있다는 점이 원래 의도한 질문에 대한 답이겠으나..

LCOM – Lack of Cohesion of Methods – 하나의 클래스 내부적 응집력에 대한 지표

  • 이것을 c에 접목하자면, 한 component내에 정의된 function들과 component data(static global을 의미함)간의 use/def관계를 이용한 component의 응집력을 확인할 수 있다.
  • LCOM = (SIGMA_AVG(m(DATA_SET) – m) / (1-m)의 식으로 표현할 수 있는데,
    • m – 적어도 하나의 component data를 사용한 function들의 갯수
    • m(data1) – component data인 data1을 사용한 function들의 갯수
    • SIGMA_AVG(m(DATA_SET) – component의 data집합인 DATA_SET에 대해 각각을 사용한 function들의 갯수를 일일이 더하고 그것을 DATA_SET의 갯수로 나눈 값.
  • LCOM이 0에 가깝다 – 응집력이 좋다. Atomic하다.
  • LCOM이 1에 가깝다 – 응집력이 좋지 않다. 쪼갤 수 있다.

참고

  1. WMC, CBO, RFC, LCOM, DIT, NOC – ‘The Chidamber and Kemerer Metrics’
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s