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 ist eine Form von Weiß box Beim Testen werden die Bereiche des Programms ermittelt, die nicht durch eine Reihe von Testfällen beansprucht werden. Außerdem werden einige Testfälle erstellt, um die Abdeckung zu erhöhen und ein quantitatives Maß für die Codeabdeckung zu ermitteln.

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

Following sind wichtige Methoden zur Codeabdeckung

  • Erklärungsabdeckung
  • Entscheidungsabdeckung
  • Filialabdeckung
  • Abdeckung umschalten
  • FSM-Abdeckung

Aussagedeckung

Aussagedeckung ist ein weißer box Testverfahren, bei dem alle ausführbaren Anweisungen im Quellcode mindestens einmal ausgeführt werden. Es wird zur Berechnung der Anzahl der ausgeführten Anweisungen im Quellcode verwendet. Der Hauptzweck der Statement Coverage 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.

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 ansehen, gibt es im Allgemeinen in jeder Software eine Vielzahl von Elementen wie Operatoren, Funktionen, Schleifen, Ausnahmehandler usw. Basierend auf der Eingabe in das Programm werden einige der 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

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 %

Ebenso werden wir Szenario 2 sehen,

Szenario 2:

Wenn A = -3, B = -9

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

Anzahl der ausgeführten Anweisungen = 6

Gesamtzahl der Aussagen = 7

Aussageabdeckung: 6/7 = 85 %

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.

Was ist durch die Kontoauszugsdeckung abgedeckt?

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

Testen der Entscheidungsabdeckung

Entscheidungsabdeckung ist ein weißer box Testtechnik, die die wahren oder falschen Ergebnisse jedes booleschen Ausdrucks des Quellcodes meldet. Das Ziel des Entscheidungsabdeckungstests besteht darin, 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.

In dieser Berichterstattung können Ausdrücke manchmal kompliziert werden. Daher ist es sehr schwierig, eine 100-prozentige Abdeckung zu erreichen. Aus diesem Grund gibt es viele verschiedene Methoden zur Meldung dieser Kennzahl. Alle diese Methoden konzentrieren sich darauf, die wichtigsten Kombinationen abzudecken. Es ist der Entscheidungsabdeckung sehr ähnlich, bietet jedoch eine bessere Empfindlichkeit gegenüber dem Kontrollfluss.

Beispiel für Entscheidungsabdeckung

Betrachten Sie Folgendeswing Code-

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

Szenario 1:

Der Wert von a ist 2

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

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 Output Entscheidungsabdeckung
1 2 2 50%
2 6 18 50%

Testen der Filialabdeckung

Zweigstellenabdeckung ist ein weißer box Testmethode, bei der jedes Ergebnis eines Codemoduls (Anweisung oder Schleife) getestet wird. Der Zweck der Zweigabdeckung besteht darin, sicherzustellen, dass jede Entscheidungsbedingung aus jedem Zweig mindestens einmal ausgeführt wird. Es hilft, Bruchteile unabhängiger Codesegmente zu messen und Abschnitte ohne Verzweigungen herauszufinden.

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

Die Formel zur Berechnung der Filialabdeckung:

Beispiel für Filialabdeckung

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

Betrachten Sie Folgendeswing Code-

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

Branch Coverage berücksichtigt auch die bedingungslose Verzweigung

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

Vorteile der Filialabdeckung:

Branch Coverage Testing bietet Folgendeswing Vorteile:

  • Ermöglicht die Validierung aller Zweige im Code
  • Hilft Ihnen sicherzustellen, dass keine Verzweigungen zu Abnormalitäten im Programmbetrieb führen
  • 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 Empfindlichkeit gegenüber dem Kontrollfluss als die Entscheidungsabdeckung. In dieser Berichterstattung werden nur Ausdrücke mit logischen Operanden berücksichtigt.

Wenn ein Ausdruck beispielsweise boolesche Operationen wie AND, OR, XOR enthält, gibt dies die Gesamtzahl der Möglichkeiten an.

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

Die Formel zur Berechnung der Bedingungsabdeckung:

Beispiel:

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

  • TT
  • FF
  • TF
  • FT

Betrachten Sie Folgendeswing Eingabe

X = 3

Y = 4

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

B = 4

(a>b) FALSCH

Finite-State-Machine-Abdeckung

Die Abdeckung von Finite-State-Machine ist sicherlich die komplikationsreichsteplex Art der Codeabdeckungsmethode. Dies liegt daran, dass es sich auf das Verhalten des Designs auswirkt. Bei dieser Abdeckungsmethode müssen Sie darauf achten, wie viele zeitspezifische Staaten besucht und durchquert werden. Außerdem wird überprüft, wie viele Sequenzen in einem endlichen Automaten 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
Zielgruppe 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 es nur die Tests ausführt, die den Anwendungscode abdecken, der seit dem vorherigen Build geändert wurde.
DevPartner DevPartner ermöglicht Entwicklern die Analyse von Java-Code auf Codequalität und Kommunikationplexkeit.
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.
Bullseye für C++ BulseyeCoverage ist ein Code-Coverage-Tool für C + + und C.
Sonargerät 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-Coverage und 5) FSM-Coverage
  • 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 Abdeckung von Finite-State-Machine ist sicherlich die komplikationsreichsteplex Art der Codeabdeckungsmethode
  • 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 Tools zur Codeabdeckung
  • 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