Was sind die Kategorien der zyklomatischen Komplexität? Beispielsweise:
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. Gewiss 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 gespannt 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 geben einen 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 vollständig erfasst und getestet werden
- Methoden, die noch weiter gehen, z. B.> 50, sind sicherlich nicht zu halten
Wenn Sie Codemetriken für eine Lösung ausführen, werden die Ergebnisse bei Werten unter 25 grün angezeigt. Ich bin damit nicht einverstanden, hatte aber gehofft, andere Eingaben zu erhalten.
Gibt es eine allgemein akzeptierte Bereichsliste für die zyklomatische Komplexität?
quelle
Antworten:
Ich nehme an, es hängt von den Fähigkeiten Ihres Programmierpersonals und nicht zuletzt von Ihren Sensibilitäten als Manager ab.
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, fehlerfreie Programme zu erstellen, ohne einen einzigen Komponententest schreiben zu müssen. Der Grad der zyklomatischen Komplexität, den 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 stellen Sie sie auf einen Sweet Spot ein, mit dem Sie sich wohlfühlen und der zu vernünftigen Ergebnissen führt.
quelle
Es gibt keine vordefinierten Kategorien und eine Kategorisierung wäre aus mehreren Gründen nicht möglich:
Einige Refactoring-Techniken verschieben lediglich die Komplexität von einem Punkt zum anderen (nicht von Ihrem Code zum Framework oder zu einer gut getesteten externen Bibliothek, sondern von einem Ort zur anderen in der Codebasis). Es hilft, die Komplexität der Zyklomatik zu reduzieren und Ihren Chef (oder jeden, der Präsentationen mit ständig wachsenden Grafiken liebt) davon zu überzeugen, dass Sie Ihre Zeit damit verbracht haben, etwas Großartiges zu schaffen, aber der Code bleibt so schlecht wie zuvor.
Im Gegenteil, manchmal, wenn Sie ein Projekt umgestalten, indem Sie einige Entwurfs- und Programmiermuster anwenden, kann sich die zyklomatische Komplexität verschlechtern, während der umgestaltete Code klar sein muss: Entwickler kennen Programmiermuster (von ihnen wird zumindest erwartet, dass sie sie kennen). Das vereinfacht den Code für sie, aber die zyklomatische Komplexität berücksichtigt dies nicht.
Einige andere Non-Refactoring-Techniken wirken sich überhaupt nicht auf die zyklomatische Komplexität aus, während sie die Komplexität eines Codes für Entwickler erheblich verringern. Beispiele: Hinzufügen relevanter Kommentare oder Dokumentation. Den Code mit syntaktischem Zucker "modernisieren".
Es gibt einfach Fälle, in denen die zyklomatische Komplexität keine Rolle spielt. Ich mag das von whatsisname in seinem Kommentar gegebene Beispiel : Einige große
switch
Anweisungen können extrem klar sein, und das Umschreiben in einer OOPY-Weise wäre nicht sehr nützlich (und würde das Verständnis des Codes für Anfänger erschweren). Gleichzeitig sind diese Aussagen in Bezug auf die Komplexität katastrophal und zyklomatisch.Wie Robert Harvey bereits oben sagte , hängt es von der Mannschaft 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 große Schmerzen, ihn zu verstehen.
Es gibt nur kein und kein Tool, das fehlerfrei anzeigt, wie gut oder schlecht ein bestimmtes Stück 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 abweichen (wie LOC oder die Anzahl der Kommentare pro Datei), und es gibt Metriken, die einige grobe Hinweise geben können (wie die Anzahl der Fehler oder die zyklomatische Komplexität). In allen Fällen handelt es sich nur um Hinweise, die mit Vorsicht verwendet werden sollten.
quelle