직장에서 우리는 높은 순환 주기적 복잡성을 초래하는 일반적인 문제를 조사하고 있습니다. 예를 들어, 큰 if-else 문을 사용하면 순환 복잡성이 높아질 수 있지만 조건을 다형성으로 대체하면 해결할 수 있습니다. 다른 예가 있습니까?Cyclomatic Complexity의 일반적인 원인 및 해결책
답변
NDepend의 definition of Cyclomatic Complexity을 참조하십시오.
Nesting Depth 또한 훌륭한 코드 측정 항목입니다.
순환 적 복잡성은 절차에서 취할 수있는 의사 결정의 수와 같은 일반적인 절차 적 소프트웨어 메트릭입니다. 구체적으로, C#에서 메소드의 CC는 1 + {메소드 본문에서 발견되는 다음 표현식의 수}입니다. 동안 | | foreach | 케이스 | 기본 | 계속 | 고토 | & & | || | 캐치 | 삼항 연산자? : | ??
다음 계산식은 CC 계산을 위해 계산되지 않습니다.
else | 할 | 스위치 | 시도해 | 사용 | 던지다 | 마침내 | 반환 | 객체 생성 | 메서드 호출 | 필드 액세스
OO 세계에 맞게이 메트릭은 메소드와 클래스/구조 (메소드 CC의 합계)에 모두 정의됩니다. 익명 메소드의 CC는 외부 메소드의 CC를 계산할 때 계산되지 않는다.
권장 사항 : CC가 15보다 높은 방법은 이해하고 유지하기가 어렵습니다. CC가 30보다 높은 메소드는 매우 복잡하므로 더 작은 메소드로 분할해야합니다 (툴에 의해 자동 생성되는 경우 제외).
계산 방법을 추가해 주셔서 감사합니다. –
많은 if를 사용하지 않으려는 또 다른 예는 Finite State Machine을 구현 한 것입니다. 이벤트가 전환되므로 이벤트의 조건이 시스템의 상태를 변경하는 이러한 전환과 함께 명확한 방식으로 내재되어 있습니다. 제어가 더 쉽습니다.
당신에게 키우면 혜택의 일부를 언급 링크를 남겨주세요 :http://www.skorks.com/2011/09/why-developers-never-use-state-machines/
- 1. 간단한 수업 + 공장에 대한 일반적인 해결책
- 2. .NET에서 버퍼 오버플로 오류의 일반적인 원인
- 3. 배 CodeSniffer Cyclomatic Complexity
- 4. WPF 및 String.format 원인
- 5. Entity Framework 4.0의 테이블 필드 업데이트에 대한 일반적인 해결책
- 6. Cyclomatic Complexity 대 프로젝트 상태
- 7. 원인
- 8. mod_rewrite를 원인
- 9. register_globals에 대한 가능한 해결책
- 10. 경고의 가능한 해결책
- 11. 의 strcpy 및 strcat와 원인 문제는 때때로
- 12. 팝업 페이지를 모달로 사용하는 해결책
- 13. web.config 편집 - 다운 타임의 원인?
- 14. API11 (및 now12) 및 Spannable의 원인 런타임 NPE
- 15. 장고 inlineformsets 및 일반적인 noobishness
- 16. 보기에서 작업으로 데이터 전달 ?? 해결책?
- 17. 과도하게 결정된 시스템에 대한 해결책
- 18. CSS 이미지 렌더링에 대한 해결책
- 19. PHP가 HTML 문자를 비교합니다. 해결책
- 20. iPad의 이미지로드 제한에 대한 해결책
- 21. 질문에 대한 해결책 뒤에있는 이유
- 22. 일일 데이터를위한 NoSQL 좋은 해결책?
- 23. File.mkdirs() 오류의 원인 발견
- 24. NSMutableDictionary 원인 EXC_BAD_ACCESS
- 25. 추가 관찰자의 원인 EXC_BAD_ACCESS
- 26. ASP.Net : OutOfMemoryExpcetions의 원인 찾기
- 27. 원인 : Unix 전송 오류?
- 28. 자바의 예외 원인 설정
- 29. 위젯 디버깅 원인 ANR
- 30. ^⇧H은 NoMethodError 원인
분기 동작 한 것이 된 Cyclomatic의 복잡성 –
http://en.wikipedia.org/wiki/Cyclomatic_complexity 증가 모든 구조 : –
를 본질적으로 나쁜 것 같은 "순환 적 복잡성"이라고 말합니다. 실제 문제를 일으키는 원인을 보면서 더 잘하지 않겠습니까? –