Misura la complessità ciclomatica (McCabe) del tuo codice. Individua funzioni troppo complesse, annidamento eccessivo e hotspot di manutenibilità. Supporta JS, TS, Python, Java, PHP.
Incolla del codice e clicca Analizza per vedere la complessità
Incolla il codice nell'editor — supporta JavaScript, TypeScript, Python, Java e altri linguaggi comuni. Il tool analizza il grafo di controllo del codice e calcola la complessità ciclomatica per ogni funzione, evidenziando quelle che superano la soglia configurata (default: 10). Il risultato mostra la lista delle funzioni ordinate per complessità, con la riga di definizione e un indicatore visivo del livello di rischio. Nessun codice viene inviato a server.
La complessità ciclomatica (McCabe, 1976) conta il numero di percorsi lineari indipendenti nel grafo di controllo di una funzione. Ogni if, else if, for, while, case, catch, operatore ternario e operatore logico &&/|| aggiunge 1 al conteggio base di 1. Una funzione con complessità 1 ha un solo percorso possibile; una con complessità 12 ne ha 12 — e richiede almeno 12 test case per coprirli tutti. Le soglie di riferimento più usate: 1-5 (semplice), 6-10 (moderata), 11-20 (alta), 21+ (critica).
La complessità ciclomatica conta i percorsi nel grafo di controllo — un'unità per ogni ramo. La complessità cognitiva (SonarSource, 2017) pesa diversamente i costrutti: l'annidamento aumenta il costo esponenzialmente perché riflette meglio la difficoltà di lettura umana. Un if annidato a 3 livelli costa più di 3 if al livello superiore. Le due metriche si complementano: la ciclomatica misura il costo di testing, la cognitiva misura la leggibilità.
La complessità ciclomatica viene usata in: code review — segnalare funzioni sopra soglia prima del merge; configurazione linter (ESLint con max-complexity: 10, SonarQube con quality gate); stima del costo di testing — una funzione con complessità 12 richiede almeno 12 test case per coprire ogni ramo; pianificazione refactoring — prioritizzare le funzioni più rischiose da modificare; quality gate CI/CD — bloccare automaticamente merge che aumentano la complessità media del codebase oltre soglia.
Tecniche principali: Early return — elimina rami else e riduce l'annidamento restituendo prima in caso di errore o precondizione non soddisfatta. Extract method — sposta logica complessa in funzioni con nome significativo. Lookup table — sostituisce switch lunghi con un oggetto di mapping. Guard clauses — valida le precondizioni all'inizio e ritorna subito. Polimorfismo — in OOP, sostituisce condizionali sul tipo di oggetto con metodi specializzati per sottoclasse.
La complessità ciclomatica misura i percorsi logici, non la qualità del codice in assoluto. Alta complessità è accettabile in: parser e lexer (gestiscono molti token per design), funzioni di validazione con molte regole di business esplicite, switch su enum dove ogni caso è semplice e ben documentato. Il vero problema è quando alta complessità si accompagna a scarsa leggibilità, nomi di variabile criptici e assenza di test — quella combinazione produce codice fragile e difficile da mantenere.
La soglia più usata nei team è 10 (configurazione default di ESLint e SonarQube). Sotto 5 è eccellente. Tra 10 e 20 è alta ma gestibile se il codice è ben testato. Sopra 20 è critica: le probabilità di introdurre bug durante modifiche aumentano significativamente e il codice diventa difficile da testare esaustivamente.
Le tecniche più efficaci: early return (elimina rami else), extract method (sposta logica in funzioni con nome), lookup table (sostituisce switch lunghi con oggetti di mapping), guard clauses (valida precondizioni all'inizio). Assicurati di avere test copertura prima di refactorare — il rischio di introdurre regressioni è reale.
Il tool analizza correttamente JavaScript, TypeScript, Python e Java. Per altri linguaggi (Go, Rust, C#, PHP) l'analisi può funzionare parzialmente — dipende dalla sovrapposizione della sintassi di controllo di flusso con quella dei linguaggi supportati.
La complessità ciclomatica conta i rami di decisione: ogni if, else if, for, while, case, catch, operatore ternario e operatore logico &&/|| aggiunge 1. L'else da solo non aggiunge complessità — è il ramo alternativo implicito dell'if già contato.
No. L'analisi avviene interamente nel browser tramite JavaScript. Puoi incollare codice proprietario, codice con credenziali hard-coded o algoritmi riservati senza rischi — nessun dato lascia il tuo dispositivo.