Domanda

Un termine che vedo ogni tanto è "complessità ciclomatica". Qui su SO Ho visto alcune domande su "come calcolare il CC del Linguaggio X" o "Come posso fare Y con la minima quantità di CC", ma io non sono sicuro di aver ben capito cosa sia.

Al NDepend Sito , ho visto una spiegazione che in pratica dice "Il numero di decisioni in un metodo. Ogni caso, per, && ecc aggiunge +1 al CC "score"). E 'questo davvero? Se sì, perché è questo cattivo? vedo che si potrebbe desiderare di mantenere il numero di se -statements abbastanza basso per mantenere il codice facile da capire, ma è davvero tutto ciò che ad esso?

O c'è qualche concetto più profondo ad esso?

È stato utile?

Soluzione

Non sono a conoscenza di un concetto più profondo. Credo che sia generalmente considerato nel contesto di un indice di manutenibilità. I rami più ci sono all'interno di un particolare metodo, tanto più difficile è quello di mantenere un modello mentale di operazione che di metodo (in genere).

Metodi con maggiore complessità ciclomatica sono anche più difficili da ottenere copertura di codice completo su di unit test. (Grazie Mark W !)

che porta tutti gli altri aspetti della manutenibilità in, naturalmente. Probabilità di errori / regressioni / così via. Il concetto di base è abbastanza straight-forward, però.

Altri suggerimenti

Cyclomatic complessità misura il numero di volte in cui è necessario eseguire un blocco di codice con parametri diversi, al fine di eseguire ogni percorso attraverso quel blocco. Un conteggio più alto è un male perché aumenta le possibilità di errori logici fuggire strategia di sperimentazione.

Cyclocmatic complexity = Number of decision points + 1

I punti di decisione possono essere le vostre istruzioni condizionali, come se, se ... else, switch, per il ciclo, while etc.

La seguente tabella descrive il tipo di applicazione.

  • complessità ciclomatica si trova 1-10  Per essere considerato normale applicatinon

  • complessità ciclomatica risiede 11-20  applicazione Moderato

  • complessità ciclomatica risiede 21-50  applicazione Risky

  • complessità ciclomatica si trova oltre il 50  applicazione instabile

Wikipedia può essere tuo amico su questo: Definizione ciclomatica complessità

In sostanza, si deve immaginare il vostro programma come un grafico flusso e quindi

  

La complessità è (...) definito come:

M = E − N + 2P
     

dove

     
      
  • M = complessità ciclomatica,
  •   
  • E = il numero di lati del grafo
  •   
  • N = il numero di nodi del grafo
  •   
  • P = il numero di componenti collegati
  •   

CC è un concetto che tenta di catturare la complessità del programma e come sia difficile provarlo in un unico numero intero.

Sì, è davvero. I più percorsi di esecuzione il codice può prendere, più le cose che devono essere testati, e la più alta probabilità di errore.

Un altro punto interessante che ho sentito:

I posti nel codice con i più grandi rientri dovrebbero avere la massima CC. Questi sono generalmente le aree più importanti per assicurare la copertura test perché ci si aspetta che essi saranno più difficili da leggere / mantenere. Come altre risposte di notare, queste sono anche le regioni più difficili del codice per garantire la copertura.

complessità ciclomatica è in realtà solo uno slogan spaventoso. In realtà si tratta di una misura di complessità codice utilizzato nello sviluppo di software di sottolineare le parti più complesse di codice (più probabilità di essere buggy, e quindi deve essere molto attentamente e accuratamente testati). È possibile calcolare utilizzando la formula E-N + 2P, ma vorrei suggerire che avete questo calcolati automaticamente da un plugin. Ho sentito parlare di una regola empirica che si dovrebbe cercare di mantenere la CC di sotto del 5 per mantenere una buona leggibilità e la manutenibilità del codice.

Sono appena sperimentato con la Eclipse Metrics plugin sui miei progetti Java, ed ha un file della Guida veramente bello e conciso che ovviamente integrare con il vostro aiuto regolare Eclipse e si possono leggere alcune altre definizioni di diverse misure di complessità e suggerimenti e trucchi per migliorare il vostro codice.

