나는 최근 UniC에서 순환 복잡성 (McCabe)과 소프트웨어의 도달 가능성을 연구했습니다. 오늘 제 강사는 두 측정 항목 사이에 상관 관계가 없다고 말했지만 이것이 사실입니까?
실제로 그렇기도하고 그렇기도합니다.
우선 순환 복잡도에 대한 McCabe 메트릭은 제어 흐름 그래프에서 계산됩니다. 제어 흐름 그래프에서 소스 블록을 기본 블록 또는 명령문이 노드 인 노드와 이들 사이의 전이가있는 직접 그래프로 변환합니다. 또는 조절 된 점프 및 루프의 경우)가 모서리입니다. 여기의 순환 복잡도는 에지 수와 노드 수의 차이로 볼 때 대략 전체 프로그램에 분리 된 코드가없는 것으로 간주되는 경우 (예 : 그래프가 연결된 경우) 발생할 수 있습니다.
CC = E - N
도달 가능성 문제는 다음과 같이 표현 될 수있는 그래프 이론의 일반적인 문제입니다. 두 개의 노드 A와 B가 주어지면 노드 A는 노드 A에서 도달 할 수 있습니다. 즉, 하나는 A에서 시작하여 그래프의 가장자리를 따라 올 수 있습니다. 방향? 따라서 다시 코드가 아닌 제어 흐름 그래프에 적용되는 메트릭입니다.
이 문제를 제어 흐름 그래프 에 적용하는 방법에는 여러 가지가 있습니다 . 한 가지 방법은 소위 "가변성 도달 가능성 분석"입니다. 즉, 주어진 변수에 대해 분석이 특정 프로그램 지점에서 해당 값을 계속 사용할 수 있는지 여부를 결정합니다 (이 기법은 소프트웨어 분석에서 슬라이싱이라고도 함). 또한 멀티 스레드 응용 프로그램에 대해이 용어 (및 일반적으로 연결 가능성 문제)를 사용하는 기사 만 찾았습니다 .
기본적으로 CC와 도달 가능성 사이의 일종의 상관 관계를 볼 수 있습니다 .CC가 증가하면 노드의 가장자리 비율도 증가하고 가장자리의 방향이 중요한 방향 그래프의 경우에도 증가하는 것으로 추측 할 수 있습니다 에지의 수는 결국 그래프에서 이용 가능한 경로를 증가 시키며 따라서 노드들 사이의 직접 또는 간접 연결을 통해 도달 가능성을 증가시킨다. 그래서, 대답은 예입니다 여기.
다른 한편으로, 멀티 스레드 환경에서 도달 가능성에 대한 개념은 소위 상층 분석을 필요로하며 이는 사소한 것이 아닙니다. CC의 증가 (여기서는 " 동기 복잡도 "라고 함)는 소프트웨어에서 교착 상태가 발생할 가능성이 높아져 특정 노드 / 코드 세그먼트의 도달 가능성을 감소시킬 수 있습니다. 따라서 "아니오"도 여기에 유효한 답변 입니다.