Tutorial zur Codeabdeckung: Verzweigungs-, Anweisungs- und Entscheidungstests

Was ist Codeabdeckung?

Die Codeabdeckung ist ein Maß, das den Grad beschreibt, in dem der Quellcode des Programms getestet wurde. Es handelt sich um eine Form des White-Box-Tests, bei dem die Bereiche des Programms ermittelt werden, die von einer Reihe von Testfällen nicht getestet wurden. Außerdem werden einige Testfälle erstellt, um die Abdeckung zu erhöhen und ein quantitatives Maß für die Codeabdeckung zu bestimmen.

In den meisten Fällen sammelt das Codeabdeckungssystem Informationen über das laufende Programm. Außerdem wird dies mit Quellcodeinformationen kombiniert, um einen Bericht über die Codeabdeckung der Testsuite zu erstellen.

Warum Code-Coverage-Tests verwenden?

Hier sind einige Hauptgründe für die Verwendung der Codeabdeckung:

  • Es hilft Ihnen, die Effizienz der Testimplementierung zu messen
  • Es bietet eine quantitative Messung.
  • Es definiert den Grad, in dem der Quellcode getestet wurde.

Methoden zur Codeabdeckung

Im Folgenden sind die wichtigsten Code Coverage-Methoden aufgeführt

  • Erklärungsabdeckung
  • Entscheidungsabdeckung
  • Zweigstellenabdeckung
  • Toggle Abdeckung
  • FSM-Abdeckung

Aussagedeckung

Aussagedeckung ist eine White-Box-Testtechnik, bei der alle ausführbaren Anweisungen im Quellcode mindestens einmal ausgeführt werden. Sie wird zur Berechnung der Anzahl der Anweisungen im Quellcode verwendet, die ausgeführt wurden. Der Hauptzweck der Anweisungsabdeckung besteht darin, alle möglichen Pfade, Zeilen und Anweisungen im Quellcode abzudecken.

Die Anweisungsabdeckung wird verwendet, um ein Szenario basierend auf der Struktur des zu testenden Codes abzuleiten.

Aussagedeckung

In Weiß Box Testenkonzentriert sich der Tester auf die Funktionsweise der Software. Mit anderen Worten: Der Tester wird sich auf die interne Funktionsweise des Quellcodes in Bezug auf Kontrollflussdiagramme oder Flussdiagramme konzentrieren.

Wenn wir uns den Quellcode einer Software ansehen, sehen wir im Allgemeinen eine Vielzahl von Elementen wie Operatoren, Funktionen, Schleifen, Ausnahmehandler usw. Abhängig von der Eingabe in das Programm werden einige Codeanweisungen möglicherweise nicht ausgeführt. Das Ziel der Anweisungsabdeckung besteht darin, alle möglichen Pfade, Zeilen und Anweisungen im Code abzudecken.

Lassen Sie uns dies anhand eines Beispiels verstehen, wie die Anweisungsabdeckung berechnet wird.

Szenario zur Berechnung der Statement Coverage für einen bestimmten Quellcode. Hier betrachten wir zwei verschiedene Szenarios, um den Prozentsatz der Kontoauszugsabdeckung für jedes Szenario zu überprüfen.

Quellcode:

Prints (int a, int b) {                       ------------  Printsum is a function 
    int result = a+ b; 
    If (result> 0)
    	Print ("Positive", result)
    Else
    	Print ("Negative", result)
    }                                        -----------   End of the source code 

Szenario 1:

Wenn A = 3, B = 9

Aussagedeckung

Die gelb markierten Anweisungen sind diejenigen, die gemäß dem Szenario ausgeführt werden

Anzahl der ausgeführten Anweisungen = 5, Gesamtzahl der Anweisungen = 7

Aussageabdeckung: 5/7 = 71 %

Aussagedeckung

Ebenso werden wir Szenario 2 sehen,

Szenario 2:

Wenn A = -3, B = -9

Aussagedeckung

