Was ist Code-Abdeckung?
Die Codeabdeckung ist eine Kennzahl, die beschreibt, inwieweit der Quellcode des Programms getestet wurde. Es handelt sich um eine Form des White-Box-Tests, bei der festgestellt wird, dass die Bereiche des Programms nicht von einer Reihe von Testfällen ausgeübt werden. 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.
In diesem Tutorial lernen Sie:
- Was ist Code-Abdeckung?
- Warum Code Coverage verwenden?
- Methoden zur Codeabdeckung
- Statement Coverage
- Entscheidungsschutz
- Zweigstellenabdeckung
- Zustandsdeckung
- Finite State Machine Coverage
- Welche Art der Codeabdeckung soll gewählt werden?
- Code-Abdeckung vs. funktionale Abdeckung
- Tools zur Codeabdeckung
- Vor- und Nachteile der Verwendung der Codeabdeckung
Warum Code Coverage 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 finden Sie wichtige Methoden zur Codeabdeckung
- Statement Coverage
- Entscheidungsschutz
- Zweigstellenabdeckung
- Abdeckung umschalten
- FSM-Abdeckung
Statement Coverage
Statement Coverage ist eine White-Box-Testtechnik, bei der 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 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.
Beim White-Box-Test konzentriert sich der Tester auf die Funktionsweise der Software. Mit anderen Worten, der Tester wird sich auf die interne Arbeitsweise des Quellcodes in Bezug auf Kontrollflussdiagramme oder Flussdiagramme konzentrieren.
Wenn wir uns den Quellcode ansehen, gibt es in jeder Software im Allgemeinen eine Vielzahl von Elementen wie Operatoren, Funktionen, Schleifen, außergewöhnliche Handler usw. Aufgrund 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 Abdeckung von Anweisungen berechnet wird.
Szenario zur Berechnung der Anweisungsabdeckung für den angegebenen Quellcode. Hier nehmen wir zwei verschiedene Szenarien, um den Prozentsatz der Anweisungsabdeckung für jedes Szenario zu überprüfen.
Quellcode:
Drucke (int a, int b) {------------ Drucksumme ist eine Funktionint Ergebnis = a + b;If (Ergebnis> 0)Drucken ("Positiv", Ergebnis)SonstDrucken ("Negativ", Ergebnis)} ----------- Ende des Quellcodes
Szenario 1:
Wenn A = 3, ist B = 9
Die gelb markierten Anweisungen werden gemäß dem Szenario ausgeführt
Anzahl der ausgeführten Anweisungen = 5, Gesamtzahl der Anweisungen = 7
Statement Coverage: 5/7 = 71%
Ebenso werden wir Szenario 2 sehen,
Szenario 2:
Wenn A = -3, ist B = -9
Die gelb markierten Anweisungen werden gemäß dem Szenario ausgeführt.
Anzahl der ausgeführten Anweisungen = 6
Gesamtzahl der Aussagen = 7
Statement Coverage: 6/7 = 85%
Aber alles in allem , wenn Sie sehen, alle Anweisungen werden von 2 abgedeckt nd betrachtet Szenarien. Wir können daher den Schluss ziehen, dass die Gesamtabdeckung der Aussagen 100% beträgt.
Was wird durch Statement Coverage abgedeckt?
- Nicht verwendete Anweisungen
- Toter Code
- Nicht verwendete Zweige
- Fehlende Aussagen
Entscheidungsschutz
Decision Coverage ist eine White-Box-Testtechnik, die die wahren oder falschen Ergebnisse jedes booleschen Ausdrucks des Quellcodes angibt. 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% ige Abdeckung zu erreichen. Aus diesem Grund gibt es viele verschiedene Methoden zum Melden dieser Metrik. Alle diese Methoden konzentrieren sich auf die wichtigsten Kombinationen. Es ist der Entscheidungsabdeckung sehr ähnlich, bietet jedoch eine bessere Empfindlichkeit für die Steuerung des Flusses.
Beispiel für Entscheidungsabdeckung
Betrachten Sie den folgenden Code-
Demo (int a) {Wenn (a> 5)a = a * 3Drucken (a)}}
Szenario 1:
Der Wert von a ist 2
Der gelb hervorgehobene 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 hervorgehobene Code wird ausgeführt. Hier wird das "Ja" -Ergebnis der Entscheidung If (a> 5) überprüft.
Entscheidungsabdeckung = 50%
Testfall | Wert von A. | Ausgabe | Entscheidungsschutz |
1 | 2 | 2 | 50% |
2 | 6 | 18 | 50% |
Zweigstellenabdeckung
Branch Coverage ist eine White-Box-Testmethode, bei der jedes Ergebnis eines Codemoduls (Anweisung oder Schleife) getestet wird. Der Zweck der Zweigabdeckung besteht darin, sicherzustellen, dass jede Entscheidungsbedingung von jedem Zweig mindestens einmal ausgeführt wird. Es hilft, Brüche unabhängiger Codesegmente zu messen und Abschnitte ohne Verzweigungen herauszufinden.
Wenn die Ergebnisse beispielsweise binär sind, müssen Sie sowohl die wahren als auch die falschen Ergebnisse testen.
Die Formel zur Berechnung der Zweigabdeckung:
Beispiel für die Zweigabdeckung
Betrachten wir zum Erlernen der Zweigabdeckung dasselbe Beispiel, das zuvor verwendet wurde
Betrachten Sie den folgenden Code
Demo (int a) {Wenn (a> 5)a = a * 3Drucken (a)}}
Die Zweigstellenabdeckung berücksichtigt auch die bedingungslose Zweigstelle
Testfall | Wert von A. | Ausgabe | Entscheidungsschutz | Zweigstellenabdeckung |
1 | 2 | 2 | 50% | 33% |
2 | 6 | 18 | 50% | 67% |
Vorteile der Filialabdeckung:
Branch Coverage Testing bietet folgende Vorteile:
- Ermöglicht die Validierung aller Zweige im Code
- Hilft Ihnen sicherzustellen, dass keine Verzweigung zu einer Abnormalität des Programmbetriebs führt
- Die Zweigabdeckungsmethode beseitigt Probleme, die durch das Testen der Anweisungsabdeckung auftreten
- Ermöglicht das Auffinden von Bereichen, die nicht mit anderen Testmethoden getestet wurden
- Hiermit können Sie ein quantitatives Maß für die Codeabdeckung finden
- Die Zweigabdeckung ignoriert Zweige innerhalb der Booleschen Ausdrücke
Zustandsdeckung
Bedingungsabdeckung oder Ausdrucksabdeckung ist eine Testmethode, mit der die Variablen oder Unterausdrücke in der bedingten Anweisung getestet und ausgewertet werden. Das Ziel der Bedingungsabdeckung besteht darin, die individuellen Ergebnisse für jede logische Bedingung zu überprüfen. Die Zustandsabdeckung bietet eine bessere Empfindlichkeit für den Kontrollfluss als die Entscheidungsabdeckung. In dieser Abdeckung werden nur Ausdrücke mit logischen Operanden berücksichtigt.
Wenn ein Ausdruck beispielsweise Boolesche Operationen wie AND, OR, XOR enthält, die die Gesamtmöglichkeiten angeben.
Die Bedingungsdeckung gibt keine Garantie für die vollständige Entscheidungsdeckung.
Die Formel zur Berechnung der Zustandsdeckung:
Beispiel:
Für den obigen Ausdruck haben wir 4 mögliche Kombinationen
- TT
- FF
- TF
- FT
Betrachten Sie die folgende Eingabe
X = 3 Y = 4 |
(x |
WAHR |
Die Zustandsabdeckung beträgt ¼ = 25% |
A = 3 B = 4 |
(a> b) |
FALSCH |
Finite State Machine Coverage
Die Abdeckung durch endliche Zustandsmaschinen ist sicherlich die komplexeste Art der Codeabdeckungsmethode. Dies liegt daran, dass es sich auf das Verhalten des Designs auswirkt. Bei dieser Abdeckungsmethode müssen Sie prüfen, wie viele zeitspezifische Zustände besucht und übertragen werden. Es wird auch überprüft, wie viele Sequenzen in einer Finite-State-Maschine enthalten sind.
Welche Art der Codeabdeckung soll gewählt werden?
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 Mängel auf
- Kosten der möglichen Strafe
- Kosten für verlorenen Ruf
- Kosten für verlorenen Verkauf usw.
Je höher die Wahrscheinlichkeit ist, dass Fehler kostspielige Produktionsausfälle verursachen, desto schwerwiegender ist der Deckungsgrad, den Sie auswählen müssen.
Code-Abdeckung vs. funktionale Abdeckung
Code-Abdeckung | Funktionsabdeckung |
Die Codeabdeckung gibt an, wie gut der Quellcode von Ihrem Prüfstand trainiert wurde. | Die funktionale Abdeckung misst, wie gut die Funktionalität des Designs von Ihrem Prüfstand abgedeckt wurde. |
Verwenden Sie niemals eine Designspezifikation | Verwenden Sie die Designspezifikation |
Von Entwicklern gemacht | Von Testern gemacht |
Tools zur Codeabdeckung
Hier ist eine Liste wichtiger Tools zur Codeabdeckung:
Werkzeugname | Beschreibung |
Cobertura | Es ist ein Open-Source-Code-Coverage-Tool. Es misst die Testabdeckung, indem es eine Codebasis instrumentiert und analysiert, welche Codezeilen ausgeführt werden und welche nicht ausgeführt werden, wenn die Testsuite ausgeführt wird. |
Kleeblatt | Clover reduziert auch die Testzeit, indem nur die Tests ausgeführt werden, die den Anwendungscode abdecken, der seit dem vorherigen Build geändert wurde. |
DevPartner | Mit DevPartner können Entwickler Java-Code auf Codequalität und -komplexität analysieren. |
Emma | EMMA unterstützt Klassen-, Methoden-, Zeilen- und Basisblockabdeckung, aggregierte Quelldatei-, Klassen- und Methodenebenen. |
Kalistick | Kalistick ist eine Drittanbieteranwendung, die die Codes mit unterschiedlichen Perspektiven analysiert. |
CoView und CoAnt | Coding Software ist ein Tool zur Codeabdeckung für Metriken, die Erstellung von Scheinobjekten, die Testbarkeit von Codes, die Abdeckung von Pfaden und Zweigen usw. |
Bullseye für C ++ | BulseyeCoverage ist ein Tool zur Codeabdeckung für C ++ und C. |
Sonar | Sonar ist ein offenes Tool zur Codeabdeckung, mit dem Sie die Codequalität verwalten können. |
Vorteile der Verwendung der Codeabdeckung
- Hilfreich bei der Bewertung eines quantitativen Maßes für die Codeabdeckung
- Sie können zusätzliche Testfälle erstellen, um die Abdeckung zu erhöhen
- Hier können Sie die Bereiche eines Programms finden, die nicht von einer Reihe von Testfällen ausgeführt werden
Nachteile der Verwendung der Codeabdeckung
- Selbst wenn eine bestimmte Funktion nicht im Design implementiert ist, meldet die Codeabdeckung immer noch eine 100% ige Abdeckung.
- Es ist nicht möglich festzustellen, ob wir alle möglichen Werte eines Features mithilfe der Codeabdeckung getestet haben
- Die Codeabdeckung sagt auch nicht aus, wie viel und wie gut Sie Ihre Logik abgedeckt haben
- In dem Fall, in dem die angegebene Funktion nicht implementiert oder nicht in der Spezifikation enthalten ist, können strukturbasierte Techniken dieses Problem nicht finden.
Zusammenfassung
- Die Codeabdeckung ist eine Kennzahl, die beschreibt, inwieweit 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 5) FSM-Coverage
- Bei der Anweisungsabdeckung werden alle ausführbaren Anweisungen im Quellcode mindestens einmal ausgeführt
- Die Entscheidungsabdeckung gibt die wahren oder falschen Ergebnisse jedes Booleschen Ausdrucks an
- In der Zweigabdeckung wird jedes Ergebnis eines Codemoduls getestet
- Bedingt zeigt an, wie die Variablen oder Unterausdrücke in der bedingten Anweisung ausgewertet werden
- Die Abdeckung durch endliche Zustandsmaschinen ist sicherlich die komplexeste Art der Codeabdeckungsmethode
- Um eine Deckungsmethode auszuwählen, muss der Tester die Kosten der möglichen Strafe, des verlorenen Rufs, des verlorenen Verkaufs usw. überprüfen.
- Die Codeabdeckung gibt an, wie gut der Quellcode von Ihrem Prüfstand ausgeführt wurde, während die funktionale Abdeckung misst, wie gut die Funktionalität des Designs abgedeckt wurde
- Cobertura, JTest, Clover, Emma, Kalistick sind nur 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 eines Features getestet haben