Zyklomatische-Komplexität-Rechner
Die Cyclomatic-Complexity-API berechnet die McCabe-Metrik aus der Struktur eines Kontrollflussgraphen: Sie geben die Anzahl der Kanten, die Anzahl der Knoten und die Anzahl der Zusammenhangskomponenten an, und sie liefert die zyklomatische Komplexität M = E − N + 2P, die Mindestzahl linear unabhängiger Pfade durch den Code und eine untere Schranke für die Testfälle, die für vollständige Zweigabdeckung nötig sind. Kein Quellcode zum Hochladen, kein Parser zum Konfigurieren — nur drei Zählwerte aus dem Graphen, den Sie bereits haben, und eine deterministische Zahl als Antwort, im Browser genauso berechnet wie auf unserem Edge.
Im Browser ausführen – kostenlos
Was die zyklomatische Komplexität misst
Die zyklomatische Komplexität, 1976 von Thomas McCabe eingeführt, zählt die Anzahl linear unabhängiger Pfade durch den Kontrollflussgraphen eines Programms. Jeder Entscheidungspunkt — ein if, eine while-Schleife, ein case-Zweig, ein bedingter Ausdruck — fügt einen Pfad hinzu, sodass die Metrik widerspiegelt, wie schwer ein Stück Code zu testen und zu durchschauen ist. Ein Wert von 1 bedeutet linearen Code ganz ohne Verzweigungen. Ein Wert von 10 ist die vielzitierte Schwelle, ab der ein Modul aufgeteilt werden sollte. Die Zahl ist eine Eigenschaft des Graphen, nicht der Sprache: Sobald der Kontrollflussgraph einer Funktion gezeichnet ist, steht ihre Komplexität fest, und dieser Zyklomatische-Komplexität-Rechner wertet sie direkt aus den drei Zählwerten des Graphen aus. Da die Eingabe nur aus Kanten, Knoten und Komponenten besteht, funktioniert sie für Pseudocode, Flussdiagramme und Graphen aus jedem Static-Analysis-Werkzeug, ohne den Quellcode selbst preiszugeben.
Die Formel M = E − N + 2P
Die Metrik wird berechnet als M = E − N + 2P, wobei E die Anzahl der Kanten im Kontrollflussgraphen ist, N die Anzahl der Knoten und P die Anzahl der Zusammenhangskomponenten. Für ein einzelnes Programm oder eine einzelne Funktion ist der Graph eine einzige Zusammenhangskomponente, also gilt P = 1 und die Formel verkürzt sich zu M = E − N + 2. Wenn Sie mehrere unverbundene Funktionen gleichzeitig analysieren — etwa die Aufrufgraphen dreier getrennter Module in einem Diagramm — zählt P jedes unverbundene Teilstück, und der Term +2P hält das Ergebnis konsistent mit der Summe der Komplexitäten der Teile. Der Endpunkt liefert außerdem decision_points, definiert als M − 1, was der Anzahl der Prädikate eines strukturierten Programms entspricht, dessen Graph gemessen wurde. Alle drei Eingaben müssen positive ganze Zahlen sein; der Aufruf lehnt Brüche, null, negative Werte und nicht numerische Angaben ab, denn solche Zählwerte können keinen realen Kontrollflussgraphen beschreiben, und sie stillschweigend zu akzeptieren würde einen Messfehler weiter oben verdecken.
Wie man die Zahl in der Praxis nutzt
Die Komplexität gibt die Mindestzahl von Testfällen an, die nötig sind, um jeden unabhängigen Pfad zu durchlaufen; Teams nutzen sie daher als Abdeckungsuntergrenze in der Testplanung: Eine Funktion mit M = 7 lässt sich mit drei Tests nicht vollständig zweigetestet, so clever sie auch gewählt sind. Sie speist auch die Code-Review-Richtlinie — viele Firmen markieren jede Funktion, deren Komplexität eine vereinbarte Grenze überschreitet — und das Tracking technischer Schulden, bei dem die Summe oder das Maximum über einer Codebasis Release für Release beobachtet wird. Diese API ist der Rechenschritt dieses Arbeitsablaufs: Zählen Sie Kanten, Knoten und Komponenten aus Ihrem Analysator oder Diagramm, senden Sie sie und erhalten Sie jedes Mal denselben Wert, denn die Berechnung ist vollständig deterministisch, ohne Rundung und ohne Heuristiken. Sie läuft auf unserem globalen Edge für $0.002 pro Anfrage, und derselbe Code läuft kostenlos in Ihrem Browser auf dieser Seite — Sie können einen Wert von Hand prüfen und zahlen erst, wenn Sie die Prüfung in einer Pipeline automatisieren.
Anwendungsfälle
Eine Untergrenze für die Testabdeckung setzen
Verwandeln Sie die Graphzählwerte Ihres statischen Analysators in die Mindestzahl von Testfällen, die jeden unabhängigen Pfad einer Funktion abdecken.
Ein Komplexitätsbudget in CI durchsetzen
Lassen Sie einen Build fehlschlagen, wenn die zyklomatische Komplexität eines Moduls die vereinbarte Schwelle überschreitet, berechnet aus Kanten, Knoten und Komponenten.
Antworten aus Hausaufgaben und Prüfungen prüfen
Überprüfen Sie das Ergebnis einer Software-Engineering-Aufgabe, die die McCabe-Zahl zu einem Flussdiagramm verlangt — mit der Formel in der Antwort.
Häufige Fragen
Was kostet das?
$0.002 pro Anfrage. Kostenlos ist sie außerdem in Ihrem Browser auf dieser Seite — derselbe Code rechnet beides.
Welche Formel wird verwendet?
McCabes Originalformel M = E − N + 2P, wobei E die Kanten, N die Knoten und P die Zusammenhangskomponenten sind. Für ein einzelnes Programm gilt P = 1, also E − N + 2.
Warum werden meine Eingaben abgelehnt?
Kanten, Knoten und Komponenten müssen jeweils eine positive ganze Zahl sein. Null, negative Zahlen, Brüche und nicht numerische Werte können keinen realen Kontrollflussgraphen beschreiben und werden als ungültige Eingabe abgelehnt.
Was ist das Feld decision_points?
Es ist M − 1: die Anzahl der Prädikatknoten (Entscheidungen) eines strukturierten Programms, dessen Graph diese Komplexität hat. Es ist eine Bequemlichkeit für Teams, die ifs und Schleifen zählen statt Kanten.
Muss ich Quellcode senden?
Nein. Die Eingabe besteht aus drei Zählwerten des Kontrollflussgraphen, sodass proprietärer Code Ihren Analysator nie verlässt — nur die Summen von Kanten, Knoten und Komponenten werden übertragen.
Ist das Ergebnis deterministisch?
Ja. Es ist exakte Ganzzahlarithmetik ohne Rundung, Zufall oder externe Aufrufe: Dieselben drei Zählwerte liefern immer dieselbe Komplexität.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem 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)Beispiel-Anfrage
{
"edges": 9,
"nodes": 8,
"components": 1
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.cyclomatic_complexity",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |