2010-02-02 5 views
4

직장에서 우리는 높은 순환 주기적 복잡성을 초래하는 일반적인 문제를 조사하고 있습니다. 예를 들어, 큰 if-else 문을 사용하면 순환 복잡성이 높아질 수 있지만 조건을 다형성으로 대체하면 해결할 수 있습니다. 다른 예가 있습니까?Cyclomatic Complexity의 일반적인 원인 및 해결책

+0

분기 동작 한 것이 된 Cyclomatic의 복잡성 –

+0

http://en.wikipedia.org/wiki/Cyclomatic_complexity 증가 모든 구조 : –

+0

를 본질적으로 나쁜 것 같은 "순환 적 복잡성"이라고 말합니다. 실제 문제를 일으키는 원인을 보면서 더 잘하지 않겠습니까? –

답변

5

NDepend의 definition of Cyclomatic Complexity을 참조하십시오.

Nesting Depth 또한 훌륭한 코드 측정 항목입니다.

순환 적 복잡성은 절차에서 취할 수있는 의사 결정의 수와 같은 일반적인 절차 적 소프트웨어 메트릭입니다. 구체적으로, C#에서 메소드의 CC는 1 + {메소드 본문에서 발견되는 다음 표현식의 수}입니다. 동안 | | foreach | 케이스 | 기본 | 계속 | 고토 | & & | || | 캐치 | 삼항 연산자? : | ??

다음 계산식은 CC 계산을 위해 계산되지 않습니다.

else | 할 | 스위치 | 시도해 | 사용 | 던지다 | 마침내 | 반환 | 객체 생성 | 메서드 호출 | 필드 액세스

OO 세계에 맞게이 메트릭은 메소드와 클래스/구조 (메소드 CC의 합계)에 모두 정의됩니다. 익명 메소드의 CC는 외부 메소드의 CC를 계산할 때 계산되지 않는다.

권장 사항 : CC가 15보다 높은 방법은 이해하고 유지하기가 어렵습니다. CC가 30보다 높은 메소드는 매우 복잡하므로 더 작은 메소드로 분할해야합니다 (툴에 의해 자동 생성되는 경우 제외).

+0

계산 방법을 추가해 주셔서 감사합니다. –

1

많은 if를 사용하지 않으려는 또 다른 예는 Finite State Machine을 구현 한 것입니다. 이벤트가 전환되므로 이벤트의 조건이 시스템의 상태를 변경하는 이러한 전환과 함께 명확한 방식으로 내재되어 있습니다. 제어가 더 쉽습니다.

당신에게 키우면 혜택의 일부를 언급 링크를 남겨주세요 :

http://www.skorks.com/2011/09/why-developers-never-use-state-machines/