Complessità ciclomatica nei test del software (esempio)

Cos'è la complessità ciclomatica di McCabe?

Complessità ciclomatica nei test del software è una metrica di test utilizzata per misurare la complessità di un programma software. È una misura quantitativa di percorsi indipendenti nel codice sorgente di un programma software. La complessità ciclomatica può essere calcolata utilizzando grafici di flusso di controllo o rispetto a funzioni, moduli, metodi o classi all'interno di un programma software.

Il percorso indipendente è definito come un percorso che ha almeno un bordo che non è stato percorso prima in nessun altro percorso.

Questa metrica è stata sviluppata da Thomas J. McCabe nel 1976 e si basa su una rappresentazione del flusso di controllo del programma. Il flusso di controllo descrive un programma come un grafico costituito da nodi e spigoli.

Nel grafico, i nodi rappresentano le attività di elaborazione mentre i bordi rappresentano il flusso di controllo tra i nodi.

La complessità ciclomatica di McCabe

Notazione del grafico di flusso per un programma

La notazione del diagramma di flusso per un programma definisce diversi nodi collegati attraverso i bordi. Di seguito sono riportati i diagrammi di flusso per istruzioni come if-else, While, Until e la normale sequenza di flusso.

Notazione del grafico di flusso per un programma

Come calcolare la complessità ciclomatica

Rappresentazione matematica:

Matematicamente, è un insieme di percorsi indipendenti attraverso il diagramma grafico. La complessità del codice del programma può essere definita utilizzando la formula –

V(G) = E - N + 2

Dove,

E – Numero di bordi

N – Numero di nodi

V (G) = P + 1

Dove P = Numero di nodi predicati (nodo che contiene la condizione)

Esempio -

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;

Il grafico di flusso per questo programma sarà

Calcola la complessità ciclomatica

Calcolare matematicamente,

  • V(Sol) = 9 – 7 + 2 = 4
  • V(G) = 3 + 1 = 4 (i nodi di condizione sono 1,2 e 3 nodi)
  • Set di base: un insieme di possibili percorsi di esecuzione di un programma
  • 1, 7
  • 1, 2, 6, 1, 7
  • 1, 2, 3, 4, 5, 2, 6, 1, 7
  • 1, 2, 3, 5, 2, 6, 1, 7

Proprietà della complessità ciclomatica

Di seguito sono riportate le proprietà della complessità ciclomatica:

  1. V (G) è il numero massimo di percorsi indipendenti nel grafico
  2. V(G) >=1
  3. G avrà un percorso se V (G) = 1
  4. Ridurre al minimo la complessità a 10

In che modo questa metrica è utile per i test del software?

Il test Basis Path è una delle tecniche White box e garantisce l'esecuzione di almeno un'istruzione durante il test. Controlla ogni percorso linearmente indipendente attraverso il programma, che significa che il numero di casi di test sarà equivalente alla complessità ciclomatica del programma.

Questa metrica è utile a causa delle proprietà della complessità ciclomatica (M) –

  1. M può essere il numero di casi di test per ottenere la copertura delle filiali (limite superiore)
  2. M può essere il numero di percorsi attraverso i grafici. (Limite inferiore)

Considera questo esempio:

If (Condition 1)
Statement 1

Else
Statement 2

If (Condition 2)
Statement 3

Else
Statement 4

La complessità ciclomatica per questo programma sarà 8-7+2=3.

Poiché la complessità calcolata è pari a 3, sono necessari tre casi di test per la copertura completa del percorso per l'esempio precedente.

Passi da seguire:

Per calcolare la complessità ciclomatica e progettare i casi di test è necessario seguire i seguenti passaggi.

Passo 1 – Costruzione di grafi con nodi e spigoli dal codice

Passo 2 – Individuazione di percorsi indipendenti

Passo 3 – Calcolo della complessità ciclomatica

Passo 4 – Progettazione di casi di test

Una volta formato il set di base, CASI TEST dovrebbe essere scritto per eseguire tutti i percorsi.

Altro su V (G)

La complessità ciclomatica può essere calcolata manualmente se il programma è piccolo. Se il programma è molto complesso, è necessario utilizzare strumenti automatizzati, poiché ciò comporta più grafici di flusso. In base al numero di complessità, il team può trarre conclusioni sulle azioni che devono essere intraprese per la misurazione.

La tabella seguente fornisce una panoramica sul numero di complessità e sul significato corrispondente di v (G):

Numero di complessità Significato
1-10 Codice strutturato e ben scritto

Alta testabilità

Il costo e lo sforzo sono inferiori

10-20 Codice complesso

Testabilità media

Il costo e l'impegno sono medi

20-40 Codice molto complesso

Bassa testabilità

I costi e gli sforzi sono elevati

> 40 Per nulla verificabile

Costi e impegno molto elevati

Strumenti per il calcolo della complessità ciclomatica:

Sono disponibili molti strumenti per determinare la complessità dell'applicazione. Alcuni strumenti di calcolo della complessità sono utilizzati per tecnologie specifiche. La complessità può essere trovata tramite il numero di punti di decisione in un programma. I punti di decisione sono if, for, for-each, while, do, catch, case statement in un codice sorgente.

Esempi di strumenti sono

  • OCLint – Analizzatore di codice statico per C e linguaggi correlati
  • Componente aggiuntivo Reflector: metriche del codice per gli assembly .NET
  • GMetrics – Trova le metriche in Java relative applicazioni

Utilizzi della complessità ciclomatica:

La complessità ciclomatica può rivelarsi molto utile in

  • Aiuta sviluppatori e tester a determinare esecuzioni di percorsi indipendenti
  • Gli sviluppatori possono garantire che tutti i percorsi sono stati testati almeno una volta
  • Ci aiuta a concentrarci maggiormente sui sentieri scoperti
  • Migliora la copertura del codice in Software Engineering
  • Valutare il rischio associato all'applicazione o al programma
  • L'utilizzo di questi parametri nelle prime fasi del ciclo riduce maggiormente i rischi del programma

Conclusione

La complessità ciclomatica è una metrica software utile per i processi strutturati o Bianco Box Testing. Viene utilizzato principalmente per valutare la complessità di un programma. Se i punti di decisione sono maggiori, allora la complessità del programma è maggiore. Se il programma ha un numero di complessità elevato, allora la probabilità di errore è alta con un tempo maggiore per la manutenzione e la risoluzione dei problemi.