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.
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 = 9Die 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?
- Unbenutzte Aussagen
- Tot Code
- Unbenutzte Zweige
- 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.
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
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 | 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:
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)
}
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:
Ejemplo:
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.