Questo è tutto, l'idea è che un metodo che ha un basso CC ha meno forcelle, looping ecc, che tutti fanno un metodo più complesso. Immaginate la revisione 500.000 righe di codice, con un analizzatore e di vedere un paio di metodi che hanno oder di grandezza superiore CC. Ciò consente quindi concentrarsi su quei metodi di refactoring per una migliore comprensione (E 'anche comune che un alto CC ha un alto tasso di bug)

Ogni punto di decisione in una routine (loop, switch, se, ecc ...) si riduce essenzialmente ad un'istruzione if equivalente. Per ogni if hai 2 codepaths che possono essere adottate. Quindi, con la prima filiale ci sono 2 percorsi di codice, con la seconda ci sono 4 possibili percorsi, con il 3 ° ci sono 8 e così via. Ci sono almeno 2 ** percorsi di codice n dove n è il numero di rami.

In questo modo è difficile capire il comportamento del codice e per testare quando N cresce oltre un certo piccolo numero.

Le risposte fornite finora non parlare della correlazione della qualità del software per la complessità ciclomatica. La ricerca ha dimostrato che avere un più basso ciclomatica metrica complessità dovrebbe contribuire a sviluppare un software che è di qualità superiore. Può aiutare con gli attributi di qualità del software di leggibilità, manutenibilità, e la portabilità. In generale si deve tentare di ottenere una complessità ciclomatica metrica di 5-10.

Una delle ragioni per l'utilizzo di metriche come la complessità ciclomatica è che, in generale, un essere umano può solo tenere traccia di circa 7 (più o meno 2) pezzi di informazioni contemporaneamente nel vostro cervello. Pertanto, se il software è eccessivamente complesso con percorsi decisionali multipli, è improbabile che si sarà in grado di visualizzare come il software si comporterà (vale a dire che avrà un alto ciclomatica complessità metrica). Questo molto probabilmente porterà allo sviluppo di software errato o bug cavalcato. Maggiori informazioni su questo si possono trovare qui e anche su Wikipedia .

Cyclomatic complessità è calcolata utilizzando la grafo di controllo. Il numero di misura quantitativa di percorsi linearmente indipendenti attraverso il codice sorgente di un programma viene chiamato come complessità ciclomatica (se / se altro / i / po)

complessità Cyclomatric è fondamentalmente una metrica per capire aree di codice che deve più attension per la manutenibilità. Sarebbe fondamentalmente un ingresso al refactoring. Dà sicuramente un'indicazione esterne del terreno codice in termini di evitare ciclo nidificato in profondità, condizioni ecc.

Questo è il tipo di esso. Tuttavia, ogni ramo di un "caso" o istruzione "switch" tende a contare come 1. In effetti, questo significa CC odi istruzioni case e ogni codice che li richiede (processori di comando, macchine a stati, ecc).

Considerare le href="http://en.wikipedia.org/wiki/Control_flow_graph" grafo di controllo della vostra funzione, con un bordo aggiuntivo che va dal casello per l'ingresso. La complessità ciclomatica è il numero massimo di tagli possiamo fare senza separare il grafico in due pezzi.

Ad esempio:

function F:
    if condition1:
       ...
    else:
       ...
    if condition2:
       ...
    else:
       ...

Flow Control Graph

Flow Control Grafico

Probabilmente si può intuitivamente capire perché il grafico collegato ha una complessità ciclomatica di 3.

complessità Cyclomatric è una misura di quanto sia complesso un'unità di software is.It misura il numero di percorsi diversi di un programma potrebbe seguire con costrutti logici condizionali (if, while, per, Switch & casi, ecc ....). Se vi piacerebbe saperne di più sul calcolo qui è un meraviglioso video di youtube è possibile guardare https : //www.youtube.com/watch? v = PlCGomvu-NM

E 'importante nella progettazione di casi di test perché rivela i diversi percorsi o scenari di un programma può assumere. "Per avere una buona verificabilità e manutenibilità, McCabe raccomanda che nessun modulo di programma deve superare una complessità ciclomatica di 10" (Marsic, 2012, p. 232).

Riferimento: Marsic., I. (2012, settembre). Ingegneria del Software . Rutgers University. Estratto da www.ece.rutgers.edu/~marsic/books/SE/book-SE_marsic.pdf

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top