it-swarm.com.de

Zyklomatische Komplexitätsbereiche

Was sind die Kategorien der zyklomatischen Komplexität? Zum Beispiel:

1-5: pflegeleicht
6-10: schwierig
11-15: sehr schwierig
20+: Annäherung unmöglich

Seit Jahren gehe ich davon aus, dass 10 die Grenze war. Und alles darüber hinaus ist schlecht. Ich analysiere eine Lösung und versuche, die Qualität des Codes zu bestimmen. Sicherlich ist die zyklomatische Komplexität nicht die einzige Messung, aber sie kann helfen. Es gibt Methoden mit einer zyklomatischen Komplexität von 200+. Ich weiß, dass das schrecklich ist, aber ich bin neugierig auf die unteren Bereiche, wie in meinem obigen Beispiel.

Ich fand dies :

Die oben genannten Referenzwerte von Carnegie Mellon definieren vier grobe Bereiche für zyklomatische Komplexitätswerte:

  • methoden zwischen 1 und 10 gelten als einfach und leicht verständlich
  • werte zwischen 10 und 20 zeigen komplexeren Code an, der möglicherweise noch verständlich ist. Das Testen wird jedoch aufgrund der größeren Anzahl möglicher Verzweigungen, die der Code annehmen kann, schwieriger
  • werte von 20 und höher sind typisch für Code mit einer sehr großen Anzahl potenzieller Ausführungspfade und können nur mit großem Aufwand und Aufwand vollständig erfasst und getestet werden
  • verfahren, die noch höher gehen, z. > 50, sind sicherlich nicht wartbar

Beim Ausführen von Codemetriken für eine Lösung werden die Ergebnisse für alles unter 25 grün angezeigt. Ich bin damit nicht einverstanden, aber ich hatte gehofft, andere Eingaben zu erhalten.

Gibt es eine allgemein akzeptierte Bereichsliste für die zyklomatische Komplexität?

29
Bob Horn

Ich nehme an, es hängt von den Fähigkeiten Ihres Programmierpersonals ab und nicht zuletzt von Ihrer Sensibilität als Manager.

Einige Programmierer sind überzeugte Befürworter von TDD und schreiben keinen Code, ohne vorher einen Komponententest zu schreiben. Andere Programmierer sind perfekt in der Lage, perfekt gute, fehlerfreie Programme zu erstellen, ohne einen einzigen Komponententest zu schreiben. Das Ausmaß der zyklomatischen Komplexität, das jede Gruppe tolerieren kann, wird mit ziemlicher Sicherheit erheblich variieren.

Es ist eine subjektive Metrik; Bewerten Sie die Einstellung Ihrer Code Metrics-Lösung und passen Sie sie an einen Sweet Spot an, mit dem Sie sich wohl fühlen und der Ihnen vernünftige Ergebnisse liefert.

20
Robert Harvey

Es gibt keine vordefinierten Kategorien und aus mehreren Gründen wäre keine Kategorisierung möglich:

  1. Einige Refactoring-Techniken verschieben lediglich die Komplexität von einem Punkt zum anderen (nicht von your Code in das Framework oder eine gut getestete externe Bibliothek, sondern von einem Ort zum anderen der Codebasis). Es hilft, die zyklomatische Komplexität zu reduzieren und Ihren Chef (oder jede Person, die Präsentationen mit ständig wachsenden Grafiken liebt) davon zu überzeugen, dass Sie Ihre Zeit damit verbracht haben, etwas Großartiges zu machen, aber der Code bleibt so schlecht wie zuvor .

  2. Im Gegenteil, manchmal, wenn Sie ein Projekt durch Anwenden einiger Entwurfs- und Programmiermuster umgestalten, kann sich die zyklomatische Komplexität verschlechtern, während erwartet wird, dass der umgestaltete Code klar ist: Entwickler kennen Programmiermuster (zumindest müssen sie diese kennen). Dies vereinfacht den Code für sie, aber die zyklomatische Komplexität berücksichtigt dies nicht.

  3. Einige andere Nicht-Refactoring-Techniken wirken sich überhaupt nicht auf die zyklomatische Komplexität aus, während die Komplexität eines Codes für Entwickler erheblich verringert wird. Beispiele: Hinzufügen relevanter Kommentare oder Dokumentationen. "Modernisierung" des Codes durch Verwendung von syntaktischem Zucker.

  4. Es gibt einfach Fälle, in denen die zyklomatische Komplexität irrelevant ist. Ich mag das Beispiel angegeben durch Whatsisname in seinem Kommentar : Einige große switch -Anweisungen können extrem klar sein und ein OOPy-Umschreiben wäre nicht sehr nützlich (und würde das Verständnis erschweren des Codes von Anfängern). Gleichzeitig sind diese Aussagen in Bezug auf die Komplexität eine Katastrophe.

  5. Wie Robert Harvey bereits oben sagte , es hängt vom Team selbst ab.

In der Praxis habe ich Quellcode gesehen, der eine gute zyklomatische Komplexität hatte, aber schrecklich war. Gleichzeitig habe ich Code mit hoher zyklomatischer Komplexität gesehen, aber ich hatte nicht allzu viel Mühe, ihn zu verstehen.

Es ist nur so, dass es kein Tool gibt und es kein Tool geben kann, das fehlerfrei anzeigt, wie gut oder schlecht ein bestimmter Code ist oder wie einfach es zu warten ist . Da Sie keine Anwendung programmieren können, die besagt, dass ein bestimmtes Gemälde ein Meisterwerk ist und dass ein anderes weggeworfen werden sollte, weil es keinen künstlerischen Wert hat.

Es gibt Metriken, die vom Design her fehlerhaft sind (wie LOC oder die Anzahl der Kommentare pro Datei), und es gibt Metriken, die einige rohe Hinweise geben können (wie die Anzahl der Fehler oder die zyklomatische Komplexität). In allen Fällen sind dies nur Hinweise und sollten mit Vorsicht verwendet werden.

11