2010-04-19 5 views
10
insertion_procedure (int a[], int p [], int N) 
{ 
    int i,j,k; 
    for (i=0; i<=N; i++) p[i] = i; 
    for (i=2; i<=N; i++) 
    { 
     k = p[i]; 
     j = 1; 
     while (a[p[j-1]] > a[k]) {p[j] = p[j-1]; j--} 
     p[j] = k; 
    } 
} 

이 코드는 순환 복잡성을 찾아 화이트 박스 테스트 케이스와 블랙 박스 테스트 케이스를 제안해야합니다. 하지만 코드에 CFG를 만드는 데 문제가 있습니다.다음 절차의 제어 흐름 그래프 및 순환 복잡성

테스트 사례에 대한 도움을 받으실 수 있습니다.

+0

이 어떤 언어인가? 선언에서 "int"보다는 "Int"를 제외하고 C와 유사합니다. 그것이 C이면 중첩 된 for 루프는 없지만 for 루프에 중첩 된 while 루프는 ratehr입니다. –

+0

아 네 for for 중첩 된 루프가 없습니다. 그것의 C –

답변

26

시작 :

insertion_procedure (int a[], int p [], int N) 
{ 
(1) Int i,j,k; 
(2) for ((2a)i=0; (2b)i<=N; (2c)i++) 
(3)  p[i] = i; 
(4) for ((4a)i=2; (4b)i<=N; (4c)i++) 
     { 
(5)  k=p[i];j=1; 
(6)  while (a[p[j-1]] > a[k]) { 
(7)   p[j] = p[j-1]; 
(8)   j-- 
      } 
(9)   p[j] = k; 
     } 

지금 당신이 명확하게 진술 볼 수 있습니다 먼저 실행하고 마지막으로있는 등 때문에 CFG 그리기 간단한된다. 조건 4
  • 호 (그래프에서 적색)

    1. 그래프 영역의 수를 카운트 :

      CFG

      이제 된 Cyclomatic 복잡성을 계산하는 세 가지 방법 중 하나를 사용 + 1 : 3 + 1 = 4

    2. 가장자리 없음 - 아니요. 노드 + 2 : 14 -을 12 + 2 = 4
  • +0

    호기심에서 플로우 그래프를 생성하기 위해 어떤 도구를 사용 했습니까? –

    +1

    @James McNellis CFG를 그리기 위해 MS Visio를 사용했습니다. –

    +0

    아. 나는 그것이 어떤 종류의 코드 분석 도구에 의해 만들어 졌을 것이라고 생각했다. +1 정말 좋은 그림을 그리는 노력을 복용! –

    3

    복잡성을가하면서 루프의 경우 조건 while 루프 용 루프 +1 +1위한 절차 +1 4.

    1이다. 문을 번호로

    +0

    하지만 2 개의 루프가 있습니까? –

    +0

    네,하지만 그것들은 중첩의 같은 수준에 있으므로, 코드를 통과하는 단일 경로가 있습니다. ifs는 없습니다. –

    +0

    그래서 5일까요? –

    2
    또한 맥케이브 수식을 사용할 수

    M = E-N + 2C
    E = 에지
    N = 노드
    C = 성분
    M = 복잡성을

    E = 14 
    N = 12 
    C = 1 
    

    M = 14-12 + 2*1 = 4