기본 콘텐츠로 건너뛰기

Cyclomatic complexity - 코드 품질의 정량적 지표

테스트 설계 기법 중에 Basis Path Testing 이라는 기법이 있습니다.

이 기법의 이론적인 배경을 이루고 있는 것이 Cyclomatic Complexity 라는 것입니다.

Cyclomatic Complexity 는 코드의 복잡도를 측정하는 정랑적 지표로 대표적인 매트릭 중 하나입니다.

Cyclomatic Complexity 에 대한 자세한 내용은 위키피디아에서 확인하실 수 있습니다.

Cyclomatic complexity (or conditional complexity) is a software metric ( measurement). It was developed by Thomas J. McCabe Sr. in 1976 and is used to ...


결론적으로 Cyclomatic Complexity는  “분기문 개수 + 1″ 로 쉽게 계산할 수 있습니다.

이 복잡도의 의미는 바로 실행 경로의 개수를 말합니다.

즉, 이것은 최소한 테스트를 수행해야 하는 경로의 개수이고, 이것이 높다는 것은 필요한 테스트케이스의 수가 그만큼 많아지게 되는 것이기 때문에 오류를 모두 확인하지 못하고 출시될 수 있다는 것을 말합니다.

일반적으로 Cyclomatic Complexity 는 10을 기준으로 해서 더 높아지지 않는 것을 권장합니다. 대략 3~7 정도면 잘 구조화된 코드로 봅니다.

이 Cyclomatic Complexity 는 사람이 직접 계산할 수도 있지만 복잡한 코드를 control flow graph 로 작성하고 계산하는 과정은 일종의 리소스 낭비나 다름없기 때문에 이러한 복잡도를 계산해 주는 도구가 있습니다.

가장 대표적인 것이 McCabe 사의 McCabe IQ 입니다.

그런데 대부분의 Cyclomatic Complexity 를 구하는 도구들의 가격은 일반적인 회사에서 구매하기에 절대 만만치 않은 금액들이 많습니다.

하지만 궁하면 통한다고 했던가요?

다른 방법으로 코드의 복잡도를 구해주는 몇몇 오픈소스 도구들이 있습니다.

그 중 사용방법이 쉬우면서 다양한 언어를 지원하고 기능이 충실한 프로그램 중 하나로 SourceMonitor 라는 도구가 있습니다.
이 오픈소스 도구는 Cyclomatic Complexity 를 구해주는 도구는 아니지만 기본적으로 코드의 복잡도를 구해주는 도구로 유용하게 사용할만한 도구입니다. (솔직히 이 도구가 구해주는 복잡도가 정확히 어떤 것들을 참고로 해서 어떤 로직으로 구해지는 잘 모르겠습니다. 혹시 아시는 분 계신가요? Cyclomatic Complexity 를 구해주지 못한다고 해도 복잡도라는 것을 직관적으로 보여주기 때문에 유용한 도구임에는 틀림없습니다.)

SourceMonitor 의 가장 큰 장점으로는 CruiseControl.Net에 붙여서 자동화할 수 있다는 것입니다.

위 도구의 자세한 사용법은 아래 블로그를 한번 살펴보시면 도움이 되실 것입니다. 해당 블로그를 작성하신 분께서 수정된 CruiseControl.Net 의 스타일 쉬트 파일도 공유중이십니다.
Cyclomatic Complexity 는 TDD와 같은 방법으로 개발을 진행할 때 코드의 품질을 측정할 수 있는 매트릭으로도 유용하고, 테스트 용이성을 판단하는 매트릭으로도 유용하게 사용됩니다.

이러한 매트릭을 측정하기 위해서 꼭 비싼 도구만을 사용해야 하는 것은 아니기 때문에 괜찮다면 한번 사용해 보시는 것도 좋을 것 같습니다.

댓글

댓글 쓰기

이 블로그의 인기 게시물

murianwind의 트위터 - 2012년 01월 20일 ~ 2012년 01월 26일

