5

대학의 소프트웨어 품질 보증 과정에서 Cyclomatic Complexity를 연구 중이며 술어 문 또는 노드에 복합 조건이있을 때 작동 방식을 이해하는 데 어려움을 겪고 있습니다.복합 조건 및 단락 회로 순환 복잡성

V(G) = 2 

: 나는 우리가 두 가지의 복잡성을있을 것입니다 이와 같은 프로그램 그래프

V(G) = # of predicate nodes (with outdegree = 2) + 1 

그래서 내 수업 시간에 내를 사용하는 차있는 복잡성을, 여러 정의가되어 보았다 Program graph with cyclomatic complexity of two

또한

V(G) = # edges - # nodes + 2 
0123로 주어진 된 Cyclomatic 복잡성의 정의를 보았다

위의 그래프에도 적용됩니다. 그러나 우리는 술어 노드에 대한 복합 조건을 가지고 있습니다. 그리고 우리는 언어와 시스템이 자동 단락 회로로 설정되었다고 생각합니다. 아래의 그래프는 그래프로 확대되어야합니다. 실제 소스 코드에서 단 하나의 if 문만 있거나 V (G) = 2 인 경우에도 Cyclomatic의 복잡성은 3이됩니까?.

Cyclomatic 복잡성에 대한 정의의 대부분이 술어 노드에 대해 이야기하고 있으며 술어를 이해할 때 여러 개의 단락 조건이 포함될 수 있으므로 혼란 스럽습니다. 그렇지 않은 경우 단락 동작이 성능을 향상시키면서 실제로 고려할 때 Cyclomatic 복잡성을 증가시키는 것으로 보입니다. 소스 코드가 주어지면 순환 적 복잡성을 계산하기 전에 왼쪽의 그래프와 같이 모든 조건을 자체 노드로 분할해야합니까? 이 단락의 평가를 사용하여 정의되어 있기 때문에 C에서 Program graph expanded to show short circuiting behavior

답변

2

(C++, 자바, C 번호)은 "& &"연산자는 복잡성을 추가한다. 이 경우 복잡성을 3.

http://hissa.nist.gov/HHRFdata/Artifacts/ITLdoc/235/chapter4.htm

은 "부울 연산자는 부작용의 조건부 실행으로 이어질 수있는 그들이 단락 회로 평가 의미를 가지고 있는지에 따라 복잡성 중 하나 또는 아무것도를 추가하지 참조 할 것 . "

그림 4-4에는 복잡성을 결정하는 방법을 보여주는 주석이 달린 소스 코드와 해당 흐름 그래프가 있습니다.

도 참조 Cyclomatic complexity of IF((A>B) AND (C>D)) and IF((A>B) OR (C>D))