Calcolatrice di complessità ciclomatica
Conti quanti percorsi indipendenti attraversano una funzione partendo da tre numeri del suo grafo del flusso di controllo: 9 archi, 8 nodi e 1 componente danno una complessità di 3, con 2 punti di decisione. Funziona anche con diagrammi di flusso o pseudocodice. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Archi
- 9
- Nodi
- 8
- Componenti
- 1
- Complessità
- 3 item
- Punti di decisione
- 2
Nessun codice sorgente da caricare, nessun analizzatore da configurare: solo tre conteggi del grafo che già possiede e un numero deterministico in risposta, calcolato allo stesso modo nel Suo browser e sul nostro edge.
Cosa misura la complessità ciclomatica
La complessità ciclomatica, introdotta da Thomas McCabe nel 1976, conta il numero di cammini linearmente indipendenti nel grafo di flusso di controllo di un programma. Ogni punto di decisione — un if, un ciclo while, un ramo case, un'espressione condizionale — aggiunge un cammino, quindi la metrica riflette quanto un pezzo di codice sia difficile da testare e da comprendere. Un valore pari a 1 significa codice lineare, senza alcun ramo.
Un valore pari a 10 è la soglia ampiamente citata oltre la quale un modulo comincia a richiedere una suddivisione. Il numero è una proprietà del grafo, non del linguaggio: una volta disegnato il grafo di flusso di controllo di una funzione, la sua complessità è fissata, e questa calcolatrice di complessità ciclomatica la valuta direttamente dai tre conteggi del grafo.
Poiché l'input è solo archi, nodi e componenti, funziona per pseudocodice, diagrammi di flusso e grafi esportati da qualsiasi strumento di analisi statica, senza bisogno di condividere il codice sorgente stesso.
La formula M = E − N + 2P
La metrica si calcola come M = E − N + 2P, dove E è il numero di archi del grafo di flusso di controllo, N il numero di nodi e P il numero di componenti connesse. Quando si analizzano più funzioni disconnesse contemporaneamente — ad esempio i grafi di chiamata di tre moduli separati disegnati in un unico diagramma — P conta ogni parte disconnessa e il termine +2P mantiene il risultato coerente con la somma delle complessità delle parti.
Tutti e tre gli input devono essere interi positivi; la chiamata rifiuta frazioni, zero, conteggi negativi e valori non numerici, perché tali conteggi non possono descrivere un grafo di flusso di controllo reale e accettarli in silenzio nasconderebbe un errore di misura a monte.
Casi d'uso
Fissare una base di copertura dei test
Trasformi i conteggi del grafo del Suo analizzatore statico nel numero minimo di casi di test per coprire ogni cammino indipendente di una funzione.
Imporre un budget di complessità in CI
Faccia fallire una build quando la complessità ciclomatica di un modulo supera la soglia concordata dal team, calcolata da archi, nodi e componenti.
Controllare le risposte di compiti ed esami
Verifichi il risultato di un esercizio di ingegneria del software che chiede il numero di McCabe da un diagramma di flusso, con la formula mostrata nella risposta.
Domande frequenti
Quanto costa?
È anche gratuita nel Suo browser su questa pagina: lo stesso codice calcola entrambe le cose.
Quale formula viene usata?
La formula originale di McCabe, M = E − N + 2P, dove E sono gli archi, N i nodi e P le componenti connesse.
Perché i miei dati vengono rifiutati?
Archi, nodi e componenti devono essere interi positivi. Zero, numeri negativi, frazioni e valori non numerici non possono descrivere un grafo di flusso di controllo reale e vengono rifiutati come input non valido.
Devo inviare il codice sorgente?
No. L'input è costituito da tre conteggi del grafo di flusso di controllo, quindi il codice proprietario non lascia mai il Suo analizzatore: viaggiano solo i totali di archi, nodi e componenti.
Il risultato è deterministico?
Sì. È aritmetica intera esatta, senza arrotondamenti, casualità o chiamate esterne: gli stessi tre conteggi restituiscono sempre la stessa complessità.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/math/cyclomatic-complexity \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"edges":9,"nodes":8,"components":1}'const res = await fetch("https://api.kit.forhosting.com/math/cyclomatic-complexity", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"edges": 9,
"nodes": 8,
"components": 1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/cyclomatic-complexity",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"edges": 9,
"nodes": 8,
"components": 1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/cyclomatic-complexity", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"edges":9,"nodes":8,"components":1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"edges":9,"nodes":8,"components":1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/cyclomatic-complexity", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"edges": 9,
"nodes": 8,
"components": 1
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.cyclomatic_complexity",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
L'API di complessità ciclomatica calcola la metrica di McCabe a partire dalla struttura di un grafo di flusso di controllo: Lei fornisce il numero di archi, il numero di nodi e il numero di componenti connesse, e restituisce la complessità ciclomatica M = E − N + 2P, il numero minimo di cammini linearmente indipendenti attraverso il codice e un limite inferiore dei casi di test necessari per una copertura completa dei rami.
La formula M = E − N + 2P
Per un singolo programma o funzione il grafo è un'unica componente connessa, quindi P = 1 e la formula si riduce a M = E − N + 2. L'endpoint restituisce anche decision_points, definito come M − 1, che equivale al numero di predicati di un programma strutturato il cui grafo è stato misurato.
Come usare il numero nella pratica
Alimenta anche la politica di revisione del codice — molte aziende segnalano qualsiasi funzione la cui complessità superi un limite concordato — e il monitoraggio del debito tecnico, in cui la somma o il massimo su una base di codice viene osservato versione dopo versione. La complessità indica il numero minimo di casi di test necessari per esercitare ogni cammino indipendente, quindi i team la usano come base di copertura nella pianificazione dei test: una funzione con M = 7 non può essere testata completamente nei rami con tre test, per quanto ingegnosi siano. Questa API è il passaggio aritmetico di quel flusso di lavoro: conti archi, nodi e componenti dal Suo analizzatore o diagramma, li invii e ottenga sempre lo stesso valore, perché il calcolo è completamente deterministico, senza arrotondamenti né euristiche. Viene eseguita sul nostro edge globale a $0.002 per richiesta, e lo stesso codice viene eseguito gratuitamente nel Suo browser su questa pagina, così può verificare una cifra a mano e pagare solo quando automatizza il controllo in una pipeline.
Domande tecniche
Che cos'è il campo decision_points?
È M − 1: il numero di nodi predicato (di decisione) di un programma strutturato il cui grafo ha questa complessità. È una comodità per i team che contano if e cicli invece degli archi.