Esiste una correlazione tra complessità e raggiungibilità?


18

Di recente ho studiato la complessità ciclomatica (McCabe) e la raggiungibilità del software presso uni. Oggi il mio docente ha affermato che non esiste alcuna correlazione tra le due metriche, ma è davvero così?

Penserei che ci sarebbe sicuramente una certa correlazione, poiché i programmi meno complessi (dai pochi che abbiamo visto) sembrano avere risultati "migliori" in termini di raggiungibilità.

Qualcuno è a conoscenza di qualsiasi tentativo di esaminare insieme le due metriche e, in caso contrario, quale sarebbe un buon posto per trovare dati sulla complessità e sulla raggiungibilità per un gran numero (ish) di programmi?

Risposte:


2

Di recente ho studiato la complessità ciclomatica (McCabe) e la raggiungibilità del software presso uni. Oggi il mio docente ha affermato che non esiste alcuna correlazione tra le due metriche, ma è davvero così?

In realtà sia sì che no.

Prima di tutto, solo per ricordarti, la metrica McCabe per la complessità ciclomatica viene 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 di essi (tramite il normale flusso di controllo verso il basso o in caso di salti e loop condizionati) come bordi. La complessità ciclomatica qui può essere approssimativamente (se si considera che l'intero programma non ha un codice isolato, cioè il grafico è collegato) visto come la differenza tra il numero di spigoli 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: 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 in modo corretto direzione? 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 di raggiungibilità variabile", nel senso che per la variabile data l'analisi determina se il suo valore è ancora disponibile in un determinato punto del programma (questa tecnica è anche chiamata slicing nell'analisi del software). Ho anche trovato solo alcuni articoli che usano questo termine (e generalmente il problema di raggiungibilità) per applicazioni multi-thread .

Fondamentalmente si può vedere una sorta di correlazione tra CC e raggiungibilità: con l'aumento di CC aumenta anche il rapporto dei bordi sui nodi e anche nel caso di un grafico diretto in cui è importante anche la direzione del bordo, si può ipotizzare che l'aumento il numero di spigoli porta infine all'aumento dei percorsi disponibili nel grafico e quindi all'aumento della raggiungibilità tramite collegamenti diretti o indiretti tra i nodi. Quindi, la risposta è Sì qui.

D'altra parte, la nozione di raggiungibilità in un ambiente multi-thread richiede l'analisi del cosiddetto supergrafo - e questo non è così banale. L'aumento del CC (chiamato qui " complessità della sincronizzazione ") potrebbe comportare una maggiore probabilità di deadlock nel software e quindi ridurre la raggiungibilità di determinati nodi / segmenti di codice. Pertanto "No" è una risposta valida anche qui .


1

Non ho familiarità con la raggiungibilità, ma se si tratta di una misura di percorsi di codice che non possono mai essere eseguiti, la complessità ciclomatica dovrebbe essere una sorta di limite superiore di quello.


0

Potrebbero esserci delle statistiche su questo, ma direi che non c'è alcuna correlazione perché uno non dipende dall'altro e c'è anche una scelta nella progettazione di un sistema software in modo da poterlo eliminare.

In termini di dati del mondo reale, potrebbe esserci una forte correlazione, ma ciò potrebbe essere dovuto a sistemi software mal progettati che non eliminano questa correlazione. Potrebbe essere una correlazione accidentale a causa della mancanza di conoscenza della teoria dei grafi.


1
Uno a seconda dell'altro è causalità, non correlazione.
JeffO,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.