I've been studying cyclomatic complexity (McCabe) and reachability of
software at uni recently. Today my lecturer said that there's no
correlation between the two metrics, but is this really the case?
In realtà sia sì che no.
Prima di tutto, solo per ricordarti, la metrica di McCabe per la complessità ciclomatica è calcolata sul grafico del flusso di controllo in cui si astraggono il codice sorgente in un grafico diretto con blocchi o istruzioni di base che sono i nodi e le transizioni tra loro controllo del flusso verso il basso o in caso di salti e loop condizionati) essendo bordi. La complessità ciclomatica qui può essere approssimativa (se consideri che il tuo intero programma non ha codice isolato, cioè il tuo grafico è collegato) visto come la differenza tra il numero di fronti e il numero di nodi.
CC = E - N
Il problema della raggiungibilità è un problema comune nella teoria dei grafi che può essere espresso nel modo seguente: dati due nodi A e B, è il nodo B raggiungibile dal nodo A, cioè si può raggiungere B partendo da A e seguendo i bordi del grafico nella direzione corretta? Quindi, è di nuovo la metrica applicabile al grafico del flusso di controllo e non al codice.
Esistono diversi modi per applicare questo problema al grafico del flusso di controllo . Un modo è la cosiddetta "analisi della raggiungibilità variabile", nel senso che per la variabile data l'analisi determina se il suo valore è ancora disponibile in determinati punti del programma (questa tecnica viene anche chiamata slicing nell'analisi del software). Ho anche trovato solo alcuni articoli che usano questo termine (e generalmente il problema di raggiungibilità) per multi- applicazioni con thread .
Fondamentalmente si può vedere una sorta di correlazione tra CC e raggiungibilità: con l'aumento di CC aumenta anche il rapporto tra gli spigoli sui nodi e anche nel caso di un grafico diretto in cui anche la direzione del bordo è importante, si può ipotizzano che l'aumento del numero di spigoli porti infine all'aumento dei percorsi disponibili nel grafico e quindi ad aumentare la raggiungibilità tramite connessioni dirette o indirette tra i nodi. Quindi, la risposta è Sì qui.
Dall'altro lato, la nozione di raggiungibilità nell'ambiente multi-thread richiede l'analisi del cosiddetto supergraph - e questo non è così banale. L'aumento di CC (chiamato qui " complessità di sincronizzazione ") potrebbe portare alla maggiore probabilità di deadlocking nel software e quindi a ridurre la raggiungibilità di determinati nodi / segmenti di codice. Pertanto "No" è una risposta valida anche qui .