Usability Testing Field Notes http://t.co/vMccVuRU posted at 05:36:50 Raid a Dungeon, Finger Tap the Drums, and Hadoken! [App Deals Of The Day] http://t.co/bXdFbR6H posted at 07:37:44 [번역] 리그레션 다시 생각해 보기 - 파트 3: 리스크 완화 전략 http://t.co/CRgWtefS posted at 11:14:14 대통령 욕했다고 잡아가는 세상, 노무현도 그랬을까. http://t.co/jHmOCrPF posted at 17:10:03 MB 손녀의 몽클레어패딩과 노무현 손녀의 샌들 http://t.co/6FljNVky posted at 08:37:29 The mission of testing is always changing http://t.co/h2ldWbXX posted at 21:17:20 2012년도 Google에서 없어지거나 오픈소스화하거나 중단예정인 서비스들 . #google http://t.co/U1Z8KOwf posted at 05:19:43 게임회사의 회계이야기 (4) - 예산계획의 시작 http://t.co/vc0TTyb7 posted at 14:49:38 '사짜'에게 말려들지 않기 http://t.co/deIENSO5 posted at 19:15:02 한나라, 디도스 자료 제출 요구… 선관위, "적반하장" 맹비난 http://t.co/cnTRkcQL 꼼수다에 나왔던.. 바로 그곳.. 성지 순례 고고싱.. ㅋㅋㅋ posted at 09:04:54 [26일(목) 조간] 임기 4년차 경제성장률 노무현 5.2 vs 이명박 3.6 http://t.co/TxUBys6u posted at 10:13:40 [테스팅 히치하이커를 위한 안내서] 아마도 절대 알아낼 수 없을 것 같은 스파크의 연비 http://t.co/d...

그 상품을 내린 이유가 무엇이오?

어제 점심때 전화해서 상품 재고를 확인한 고객. 그러나 어제 저녁에 품절되서 상품을 내리게 되었다. 그 고객이 오늘 늦게 주문을 하려니 상품이 없다고, 항의하며 책임지고 물건을 구해줄 것을 요구. .....책임 없는 것 같은데요. 우리가 견적을 주거나 계약을 한것도 아니고... ps. 고객은 우리가 상품 페이지를 닫은 의도에 대해 의심하고 있음. -_- 의도까지야...있을리가.

PERT/CPM 그리고 CCPM

우선 이 글은 제 개인적인 이해를 적당히 정리한 글입니다. 세부적인 내용은 지금도 학습하는 중으로 물어보신다 하여도 대답해 줄만한 능력은 아니됩니다. 물론 제 개인적인 이해이기 때문에 잘못된 개념이 있을 수도 있으며 그런 부분에 대해 트랙백이나 댓글로 친절하게 알려주었으면 하는 바입니다. 지금부터 하고자 하는 얘기는 일정의 추정에 대한 얘기입니다. PMP 자격증을 취득하셨거나 중비중인 모든 분들은 기본적으로 PERT/CPM에 대해 알고 계실 것입니다. 고로 아래 내용은 다 아실 것이라 생각합니다. 다시 한번 말씀드리면 혹시 틀린 내용이나 이해를 잘 못하고 있는 부분이 있다면 친절히 알려주셨으면 하는 바입니다. 일정을 추산하는데 사용하는 분포는 크게 3가지로 나뉩니다. 베타 분포, 정규 분포, 삼각 분포 가장 먼저 볼 것은 정규 분포입니다. 아래 보는 것과 같은 그래프가 가장 대표적인 정규 분포 곡선이며, 6시그마에서 많이 볼 수 있는 곡선이기도 합니다. 위와 같은 정규분포 곡선에 따라 일정을 추산해 본다면 평균치는 현재 5일입니다. 어떤 작업을 수행할 때 평균적으로 5일을 소요하는 경우가 가장 많다라는 것입니다. 그렇다면 우리는 실제로 일정을 추산할 때 5일로 추산할까요? 절대로 그럴리가 없습니다. 우리는 여러 이유로 안전시간이라는 것을 삽입합니다. 만약 우리가 일정으로 5일로 추산한다면 일정에 맞춰 작업을 완료할 확률은 50%입니다. 때문에 우리는 일정에 맞춰 작업을 완료할 확률이 대략 90% 쯤 되는 날짜를 추산하게 됩니다. 대략 7일쯤을 적는 것이지요. 하지만 이렇게 일정을 추산하고 나면 사람은 역시 게을러지게 됩니다. 추가로 이틀의 시간을 안전시간으로 집어넣었기 때문에 파킨슨 법칙과 학생증후군의 환상 조합에 따라 7일이 다시금 평균값이 되고 일정이 완료되는 것은 9일경이 될 것입니다. 문제는 이러한 것이 각각의 작업 단위마다 발생된다면 전체 일정은 각 작업 단위의 지연이 모두 합쳐지기 때문에 눈덩이처럼 지연된다는 것입니다. 또다른 문제는 이것은 표준정규...