Cyclomatic Complexity 이야기

Cyclomatic Complexity는 코드 품질의 정량적 지표로 사용되고 있습니다. 코드 품질의 여러 측면 중 하나를 나타내는 것입니다만 아직 이만한 다른 메트릭을 찾지는 못했습니다. 개념을 설명하기도 쉽고, 메트릭을 산출하기도 쉽고, 문제의 소지가 있는 코드를 드러내는 데도 효과적이기 때문입니다.

Cyclomatic Complexity는 “분기문 개수 + 1″ 로 쉽게 계산할 수 있습니다. 의미적으로는 실행 경로의 개수입니다. 이는 즉 테스트해봐야 하는 경로의 개수이고, 이것이 높다는 것은 필요한 테스트케이스가 그만큼 많으므로 오류를 모두 확인하지 못하고 출시할 수 있다는 것이죠. 10을 기준으로 해서 더 높아지지 않도록 가이드합니다. 언어, 분야에 따라 다르겠지만 대개는 10을 기준으로 이야기합니다.

원칙적으로는 위처럼 계산할 수 있습니다만, 구체적인 계산 방식에 따라 파생 메트릭이 더 있습니다. Understand for C++라는 도구에서는 Cyclomatic, CyclomaticModified, CyclomaticStrict와 같이 세 가지 다른 값을 제공합니다. (참고)

  • Cyclomatic : 보통 알고 있는 분기문 개수 + 1 (if, for, while, switch/case, …)
  • CyclomaticModified : switch/case 를 case 수에 관계없이 하나(1)로 간주
  • CyclomaticStrict : 조건식을 하나의 분기문으로 간주. && 나 || 로 묶인 복합조건식을 개별로 취급

Switch/case 는 dispatching code에서 자주 등장합니다. case문이 많아지면 10을 넘기기는 아주 쉽죠. 이 같은 지적을 감안한 것이 Modified version이고, 하나의 if문에 복합조건식이 있는 경우까지 까칠하게 따져야 한다는 입장이 Strict version입니다. 저는 보통 Cyclomatic만을 다룹니다.

Share and Enjoy:

Tags:

One Response to “Cyclomatic Complexity 이야기”

  1. 꾸러기 Says:

    https://www.okjsp.pe.kr/seq/142831 에서 인용되었군요. ^^; 글타래의 주제가 재미있습니다. ‘코드를 보고 초보구나.. 느끼는 경우’

Leave a Reply