Zyklomatische Komplexität beim Softwaretesten (Beispiel)
Was ist McCabes zyklomatische Komplexität?
Zyklomatische Komplexität beim Softwaretesten ist eine Testmetrik, die zur Messung der Komplexität eines Softwareprogramms verwendet wird. Es ist ein quantitatives Maß für unabhängige Pfade im Quellcode eines Softwareprogramms. Die zyklomatische Komplexität kann mithilfe von Kontrollflussdiagrammen oder in Bezug auf Funktionen, Module, Methoden oder Klassen innerhalb eines Softwareprogramms berechnet werden.
Ein unabhängiger Pfad ist als ein Pfad definiert, der mindestens eine Kante hat, die zuvor noch von keinem anderen Pfad durchlaufen wurde.
Diese Metrik wurde 1976 von Thomas J. McCabe entwickelt und basiert auf einer Kontrollflussdarstellung des Programms. Der Kontrollfluss stellt ein Programm als Diagramm dar, das aus Knoten und Kanten besteht.
Im Diagramm stellen Knoten Verarbeitungsaufgaben dar, während Kanten den Kontrollfluss zwischen den Knoten darstellen.
Flussdiagramm-Notation für ein Programm
Die Flussdiagramm-Notation für ein Programm definiert mehrere Knoten, die durch die Kanten verbunden sind. Nachfolgend finden Sie Flussdiagramme für Anweisungen wie if-else, While, Until und die normale Flusssequenz.
So berechnen Sie die zyklomatische Komplexität
Mathematische Darstellung:
Mathematisch gesehen handelt es sich um eine Reihe unabhängiger Pfade durch das Diagramm. Die Codekomplexität des Programms kann mit der Formel definiert werden –
V(G) = E - N + 2
Woher,
E – Anzahl der Kanten
N – Anzahl der Knoten
V (G) = P + 1
Wobei P = Anzahl der Prädikatknoten (Knoten, der die Bedingung enthält)
Beispiel -
i = 0; n=4; //N-Number of nodes present in the graph while (i<n-1) do j = i + 1; while (j<n) do if A[i]<A[j] then swap(A[i], A[j]); end do; j=j+1; end do;
Das Flussdiagramm für dieses Programm wird sein
Mathematisch rechnen,
- V(G) = 9 – 7 + 2 = 4
- V(G) = 3 + 1 = 4 (Bedingungsknoten sind 1,2 und 3 Knoten)
- Basissatz – Ein Satz möglicher Ausführungspfade eines Programms
- 1, 7
- 1, 2, 6, 1, 7
- 1, 2, 3, 4, 5, 2, 6, 1, 7
- 1, 2, 3, 5, 2, 6, 1, 7
Eigenschaften der zyklomatischen Komplexität
Im Folgenden sind die Eigenschaften der zyklomatischen Komplexität aufgeführt:
- V (G) ist die maximale Anzahl unabhängiger Pfade im Diagramm
- V (G) >=1
- G hat einen Weg, wenn V (G) = 1
- Minimieren Sie die Komplexität auf 10
Wie nützlich ist diese Metrik für Softwaretests?
Basispfadtests sind eine White-Box-Technik und garantieren, dass während des Tests mindestens eine Anweisung ausgeführt wird. Dabei werden alle linear unabhängigen Pfade durch das Programm geprüft, was bedeutet, dass die Anzahl der Testfälle der zyklomatischen Komplexität des Programms entspricht.
Diese Metrik ist nützlich aufgrund der Eigenschaften der zyklomatischen Komplexität (M) –
- M kann die Anzahl der Testfälle sein, um eine Zweigabdeckung zu erreichen (Obergrenze).
- M kann die Anzahl der Pfade durch die Graphen sein. (Untergrenze)
Betrachten Sie dieses Beispiel –
If (Condition 1) Statement 1 Else Statement 2 If (Condition 2) Statement 3 Else Statement 4
Die zyklomatische Komplexität für dieses Programm beträgt 8-7+2=3.
Da die Komplexität mit 3 berechnet wurde, sind drei Testfälle erforderlich, um die vollständige Pfad-Abdeckung für das obige Beispiel sicherzustellen.
Schritte zu folgen:
Zur Berechnung der zyklomatischen Komplexität und zum Entwurf von Testfällen sollten die folgenden Schritte befolgt werden.
Schritt 1 – Konstruktion eines Diagramms mit Knoten und Kanten aus dem Code
Schritt 2 – Identifizierung unabhängiger Pfade
Schritt 3 – Zyklomatische Komplexitätsberechnung
Schritt 4 – Design von Testfällen
Sobald der Grundsatz gebildet ist, TESTFÄLLE sollte geschrieben werden, um alle Pfade auszuführen.
Mehr zu V (G)
Die zyklomatische Komplexität kann manuell berechnet werden, wenn das Programm klein ist. Bei sehr komplexen Programmen müssen automatisierte Tools verwendet werden, da diese mehr Flussdiagramme beinhalten. Basierend auf der Komplexitätszahl kann das Team Rückschlüsse auf die Maßnahmen ziehen, die zur Messung ergriffen werden müssen.
Die folgende Tabelle gibt einen Überblick über die Komplexitätszahl und die entsprechende Bedeutung von v (G):
Komplexitätszahl | Bedeutung |
---|---|
1 - 10 | Strukturierter und gut geschriebener Code
Hohe Testbarkeit Kosten und Aufwand sind geringer |
10 - 20 | Komplexer Code
Mittlere Testbarkeit Kosten und Aufwand sind mittel |
20 - 40 | Sehr komplexer Code
Geringe Testbarkeit Kosten und Aufwand sind hoch |
> 40 | Überhaupt nicht prüfbar
Sehr hoher Kosten- und Aufwand |
Tools zur Berechnung der zyklomatischen Komplexität:
Es stehen viele Tools zur Verfügung, um die Komplexität der Anwendung zu bestimmen. Einige Tools zur Komplexitätsberechnung werden für bestimmte Technologien verwendet. Die Komplexität kann anhand der Anzahl der Entscheidungspunkte in einem Programm ermittelt werden. Die Entscheidungspunkte sind if-, for-, for-each-, while-, do-, catch- und case-Anweisungen in einem Quellcode.
Beispiele für Werkzeuge sind
- OCLint – Statischer Code-Analysator für C und verwandte Sprachen
- Reflector Add-In – Codemetriken für .NET-Assemblys
- GMetrics – Finden Sie Metriken in Java verwandte Anwendungen
Verwendung der zyklomatischen Komplexität:
Die zyklomatische Komplexität kann sehr hilfreich sein bei
- Hilft Entwicklern und Testern, unabhängige Pfadausführungen zu bestimmen
- Entwickler können sicherstellen, dass alle Pfade mindestens einmal getestet wurden
- Hilft uns, uns mehr auf die unentdeckten Wege zu konzentrieren
- Verbessern Sie die Codeabdeckung in Software Engineering
- Bewerten Sie das mit der Anwendung oder dem Programm verbundene Risiko
- Die Verwendung dieser Kennzahlen zu Beginn des Zyklus verringert das Risiko des Programms
Fazit
Die zyklomatische Komplexität ist eine Softwaremetrik, die für strukturierte oder Weiß Box Testen. Es wird hauptsächlich verwendet, um die Komplexität eines Programms zu bewerten. Wenn es mehr Entscheidungspunkte gibt, ist das Programm komplexer. Wenn das Programm eine hohe Komplexität aufweist, ist die Fehlerwahrscheinlichkeit hoch und der Zeitaufwand für Wartung und Fehlerbehebung erhöht sich.