2010-04-19 24 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; 
    } 
} 

Bu kod için siklik karmaşıklığı bulmalı ve daha sonra bazı beyaz kutu test senaryoları ve kara kutu test senaryoları önermem gerekir. Ama ben kod için bir CFG yapmakta sorun yaşıyorum.Aşağıdaki prosedür için kontrol akış grafiği ve döngüsel karmaşıklık

Test durumlarında da yardımcı olabilirsiniz.

+0

bu hangi dil? Bildirimde "int" yerine "Int" dışında C'ye benziyor. Eğer C ise, döngü için iç içe geçmiş değildir, ancak for döngüsünde yuvalanmış bir süre döngüdür. –

+0

Oh evet iç içe geçmiş bir döngü yok. Onun C –

cevap

26

Başlangıç:

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; 
     } 

Şimdi açıkça beyan görebilirsiniz ilk yürütür ve son hangi vb yüzden cfg çizim basit hale gelir. Yüklemlerinin 4
  • sayılı (grafikteki kırmızı):

    1. grafikte bölgelerin sayısını:

      CFG

      Şimdi, cyclomatic karmaşıklığı hesaplamak için üç yöntemden birini kullanabilirsiniz + 1: 3 + 1 = 4

    2. Kenar yok - hayır. düğüm + 2 - 14: 12 + 2 = 4.
  • +0

    Merak etme, akış grafiğini oluşturmak için hangi aracı kullandınız? –

    +1

    @James McNellis CFG'yi çizmek için MS Visio kullandım. –

    +0

    Ah; Bir çeşit kod analiz aracı tarafından oluşturulmuş olabileceğini düşündüm. Gerçekten iyi bir resim çizme çabası için +1! –

    3

    cyclomatic karmaşıklık ise döngü halinde durum için edilerek döngü + 1 için döngü + 1 için prosedüre + 1 4.

    1 olduğu. ifadeleri numaralandırma tarafından

    +0

    Ama döngüler için iki tane var? –

    +0

    Evet, ancak aynı yuvalanma düzeyindeler, bu nedenle kodda tek bir yol var, yok ifs. –

    +0

    Yani 5 olmalıydı? –

    2
    Ayrıca McCabe formülü kullanabilirsiniz

    M = E-N + 2C
    e = kenarları
    N = düğümleri
    C = bileşenleri
    M = cyclomatic karmaşıklık

    E = 14 
    N = 12 
    C = 1 
    

    M = 14-12 + 2*1 = 4