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 dipendenti dall'algoritmo utilizzato.
Il numero è utile a livello di metodo. Ai livelli più alti è solo un numero.
Un numero di 17.754 indica la complessità del livello di progetto (codice totale), che non ha molto significato.
Il drill-down in classe e la complessità del livello del metodo determineranno le aree del codice che devono essere refactored in metodi più piccoli o riprogettati per elminare la complessità.
Considera un'istruzione CASE
con 50 casi in un metodo. Forse ogni stato ha una logica di business diversa. Ciò genererà una complessità ciclomatica di 50. Ci sono 50 punti decisionali. La dichiarazione CASE potrebbe dover essere ridisegnata usando un modello di fabbrica per eliminare la logica di ramificazione. 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 Difficile da mantenere
- 21+ candidati per il refactoring / riprogettazione
Considera anche che complessità più elevate rendono il codice più difficile da testare in unità.
La più alta complessità che ho visto su un singolo metodo era 560. Si trattava di circa 2000 righe di istruzioni if in un metodo. Fondamentalmente non mantenibile, non testabile, pieno di potenziali bug. Immagina tutti i casi di test unitari necessari per quella logica di ramificazione! Non va bene.
Cerca di mantenere tutti i metodi sotto i 20 e renditi conto che esiste un costo per il refactoring di qualsiasi metodo per renderlo meno complesso.