La complessità ciclomatica è un modo per determinare se il codice deve essere sottoposto a refactoring. Il codice viene analizzato e viene determinato un numero di complessità. La complessità è determinata dalla ramificazione (se dichiarazioni, ecc.) La complessità potrebbe anche prendere in considerazione l'annidamento di loop, ecc. E altri fattori a seconda dell'algoritmo utilizzato.
Il numero è utile a livello di metodo. Ai livelli più alti è solo un numero.
Un numero di 17.754 indica la complessità a livello di progetto (codice totale), che non ha molto significato.
Il drill-down nella complessità a livello di classe e di metodo determinerà le aree del codice che devono essere rifattorizzate in metodi più piccoli o ridisegnate per eliminare la complessità.
Prendi in considerazione una CASE
dichiarazione con 50 casi in un metodo. Forse ogni stato ha una diversa logica aziendale. Ciò genererà una complessità ciclomatica di 50. Ci sono 50 punti decisionali. Potrebbe essere necessario riprogettare l'istruzione CASE utilizzando un modello di fabbrica per eliminare la logica di diramazione. A volte puoi refactoring (suddividere il metodo in parti più piccole) e in alcuni casi solo una riprogettazione ridurrà la complessità.
In generale, per la complessità a livello di metodo:
- <10 Facile da mantenere
- 11-20 Più difficile da mantenere
- 21+ candidati per refactoring / riprogettazione
Considera anche che complessità più elevate rendono il codice più difficile da testare.
La massima complessità che ho visto su un singolo metodo era 560. Erano circa 2000 righe di istruzioni if in un metodo. Fondamentalmente non mantenibile, non verificabile, pieno di potenziali bug. Immagina tutti i casi di test unitari necessari per quella logica di ramificazione! Non bene.
Cerca di mantenere tutti i metodi sotto i 20 anni e renditi conto che c'è un costo per il refactoring di qualsiasi metodo per renderlo meno complesso.