Die gelb markierten Anweisungen sind diejenigen, die gemäß dem Szenario ausgeführt werden.

Anzahl der ausgeführten Anweisungen = 6

Gesamtzahl der Aussagen = 7

Aussagedeckung

Aussageabdeckung: 6/7 = 85 %

Aussagedeckung

Aber im Großen und Ganzen werden, wie Sie sehen, alle Aussagen von beiden Szenarien abgedeckt. Daraus können wir schließen, dass die Gesamtabdeckung der Abrechnung 100 % beträgt.

Aussagedeckung

Was ist durch die Kontoauszugsdeckung abgedeckt?

  1. Unbenutzte Aussagen
  2. Toter Code
  3. Unbenutzte Zweige
  4. Fehlende Aussagen

Testen der Entscheidungsabdeckung

Entscheidungsabdeckung ist eine White-Box-Testtechnik, die die wahren oder falschen Ergebnisse jedes booleschen Ausdrucks des Quellcodes meldet. Ziel des Entscheidungsüberdeckungstests ist es, den gesamten zugänglichen Quellcode abzudecken und zu validieren, indem überprüft und sichergestellt wird, dass jeder Zweig jedes möglichen Entscheidungspunkts mindestens einmal ausgeführt wird.

Bei diesem Abdeckungstyp können Ausdrücke komplex werden, was es schwierig macht, eine 100-prozentige Abdeckung zu erreichen. Aus diesem Grund werden verschiedene Methoden verwendet, um diese Metrik zu melden. Diese Methoden priorisieren die kritischsten Kombinationen. Obwohl es der Entscheidungsabdeckung ähnelt, bietet es eine größere Sensibilität für den Kontrollfluss.

Testen der Entscheidungsabdeckung

Beispiel für Entscheidungsabdeckung

Betrachten Sie den folgenden Code:

Demo(int a) {                       
     If (a> 5)
    	a=a*3
     Print (a)
    }

Szenario 1:

Der Wert von a ist 2

Testen der Entscheidungsabdeckung

Der gelb markierte Code wird ausgeführt. Hier wird das „Nein“-Ergebnis der Entscheidung If (a>5) überprüft.

Entscheidungsabdeckung = 50 %

Szenario 2:

Der Wert von a ist 6

Testen der Entscheidungsabdeckung

Der gelb markierte Code wird ausgeführt. Hier wird das „Ja“-Ergebnis der Entscheidung If (a>5) überprüft.

Entscheidungsabdeckung = 50 %

Testfall Wert von A Ausgang Entscheidungsabdeckung
1 2 2 50 %
2 6 18 50 %

Testen der Filialabdeckung

Zweigstellenabdeckung ist eine White-Box-Testmethode, bei der jedes Ergebnis eines Codemoduls (Anweisung oder Schleife) getestet wird. Der Zweck der Verzweigungsabdeckung besteht darin, sicherzustellen, dass jede Entscheidungsbedingung aus jedem Zweig mindestens einmal ausgeführt wird. Sie hilft dabei, Anteile unabhängiger Codesegmente zu messen und Abschnitte ohne Verzweigungen zu finden.

Wenn die Ergebnisse beispielsweise binär sind, müssen Sie sowohl die Ergebnisse „Wahr“ als auch „Falsch“ testen.

Die Formel zur Berechnung der Filialabdeckung:

Testen der Filialabdeckung

Beispiel für Filialabdeckung

Um die Zweigabdeckung zu erlernen, betrachten wir das zuvor verwendete Beispiel

Betrachten Sie den folgenden Code:

Demo(int a) {                       
     If (a> 5)
    	a=a*3
     Print (a)
    }                                       

Testen der Filialabdeckung

Branch Coverage berücksichtigt auch die bedingungslose Verzweigung

Testfall Wert von A Ausgang Entscheidungsabdeckung Zweigstellenabdeckung
1 2 2 50 % 33 %
2 6 18 50 % 67 %

Vorteile der Filialabdeckung:

