C'è qualcosa in cui il rapporto delle metriche LOC e Sum Cyclomatic Complexity in un progetto con molti moduli può parlare?
Mostra la complessità logica di un modulo / progetto?
C'è qualcosa in cui il rapporto delle metriche LOC e Sum Cyclomatic Complexity in un progetto con molti moduli può parlare?
Mostra la complessità logica di un modulo / progetto?
La carta ha scritto di John R. Strohm risposta è un po 'fuorviante. Sebbene non sia d'accordo sul fatto che esista una relazione tra complessità ciclomatica e linee di codice, sembra che la complessità ciclomatica sia stata usata impropriamente applicando la complessità ciclomatica a livello di progetto.
In primo luogo, la complessità ciclomatica dovrebbe essere applicata a livello di metodo, non a livello di progetto. In genere, quando si scrivono test a livello di unità, si sta prendendo di mira un metodo. È quindi possibile utilizzare la complessità ciclomatica per determinare il numero di percorsi attraverso il metodo, che corrisponde al numero di test unitari ben scritti necessari per fornire una copertura di tutti questi percorsi. Una volta che si espande verso l'alto per classi e progetti, la complessità ciclomatica conta ancora ogni percorso attraverso il programma, compresi quelli che si escludono a vicenda. Così si finisce con i numeri che non sono suscettibili o quasi impossibile ( forse un raggio cosmico girerà un po ' al punto giusto, facendo in modo che il tuo programma scenda in uno di questi percorsi mutuamente esclusivi).
Ho trovato un documento diverso che supporta chiaramente questa idea: Analisi empirica della relazione tra CC e SLOC in un grande corpus di metodi Java di Landman, Serebrenik e Vinju . Hanno esaminato esplicitamente i metodi Java (non interi programmi) e la relazione tra complessità ciclomatica e linee di codice sorgente. Tuttavia, osservando intere classi, hanno scoperto che emerge una relazione (che è ciò che è stato trovato nello studio nella risposta precedente).
In secondo luogo, la complessità ciclomatica è leggermente più ragionevole di righe di codice quando si considera la memoria di lavoro degli esseri umani. Se si dispone di un metodo ben progettato con un buon nome e buoni nomi interni (chiamati metodi, variabili) che eseguono un insieme coesivo di operazioni, una maggiore complessità ciclomatica diventerà una barriera alla comprensione prima delle linee di codice sorgente. Sebbene i metodi più lunghi, in termini di linee di codice, tendano anche ad avere una complessità ciclomatica più elevata, è probabile che il numero di complessità ciclomatica renda più facile ragionare su un metodo troppo complesso da comprendere per una persona.
Se stai cercando di capire la complessità di un sistema, la complessità ciclomatica è migliore delle linee di codice sorgente. Con gli strumenti adeguati, è relativamente facile da contare. Inoltre non richiede molte riflessioni su come applicarlo per valutare la comprensibilità o la testabilità dei metodi. Ma non si adatta a interi progetti.
Vedi Complessità ciclopica e linee di codice: empirico Prova di una relazione lineare stabile , in J. Engineering Software & Applicazioni, 2009, 2: 137-143.
Da Abstract:
" Ad oggi intraprendiamo il più ampio studio statistico su questa relazione. Utilizzando le moderne tecniche di regressione, riteniamo che la linearità di questa relazione sia stata strongmente sottovalutata, tanto che si può affermare che il CC non ha assolutamente alcun potere esplicativo di per sé. "
In altre parole, non perdere tempo con la complessità ciclomatica. Conta solo SLOC e fallo.
Sì, per gli heckler nei posti economici, so che lo SLOC può essere giocato. So anche che una sana operazione di ingegneria del software applicherà misure disciplinari molto severe a chiunque sia stato trovato nella revisione del codice di averlo fatto.
Leggi altre domande sui tag coupling code-metrics cyclomatic-complexity loc