5

Sto studiando la complessità ciclomatica nel mio corso di Assicurazione della qualità del software presso l'Università e sto avendo difficoltà a capire come funziona quando si hanno condizioni composte in un'istruzione o nodo dichiarati. Ho visto più definizioni di complessità ciclomatica, il primario di che ha usato la mia nella mia classe èComplessità ciclopica con condizioni composte e cortocircuiti

V(G) = # of predicate nodes (with outdegree = 2) + 1 

Così, per un grafico programma come questo avremmo una complessità ciclomatica di due:

V(G) = 2 

Program graph with cyclomatic complexity of two

ho anche visto definizioni della complessità ciclomatica dato come

V(G) = # edges - # nodes + 2 

Che funziona anche per il grafico di cui sopra. Tuttavia, abbiamo condizioni composte per i nodi predicati. E consideriamo un linguaggio e un sistema predisposti per il cortocircuito automatico, mi sembra che il grafico in basso a sinistra debba essere espanso sul grafico. Se questo è il caso come sotto, la complessità ciclomatica diventa 3, anche se nel codice sorgente reale, potremmo avere una sola istruzione if o è ancora V (G) = 2?.

E 'fonte di confusione perché la maggior parte delle definizioni che vedo di complessità ciclomatica parlano di nodi predicati e, a quanto ho capito, potrebbero contenere più condizioni in cortocircuito. In caso contrario, sembra che il comportamento di cortocircuito, pur aumentando le prestazioni, sollevi effettivamente la complessità ciclomatica quando viene presa in considerazione. Se viene fornito il codice sorgente, tutte le condizioni devono essere suddivise nei propri nodi come il grafico a sinistra prima di poter calcolare la complessità ciclomatica? Program graph expanded to show short circuiting behavior

risposta

2

In C (C++, Java, C#), l'operatore "& &" aggiunge uno alla complessità perché è definito in modo da utilizzare la valutazione di corto circuito. Complessità ciclomatica in questo caso sarebbe 3.

Vedi http://hissa.nist.gov/HHRFdata/Artifacts/ITLdoc/235/chapter4.htm

"operatori booleani aggiungere uno o nulla alla complessità, a seconda che abbiano cortocircuito semantica valutazione che possono provocare l'esecuzione condizionale di effetti collaterali ".

La figura 4-4 ha un codice sorgente annotato e un diagramma di flusso corrispondente che dimostrano come viene determinata la complessità.

Vedere anche Cyclomatic complexity of IF((A>B) AND (C>D)) and IF((A>B) OR (C>D))