Das Testen der Branchenabdeckung bietet folgende Vorteile:

  • Ermöglicht die Validierung aller Zweige im Code
  • Hilft Ihnen sicherzustellen, dass keine Verzweigung zu einer Anomalie im Programmbetrieb führt
  • Die Branch-Coverage-Methode beseitigt Probleme, die aufgrund von Statement-Coverage-Tests auftreten
  • Ermöglicht Ihnen, Bereiche zu finden, die nicht mit anderen Testmethoden getestet wurden
  • Damit können Sie ein quantitatives Maß für die Codeabdeckung ermitteln
  • Die Zweigabdeckung ignoriert Zweige innerhalb der booleschen Ausdrücke

Testen der Zustandsabdeckung

Zustandsabdeckung oder Ausdrucksabdeckung ist eine Testmethode, die zum Testen und Auswerten der Variablen oder Unterausdrücke in der bedingten Anweisung verwendet wird. Das Ziel der Bedingungsabdeckung besteht darin, einzelne Ergebnisse für jede logische Bedingung zu überprüfen. Die Bedingungsabdeckung bietet eine bessere Sensibilität für den Kontrollfluss als die Entscheidungsabdeckung. Bei dieser Abdeckung werden nur Ausdrücke mit logischen Operanden berücksichtigt.

Wenn ein Ausdruck beispielsweise Boolesche Operationen wie AND, OR, XOR enthält, gibt dies sämtliche Möglichkeiten an.

Die Bedingungsabdeckung gibt keine Garantie für die vollständige Entscheidungsabdeckung.

Die Formel zur Berechnung der Bedingungsabdeckung:

Testen der Zustandsabdeckung

Ejemplo:

Testen der Zustandsabdeckung

Für den obigen Ausdruck haben wir 4 mögliche Kombinationen

  • TT
  • FF
  • TF
  • FT

Betrachten Sie die folgenden Eingaben

X = 3

Y = 4

