소프트웨어 테스트의 순환 복잡도(예)
맥케이브의 순환적 복잡성이란 무엇입니까?
소프트웨어 테스트의 순환 복잡도 소프트웨어 프로그램의 복잡도를 측정하는 데 사용되는 테스트 메트릭입니다. 소프트웨어 프로그램의 소스 코드에서 독립적인 경로를 정량적으로 측정한 것입니다. 순환 복잡도는 제어 흐름 그래프를 사용하거나 소프트웨어 프로그램 내의 함수, 모듈, 메서드 또는 클래스와 관련하여 계산할 수 있습니다.
독립 경로는 다른 경로에서 이전에 통과한 적이 없는 가장자리가 하나 이상 있는 경로로 정의됩니다.
이 메트릭은 1976년 Thomas J. McCabe에 의해 개발되었으며 프로그램의 제어 흐름 표현을 기반으로 합니다. 제어 흐름은 프로그램을 노드와 에지로 구성된 그래프로 묘사합니다.
그래프에서 노드는 처리 작업을 나타내고 가장자리는 노드 간의 제어 흐름을 나타냅니다.
프로그램의 흐름 그래프 표기법
프로그램의 흐름 그래프 표기법은 가장자리를 통해 연결된 여러 노드를 정의합니다. 다음은 if-else, While, Until 및 일반적인 흐름 순서와 같은 문에 대한 흐름 다이어그램입니다.
순환 복잡도를 계산하는 방법
수학적 표현:
수학적으로, 그것은 그래프 다이어그램을 통한 독립적인 경로의 집합입니다. 프로그램의 코드 복잡도는 다음 공식을 사용하여 정의할 수 있습니다.
V(G) = E - N + 2
어디에,
E - 모서리 수
N – 노드 수
V (G) = P + 1
여기서 P = 조건자 노드 수(조건을 포함하는 노드)
예 -
i = 0; n=4; //N-Number of nodes present in the graph while (i<n-1) do j = i + 1; while (j<n) do if A[i]<A[j] then swap(A[i], A[j]); end do; j=j+1; end do;
이 프로그램의 흐름 그래프는 다음과 같습니다.
수학적으로 계산하고,
- V(G) = 9 - 7 + 2 = 4
- V(G) = 3 + 1 = 4 (조건 노드는 1,2 노드임)
- Basis Set – 프로그램이 실행 가능한 경로의 집합
- 1, 7
- 1, 2, 6, 1, 7
- 1, 2, 3, 4, 5, 2, 6, 1, 7
- 1, 2, 3, 5, 2, 6, 1, 7
순환 복잡도의 속성
순환 복잡도의 속성은 다음과 같습니다.
- V(G)는 그래프의 최대 독립 경로 수입니다.
- V(G) >=1
- V(G) = 1이면 G는 하나의 경로를 갖습니다.
- 복잡성을 10으로 최소화
이 측정항목이 소프트웨어 테스트에 어떻게 유용합니까?
Basis Path 테스트는 White box 기술 중 하나이며 테스트 중에 적어도 하나의 명령문을 실행하도록 보장합니다. 프로그램을 통한 각 선형 독립 경로를 확인합니다. 테스트 케이스의 개수를 의미하며, 이는 프로그램의 순환 복잡도와 동일하다.
이 메트릭은 사이클로매틱 복잡도(M)의 속성 때문에 유용합니다.
- M은 분기 적용 범위(상한)를 달성하기 위한 테스트 사례의 수일 수 있습니다.
- M은 그래프를 통과하는 경로의 수일 수 있습니다. (하한)
이 예를 고려하십시오 -
If (Condition 1) Statement 1 Else Statement 2 If (Condition 2) Statement 3 Else Statement 4
이 프로그램의 순환 복잡도는 8-7+2=3입니다.
복잡도가 3으로 계산되었으므로 위 예제의 전체 경로 범위를 위해서는 XNUMX개의 테스트 케이스가 필요합니다.
따라야 할 단계:
순환 복잡도를 계산하고 테스트 케이스를 설계하려면 다음 단계를 따라야 합니다.
1단계 – 코드의 노드와 에지를 사용하여 그래프 구성
2단계 – 독립 경로 식별
3단계 – 순환 복잡도 계산
4단계 – 테스트 케이스 설계
기본 세트가 구성되면, 테스트 사례 모든 경로를 실행하도록 작성되어야 합니다.
뷔(G) 자세히 보기
프로그램이 작으면 사이클로매틱 복잡도를 수동으로 계산할 수 있습니다. 프로그램이 매우 복잡하면 더 많은 흐름 그래프가 포함되므로 자동화된 도구를 사용해야 합니다. 복잡도 수를 기준으로 팀은 측정을 위해 취해야 할 조치를 결론 내릴 수 있습니다.
다음 표는 v(G)의 복잡도 수와 해당 의미에 대한 개요를 제공합니다.
복잡도 숫자 | 의미 |
---|---|
1-10 | 구조화되고 잘 작성된 코드
높은 테스트 가능성 비용과 노력이 적습니다. |
10-20 | 복잡한 코드
중간 테스트 가능성 비용과 노력은 중간 수준입니다. |
20-40 | 매우 복잡한 코드
낮은 테스트 가능성 비용과 노력이 크다 |
> 40 | 전혀 테스트할 수 없음
매우 높은 비용과 노력 |
순환 복잡도 계산 도구:
애플리케이션의 복잡성을 결정하는 데 사용할 수 있는 도구가 많이 있습니다. 일부 복잡성 계산 도구는 특정 기술에 사용됩니다. 복잡성은 프로그램의 결정 지점 수로 찾을 수 있습니다. 결정 지점은 소스 코드의 if, for, for-each, while, do, catch, case 문입니다.
도구의 예는 다음과 같습니다.
Cyclomatic Complexity의 사용:
순환 복잡도는 매우 유용할 수 있습니다.
- 개발자와 테스터가 독립적인 경로 실행을 결정하는 데 도움이 됩니다.
- 개발자는 모든 경로가 한 번 이상 테스트되었는지 확인할 수 있습니다.
- 알려지지 않은 경로에 더 집중할 수 있도록 도와줍니다.
- 코드 적용 범위 개선 소프트웨어 공학
- 애플리케이션 또는 프로그램과 관련된 위험을 평가합니다.
- 주기 초기에 이러한 지표를 사용하면 프로그램의 위험이 줄어듭니다.
결론
순환 복잡도는 구조화된 또는 백 Box 지원. 주로 프로그램의 복잡성을 평가하는 데 사용됩니다. 결정 지점이 많으면 프로그램의 복잡성이 더 큽니다. 프로그램의 복잡성 숫자가 높으면 오류 확률이 높고 유지 관리 및 문제 해결에 시간이 더 걸립니다.