[JAVA] Über zyklische Komplexität

Hintergrund

――Wenn ich bei der Arbeit programmierte, wies mein Vorgesetzter auf die Komplexität hin. ――Ich kannte das Wort zyklische Komplexität nicht, aber ich wusste, dass ein Fehler irgendwie versteckt sein könnte. ――Weil es eine große Sache ist, habe ich die zyklische Komplexität untersucht. ――Für Leute, die so unerfahren sind wie ich

Was ist zyklische Komplexität?

Ich habe es vorerst überprüft ...

Zyklomatische Komplexität ist eine Art Softwaremessmethode. Es wurde von Thomas McCabe entwickelt und dient zur Messung der Komplexität eines Programms. Zählen Sie die Anzahl der linear unabhängigen Routen direkt aus dem Programmquellcode. [wikipedia](https://ja.wikipedia.org/wiki/%E5%BE%AA%E7%92%B0%E7%9A%84%E8%A4%87%E9%9B%91%E5%BA % A6)

Zusamenfassend

--Berechnen Sie, wie viele Zweige wie if / else für Anweisung und switch-Anweisung im Code enthalten sind ――Die Größe der Zahl gibt an, wie einfach es ist, Fehler zu mischen.

Spezifische Zählmethode

Grund Idee

Es scheint verschiedene Theorien zu geben, aber ...

Zirkuläre Komplexität Status
1-10 Einfach mit sicherem Code zu testen
11-20 Ein wenig komplizierter Code
21-40 Komplexer Code erschwert das Testen
41 oder mehr Schlechter Typ. Nicht testbar

Wenn Sie es normal schreiben, denke ich, ist es schwer, 10 zu überschreiten. (In meinem Fall habe ich einmal 20 an der Geschäftslogik gemessen)

Denken Sie tatsächlich an einem Beispiel

Ich habe unten einen geeigneten Service vorbereitet. Da es sich nur um ein Beispiel handelt, hat der Prozess selbst keine Bedeutung. Ignorieren Sie ihn daher bitte.

Service.java



private String familyService(List<String> nameList) {
    String id;
    for (String name : nameList) {
        if (name.startsWith("a")){
            id = "a";
        } else if (name.startsWith("b")){
            id = "b";
        } else if (name.startsWith("c")){
            id = "c";
        } else if (name.startsWith("d")){
            id = "d";
        } else if (name.startsWith("e")){
            id = "e";
        } else if (name.startsWith("f")){
            id = "f";
        } else if (name.startsWith("g")){
            id = "g";
        } else if (name.startsWith("h")){
            id = "h";
        } else {
            id = "xxxx";
        }
    }
    return id;
}
      

Im obigen Beispiel gibt es eine for-Anweisung und neun if / else-Zweige, sodass 1 + 1 + 9 eine Komplexität von 11 ergibt.

Gegenmaßnahmen

Ich denke, es gibt verschiedene Möglichkeiten, die zyklische Komplexität zu reduzieren.

Ich denke, es gibt viele Möglichkeiten, dies zu tun. Daher denke ich, dass es wichtiger ist, sich der zyklischen Komplexität bewusst zu sein, wenn regelmäßig codiert wird. Ich persönlich konnte dank meiner Forschung zur zyklischen Komplexität visuell rechnen, aber ich glaube nicht, dass dies jeder ist. Deshalb möchte ich die Funktionen von IntelliJ IDEA für diese Personen vorstellen. Stellen.

Was du vorbereitet hast

Wie macht man

--IntelliJ >> Präferenz auswählen スクリーンショット 2018-10-14 12.55.49.png

--Suche nach "zu komplex" スクリーンショット 2018-10-14 12.58.12.png

--Set für jede Klasse / Methode Wenn Sie den eingestellten Wert überschreiten, werden Sie so wütend. スクリーンショット 2018-10-14 13.01.39.png

Zusammenfassung

Referenzierte Site

[Circular Complexity-Wikipedia](https://ja.wikipedia.org/wiki/%E5%BE%AA%E7%92%B0%E7%9A%84%E8%A4%87%E9%9B% 91% E5% BA% A6) Learn Mccabe's Cyclomatic Complexity with Example

Recommended Posts

Über zyklische Komplexität
Aggregation / Kopplung / zyklische Komplexität
Über =
Über method.invoke
Über Kotlin
Über attr_accessor
Über Hinemos
Über die Vererbung
Über Docker
Über Schienen 6
Über den Frühling ③
Über Aufzählung
Über Polymorphismus
Über Optional
Über Hash
Über JitPack
Darüber ()
Über die Kapselung
Über JAVA_HOME
Über statische
Über Ausnahmen
Über den Umfang
[Maven] Über Maven