Mccabes zyklomatische Komplexität: Berechnen mit Flussdiagramm (Beispiel)

Inhaltsverzeichnis:

Anonim

Um die zyklomatische Komplexität zu verstehen, lassen Sie uns zunächst verstehen:

Was ist Software Metric?

Die Messung ist nichts anderes als eine quantitative Angabe der Größe / Dimension / Kapazität eines Attributs eines Produkts / Prozesses. Die Softwaremetrik ist definiert als ein quantitatives Maß für ein Attribut, das ein Softwaresystem in Bezug auf Kosten, Qualität, Größe und Zeitplan besitzt.

Beispiel-

Maßnahme - Anzahl der FehlerMetriken - Anzahl der gefundenen Fehler pro Person

In diesem Tutorial lernen Sie:

  • Was ist Software Metric?
  • Was ist zyklomatische Komplexität?
  • Flussdiagrammnotation für ein Programm:
  • Berechnung der zyklomatischen Komplexität
  • Eigenschaften der zyklomatischen Komplexität:
  • Wie nützlich ist diese Metrik für Softwaretests?
  • Mehr zu V (G):
  • Werkzeuge zur Berechnung der zyklomatischen Komplexität:
  • Verwendung der zyklomatischen Komplexität:

Zyklomatische Komplexität beim Testen von Software

Die zyklomatische Komplexität beim Testen von Software ist eine Testmetrik, mit der die Komplexität eines Softwareprogramms gemessen 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.

Unabhängiger Pfad ist definiert als ein Pfad mit mindestens einer Kante, die zuvor in keinem anderen Pfad durchlaufen wurde.

Diese Metrik wurde 1976 von Thomas J. McCabe entwickelt und basiert auf einer Kontrollflussdarstellung des Programms. Der Kontrollfluss zeigt ein Programm als Diagramm, das aus Knoten und Kanten besteht.

In der Grafik stellen Knoten Verarbeitungsaufgaben dar, während Kanten den Kontrollfluss zwischen den Knoten darstellen.

Flussdiagrammnotation für ein Programm:

Die Flussdiagrammnotation für ein Programm definiert mehrere Knoten, die durch die Kanten verbunden sind. Unten finden Sie Flussdiagramme für Anweisungen wie if-else, While, till und normale Ablaufsequenz.

Berechnung der zyklomatischen Komplexität

Mathematische Darstellung:

Mathematisch gesehen besteht es aus unabhängigen Pfaden durch das Diagramm. Die Codekomplexität des Programms kann mit der Formel definiert werden -

V (G) = E - N + 2

Wo,

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-Anzahl der im Diagramm vorhandenen Knotenwährend (i 

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:

  1. V (G) ist die maximale Anzahl unabhängiger Pfade im Diagramm
  2. V (G)> = 1
  3. G hat einen Pfad, wenn V (G) = 1 ist
  4. Minimieren Sie die Komplexität auf 10

Wie nützlich ist diese Metrik für Softwaretests?

Das Testen von Basispfaden ist eine White-Box-Technik und garantiert, dass während des Tests mindestens eine Anweisung ausgeführt wird. Es überprüft jeden linear unabhängigen Pfad durch das Programm, was bedeutet, dass Zahlentestfälle der zyklomatischen Komplexität des Programms entsprechen.

Diese Metrik ist aufgrund der Eigenschaften der zyklomatischen Komplexität (M) nützlich -

  1. M kann eine Anzahl von Testfällen sein, um eine Zweigabdeckung zu erreichen (obere Grenze)
  2. M kann die Anzahl der Pfade durch die Graphen sein. (Untere Grenze)

Betrachten Sie dieses Beispiel -

If (Bedingung 1)Aussage 1SonstAussage 2If (Bedingung 2)Aussage 3SonstAussage 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 für die vollständige Pfadabdeckung für das obige Beispiel erforderlich.

Zu befolgende Schritte:

Die folgenden Schritte sollten zur Berechnung der zyklomatischen Komplexität und des Testfalldesigns ausgeführt werden.

Schritt 1 - Aufbau eines Graphen mit Knoten und Kanten aus dem Code

Schritt 2 - Identifizierung unabhängiger Pfade

Schritt 3 - Berechnung der zyklomatischen Komplexität

Schritt 4 - Design von Testfällen

Sobald der Basissatz gebildet ist, sollten TEST CASES geschrieben werden, um alle Pfade auszuführen.

Mehr zu V (G):

Die zyklomatische Komplexität kann manuell berechnet werden, wenn das Programm klein ist. Automatisierte Tools müssen verwendet werden, wenn das Programm sehr komplex ist, da dies mehr Flussdiagramme umfasst. Basierend auf der Komplexitätszahl kann das Team die Maßnahmen abschließen, 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 Testbarkeit des komplexen Codes Mittel Kosten und Aufwand sind mittel
20-40 Sehr komplexer Code Niedrige Testbarkeit Kosten und Aufwand sind hoch
> 40 Überhaupt nicht testbar Sehr hohe Kosten und Aufwand

Werkzeuge zur Berechnung der zyklomatischen Komplexität:

Es stehen viele Tools zur Verfügung, um die Komplexität der Anwendung zu bestimmen. Einige Tools zur Berechnung der Komplexität werden für bestimmte Technologien verwendet. Die Komplexität ergibt sich aus der Anzahl der Entscheidungspunkte in einem Programm. Die Entscheidungspunkte sind, wenn für jeden Fall Anweisungen in einem Quellcode abgefangen werden.

Beispiele für Werkzeuge sind

  • OCLint - Statischer Code-Analysator für C und verwandte Sprachen
  • Reflector Add In - Code-Metriken für .NET-Assemblys
  • GMetrics - Finden Sie Metriken in Java-bezogenen Anwendungen

Verwendung der zyklomatischen Komplexität:

Die zyklomatische Komplexität kann sich als sehr hilfreich erweisen

  • Hilft Entwicklern und Testern bei der Ermittlung unabhängiger Pfadausführungen
  • Entwickler können sicherstellen, dass alle Pfade mindestens einmal getestet wurden
  • Hilft uns, uns mehr auf die nicht abgedeckten Pfade zu konzentrieren
  • Verbessern Sie die Codeabdeckung im Software Engineering
  • Bewerten Sie das mit der Anwendung oder dem Programm verbundene Risiko
  • Die Verwendung dieser Metriken zu Beginn des Zyklus verringert das Risiko des Programms

Fazit:

Cyclomatic Complexity ist eine Softwaremetrik, die für strukturierte Tests oder White-Box-Tests nützlich ist. Es wird hauptsächlich verwendet, um die Komplexität eines Programms zu bewerten. Wenn die Entscheidungspunkte größer sind, ist die Komplexität des Programms größer. Wenn das Programm eine hohe Komplexität aufweist, ist die Fehlerwahrscheinlichkeit mit zunehmender Zeit für Wartung und Fehlerbehebung hoch.