Code Coverage-Tutorial: Branch-, Statement- und Decision-Tests

Was ist Code Berichterstattung?

Code Die Testabdeckung ist ein MaรŸ dafรผr, wie umfassend der Quellcode eines Programms getestet wurde. Sie ist eine Form des White-Box-Tests, der die Bereiche des Programms identifiziert, die von den Testfรคllen nicht abgedeckt werden. Zusรคtzlich werden Testfรคlle generiert, um die Testabdeckung 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 Abdeckungstests?

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.

Code Abdeckungsmethoden

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 Testskonzentriert 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.

Im Allgemeinen findet man in jeder Software, wenn man sich den Quellcode ansieht, eine Vielzahl von Elementen wie Operatoren, Funktionen usw.pingAusnahmebehandlungsroutinen usw. Abhรคngig von den Programmeingaben werden manche Codeabschnitte mรถglicherweise nicht ausgefรผhrt. Ziel der Anweisungsabdeckung ist es, 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.

Quelle Code:

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. Tot 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 Code Auswahl des Versicherungsschutzes

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
Code Die Testabdeckung gibt an, wie gut der Quellcode von Ihrer Testumgebung abgedeckt 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 Abdeckungswerkzeuge

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 Code Qualitรค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 Code Abdeckung

Code Vorteile der Abdeckung Code Nachteile der Abdeckung
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 Code Die Abdeckung sagt auch nichts darรผber aus, wie umfangreich 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

  • Code Die Testabdeckung ist ein MaรŸ, das beschreibt, in welchem โ€‹โ€‹MaรŸe der Quellcode des Programms getestet wurde.
  • Es hilft Ihnen, die Effizienz der Testimplementierung zu messen
  • Fรผnf Code Die Deckungsmethoden sind: 1.) Deckung auf Basis von Kontoauszรผgen, 2.) Deckung auf Basis von Bedingungen, 3.) Deckung auf Basis von Zweigstellen, 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.
  • Code Die Testabdeckung gibt an, wie gut der Quellcode von Ihrer Testumgebung abgedeckt wurde, wรคhrend die funktionale Testabdeckung misst, wie gut die Funktionalitรคt des Designs abgedeckt wurde.
  • Cobertura, JTest, Clover, Emma, โ€‹โ€‹Kalistick sind einige wichtige Code Coverage Tools
  • Code Die Abdeckungsfunktion ermรถglicht es Ihnen, zusรคtzliche Testfรคlle zu erstellen, um die Abdeckung zu erhรถhen.
  • Code Die Abdeckung hilft Ihnen nicht dabei festzustellen, ob wir alle mรถglichen Werte eines Features getestet haben.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: