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













