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

Devo trovare la complessità ciclomatica per questo codice e quindi suggerire alcuni casi di test scatola bianca e casi di test scatola nera. Ma sto avendo problemi a creare un CFG per il codice.Controllo flusso grafico e complessità ciclomatica per la seguente procedura

Apprezzerei anche qualche aiuto nei casi di test.

+0

Che lingua è questa? Sembra C tranne che per "Int" piuttosto che "int" nella dichiarazione. Se è C, non esiste un ciclo annidato, ma ratehr un ciclo while annidato in un ciclo for. –

+0

Oh sì, non esiste un ciclo annidato. Il suo C –

risposta

26

Inizia numerando le dichiarazioni:

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

Ora si può chiaramente vedere quale istruzione viene eseguita prima e che lo scorso ecc in modo da attirare l'CFG diventa semplice.

CFG

Ora, per calcolare ciclomatica complessità di utilizzare uno dei tre metodi:

  1. Contare il numero di regioni sul grafico: 4
  2. Numero di predicati (rosso sul grafico) + 1: 3 + 1 = 4
  3. No di spigoli - no. di nodi + 2: 14 - 12 + 2 = 4.
+0

Per curiosità, quale strumento hai usato per generare il diagramma di flusso? –

+1

@James McNellis Ho usato MS Visio per disegnare il CFG. –

+0

Ah; Ho pensato che potrebbe essere stato creato da una sorta di strumento di analisi del codice. +1 per lo sforzo di disegnare un'immagine davvero buona! –

3

La complessità ciclomatica è 4.

1 per la procedura +1 per il ciclo +1 per il ciclo while +1 per se condizione del ciclo while.

+0

Ma ci sono due loop per? –

+0

Sì, ma sono allo stesso livello di nidificazione, quindi c'è un singolo percorso attraverso il codice, senza se. –

+0

Quindi non dovrebbe essere 5? –

2

È anche possibile utilizzare McCabe formula M = E-N + 2C
E = bordi
N = nodi
C = componenti
M = complessità ciclomatica

E = 14 
N = 12 
C = 1 

M = 14-12 + 2*1 = 4