(X TRUE Die Bedingungsabdeckung beträgt ¼ = 25 %
A = 3

B = 4

(a>b) FALSCH

Finite-State-Machine-Abdeckung

Die Abdeckung durch Finite-State-Machine ist sicherlich die komplexeste Art von Code-Abdeckungsmethode. Dies liegt daran, dass sie auf dem Verhalten des Designs basiert. Bei dieser Abdeckungsmethode müssen Sie nachsehen, wie viele zeitspezifische Zustände besucht bzw. durchlaufen werden. Außerdem wird geprüft, wie viele Sequenzen in einer Finite-State-Machine enthalten sind.

Welche Art von Codeabdeckung Sie wählen sollten

Dies ist sicherlich die schwierigste Antwort. Um eine Abdeckungsmethode auszuwählen, muss der Tester überprüfen, ob die

  • Der zu testende Code weist einzelne oder mehrere unentdeckte Fehler auf
  • Kosten der möglichen Strafe
  • Kosten eines Reputationsverlustes
  • Kosten für entgangenen Verkauf usw.

Je höher die Wahrscheinlichkeit ist, dass Defekte zu kostspieligen Produktionsausfällen führen, desto höher ist die Deckungssumme, die Sie wählen müssen.

Code-Abdeckung vs. funktionale Abdeckung

Code-Abdeckung Funktionsabdeckung
Die Codeabdeckung gibt Ihnen Auskunft darüber, wie gut der Quellcode von Ihrem Prüfstand getestet wurde. Die funktionale Abdeckung misst, wie gut die Funktionalität des Designs von Ihrem Prüfstand abgedeckt wurde.
Verwenden Sie niemals eine Designspezifikation Designspezifikation verwenden
Von Entwicklern erstellt Von Testern durchgeführt

Code-Coverage-Tools

Hier ist eine Liste wichtiger Code-Coverage-Tools:

Werkzeugname Beschreibung
Cobertura Es handelt sich um ein Open-Source-Code-Coverage-Tool. Es misst die Testabdeckung durch Instrumentierung einer Codebasis und analysiert, welche Codezeilen ausgeführt werden und welche nicht, wenn die Testsuite ausgeführt wird.
Clover Clover reduziert außerdem die Testzeit, indem nur die Tests ausgeführt werden, die den Anwendungscode abdecken, der seit dem vorherigen Build geändert wurde.
DevPartner DevPartner ermöglicht Entwicklern die Analyse Java Code für Codequalität und -komplexität.
Emma EMMA unterstützt Klassen-, Methoden-, Zeilen- und Basisblockabdeckung sowie aggregierte Quelldatei-, Klassen- und Methodenebenen.
Kalistick Kalistick ist eine Drittanbieteranwendung, die die Codes aus verschiedenen Perspektiven analysiert.
CoView und CoAnt Coding Software ist ein Tool zur Codeabdeckung für Metriken, die Erstellung von Scheinobjekten, die Testbarkeit von Code, die Abdeckung von Pfaden und Verzweigungen usw.
Volltreffer für C++ BulseyeCoverage ist ein Code-Coverage-Tool für C++ und C.
Echolot Sonar ist ein offenes Code-Coverage-Tool, das Ihnen bei der Verwaltung der Codequalität hilft.

Vor- und Nachteile der Verwendung von Code Coverage

Vorteile der Codeabdeckung Nachteile der Codeabdeckung
Hilfreich, um ein quantitatives Maß für die Codeabdeckung zu ermitteln Selbst wenn eine bestimmte Funktion nicht im Design implementiert ist, wird für die Codeabdeckung immer noch eine 100-prozentige Abdeckung angegeben.
Sie können damit zusätzliche Testfälle erstellen, um die Abdeckung zu erhöhen Mithilfe der Codeabdeckung lässt sich nicht feststellen, ob wir alle möglichen Werte eines Features getestet haben
Es ermöglicht Ihnen, die Bereiche eines Programms zu finden, die nicht durch eine Reihe von Testfällen beansprucht werden Die Codeabdeckung sagt auch nicht aus, wie viel und wie gut Sie Ihre Logik abgedeckt haben
Falls die angegebene Funktion nicht implementiert ist oder nicht in der Spezifikation enthalten ist, können strukturbasierte Techniken dieses Problem nicht finden.

Zusammenfassung

  • Die Codeabdeckung ist ein Maß, das den Grad beschreibt, in dem der Quellcode des Programms getestet wurde
  • Es hilft Ihnen, die Effizienz der Testimplementierung zu messen
  • Fünf Code-Coverage-Methoden sind 1.) Statement Coverage 2.) Condition Coverage 3) Branch Coverage 4) Toggle-Abdeckung 5) FSM-Abdeckung
  • Bei der Anweisungsabdeckung werden alle ausführbaren Anweisungen im Quellcode mindestens einmal ausgeführt
  • Die Entscheidungsabdeckung meldet die wahren oder falschen Ergebnisse jedes booleschen Ausdrucks
  • Bei der Zweigabdeckung wird jedes Ergebnis eines Codemoduls getestet
  • Bedingung zeigt an, wie die Variablen oder Unterausdrücke in der bedingten Anweisung ausgewertet werden
  • Die Finite-State-Machine-Abdeckung ist sicherlich die komplexeste Art von Code-Abdeckungsmethode
  • Um eine Deckungsmethode auszuwählen, muss der Tester die Kosten der möglichen Strafe, des Reputationsverlusts, des entgangenen Verkaufs usw. prüfen.
  • Die Codeabdeckung gibt an, wie gut der Quellcode von Ihrem Prüfstand getestet wurde, während die funktionale Abdeckung misst, wie gut die Funktionalität des Designs abgedeckt wurde
  • Cobertura, JTest, Clover, Emma, ​​Kalistick sind einige wichtige Code Coverage Tools
  • Mit Code Coverage können Sie zusätzliche Testfälle erstellen, um die Abdeckung zu erhöhen
  • Mithilfe der Codeabdeckung können Sie nicht feststellen, ob wir alle möglichen Werte einer Funktion getestet haben