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

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

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: