Code Abdeckungstool: Anweisungs-, Verzweigungs- und Entscheidungstests

โšก Intelligente Zusammenfassung

Code Die Testabdeckung ist eine White-Box-Messung, die den Grad angibt, in dem der Quellcode von einer Testsuite abgedeckt wurde.ping Teams spรผren ungetestete Anweisungen, Verzweigungen, Bedingungen und Pfade auf, die von versteckten Fehlern belegt sein kรถnnten.

  • ๐ŸŽฏ Definition: Code Die Testabdeckung gibt an, wie viel des Quellcodes Ihre Tests tatsรคchlich ausfรผhren.
  • ๐Ÿ“Š Methods: Es gibt fรผnf Methoden โ€“ Anweisungs-, Entscheidungs-, Verzweigungs-, Bedingungs- und endliche Zustandsautomatenรผberdeckung.
  • ๐Ÿงฉ Anweisung vs. Zweig: Die Prรผfung der Aufgabenstellung prรผft die einzelnen Zeilen, wรคhrend die Prรผfung der einzelnen Zweige jedes Entscheidungsergebnis prรผft.
  • ๏ธ Code vs. Funktional: Code Die AbdeckungsmaรŸnahmen รผbten den Code aus; die funktionalen AbdeckungsmaรŸnahmen deckten die Anforderungen ab.
  • ๏ธ Tools: Cobertura, OpenCloverEMMA und Sonar automatisieren die Messung der Abdeckung.
  • ๐Ÿค– KI-Unterstรผtzung: KI-Tools generieren automatisch Tests und decken ungetestete, risikoreiche Abdeckungslรผcken auf.

Code Abdeckungs-Tutorial

Was ist Code Abdeckung?

Code Berichterstattung ist ein MaรŸ, das den Grad der Testung des Quellcodes eines Programms beschreibt. Es ist eine Form von White-Box-Tests Diese Funktion ermittelt die Bereiche eines Programms, die von den Testfรคllen nicht abgedeckt werden. Sie hilft auรŸerdem dabei, zusรคtzliche Testfรคlle zu erstellen, um die Testabdeckung zu erhรถhen und ein quantitatives MaรŸ fรผr die Codeabdeckung zu bestimmen.

In den meisten Fรคllen sammelt ein Codeabdeckungssystem Informationen รผber das laufende Programm. Diese werden dann mit Quellcodeinformationen kombiniert, um einen Bericht รผber die Codeabdeckung der Testsuite zu erstellen.

Warum verwenden Code Abdeckungstests?

Hier sind einige Hauptgrรผnde fรผr die Verwendung der Codeabdeckung:

  • Es hilft Ihnen, die Effizienz der Testdurchfรผhrung zu messen.
  • Es bietet eine quantitative Messmรถglichkeit fรผr Tests.
  • Es definiert den Grad, in dem der Quellcode getestet wurde.

Code Abdeckungsmethoden

Im Folgenden werden die wichtigsten Methoden zur Codeabdeckung vorgestellt:

  • Aussagedeckung
  • Entscheidungsabdeckung
  • Zweigstellenabdeckung
  • Toggle Abdeckung
  • FSM-Abdeckung

Aussagedeckung

Aussagedeckung Die Anweisungsabdeckung ist eine White-Box-Testmethode, bei der alle ausfรผhrbaren Anweisungen im Quellcode mindestens einmal ausgefรผhrt werden. Sie dient dazu, die Anzahl der ausgefรผhrten Anweisungen im Quellcode zu berechnen. Hauptziel der Anweisungsabdeckung ist es, alle mรถglichen Pfade, Zeilen und Anweisungen im Quellcode abzudecken.

Mithilfe der Anweisungsabdeckung werden Szenarien auf Basis der Struktur des zu testenden Codes abgeleitet.

Aussagedeckung

Beim White-Box-Test konzentriert sich der Tester auf die Funktionsweise der Software. Anders ausgedrรผckt: Er untersucht die internen Ablรคufe des Quellcodes anhand von Kontrollflussdiagrammen oder Ablaufdiagrammen.

Im Allgemeinen findet man in jeder Software im Quellcode 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.

Um dies zu verdeutlichen, betrachten wir ein Beispiel zur Berechnung der Deckungsquote von Finanzberichten. Hierfรผr untersuchen wir zwei verschiedene Szenarien und ermitteln den jeweiligen Deckungsgrad.

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

Szenario 1 zur Abdeckung von Aussagen

Die gelb markierten Anweisungen werden gemรครŸ dem Szenario ausgefรผhrt. Anzahl der ausgefรผhrten Anweisungen = 5, Gesamtzahl der Anweisungen = 7, daher betrรคgt die Anweisungsabdeckung 5/7 = 71 %.

Szenario 2: Wenn A = -3, B = -9

Szenario 2 zur Abdeckung von Aussagen

Die gelb markierten Anweisungen werden gemรครŸ dem Szenario ausgefรผhrt. Anzahl der ausgefรผhrten Anweisungen = 6, Gesamtzahl der Anweisungen = 7, daher betrรคgt die Anweisungsabdeckung 6/7 = 85 %.

Insgesamt betrachtet sind jedoch alle Aussagen in beiden Szenarien abgedeckt. Daher kรถnnen wir schlussfolgern, dass die Gesamtabdeckung der Aussagen 100 % betrรคgt.

Was ist durch die Kontoauszugsdeckung abgedeckt?

  1. Unbenutzte Aussagen
  2. Dead Code
  3. Unbenutzte Zweige
  4. Fehlende Aussagen

Testen der Entscheidungsabdeckung

Entscheidungsabdeckung Entscheidungsabdeckungstests sind eine White-Box-Testmethode, die das Ergebnis (wahr oder falsch) jedes booleschen Ausdrucks im Quellcode ausgibt. Ziel dieser Tests ist es, den gesamten zugรคnglichen Quellcode abzudecken und zu validieren, indem geprรผft wird, ob jeder Zweig an jedem mรถglichen Entscheidungspunkt mindestens einmal ausgefรผhrt wird.

Bei dieser Art der Codeabdeckung kรถnnen Ausdrรผcke komplex werden, was eine vollstรคndige Abdeckung erschwert. Daher werden verschiedene Methoden verwendet, um diese Metrik zu ermitteln. Diese Methoden priorisieren die wichtigsten Kombinationen. Obwohl sie der Zweigabdeckung รคhnelt, bietet sie eine hรถhere Sensitivitรคt gegenรผber Kontrollflรผssen.

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. Das Ergebnis der Entscheidung ist โ€žNeinโ€œ. Wenn (a>5) ausgewรคhlt ist, betrรคgt die Entscheidungsabdeckung 50 %.

Szenario 2: Der Wert von a ist 6. Das Ergebnis der Entscheidung ist โ€žJaโ€œ, wenn (a>5) ausgewรคhlt ist, also betrรคgt die Entscheidungsabdeckung 50%.

Testfall Wert von A Ausgang Entscheidungsabdeckung
1 2 2 50%
2 6 18 50%

Testen der Filialabdeckung

Zweigstellenabdeckung Die Zweigabdeckung ist eine White-Box-Testmethode, bei der jedes Ergebnis eines Codeabschnitts (Anweisung oder Schleife) geprรผft wird. Ziel der Zweigabdeckung ist es, sicherzustellen, dass jede Entscheidungsbedingung jedes Zweigs mindestens einmal ausgefรผhrt wird. Sie hilft, den Anteil unabhรคngiger Codeabschnitte zu messen und Abschnitte ohne Zweige zu identifizieren.

Wenn die Ergebnisse beispielsweise binรคr sind, mรผssen Sie sowohl die Ergebnisse โ€žWahrโ€œ als auch โ€žFalschโ€œ testen.

Die Formel zur Berechnung der Filialabdeckung:

Formel zur Bestimmung der Zweigdeckung

Beispiel fรผr Filialabdeckung

Um die Zweigabdeckung zu verstehen, betrachten wir dasselbe Beispiel wie zuvor. Die Zweigabdeckung berรผcksichtigt auch den unbedingten Zweig.

Testfall Wert von A Ausgang Entscheidungsabdeckung Zweigstellenabdeckung
1 2 2 50% 33%
2 6 18 50% 67%

Vorteile der Filialabdeckung:

  • Ermรถglicht die Validierung aller Zweige im Code.
  • Hilft Ihnen dabei sicherzustellen, dass keine Verzweigung zu einer Anomalie im Programmablauf fรผhrt.
  • Behebt Probleme, die aufgrund von Anweisungsabdeckungstests auftreten.
  • Ermรถglicht es Ihnen, Bereiche zu finden, die von anderen Testmethoden nicht erfasst werden.
  • Ermรถglicht es Ihnen, ein quantitatives MaรŸ fรผr die Codeabdeckung zu finden.
  • Die Zweigabdeckung ignoriert Verzweigungen innerhalb boolescher Ausdrรผcke.

Testen der Zustandsabdeckung

ZustandsabdeckungDie Bedingungsabdeckung, auch Ausdrucksabdeckung genannt, ist eine Testmethode, mit der Variablen oder Teilausdrรผcke in einer Bedingungsanweisung geprรผft und ausgewertet werden. Ziel der Bedingungsabdeckung ist es, die einzelnen Ergebnisse jeder logischen Bedingung zu รผberprรผfen. Die Bedingungsabdeckung bietet eine hรถhere Sensitivitรค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 UND, ODER oder XOR enthรคlt, gibt dies die Gesamtzahl der Mรถglichkeiten an. Die Bedingungsabdeckung garantiert jedoch keine vollstรคndige Entscheidungsabdeckung.

Die Formel zur Berechnung der Bedingungsabdeckung:

Formel zur Deckung des Krankheitszustands

Fรผr einen Ausdruck mit zwei Operanden gibt es vier mรถgliche Kombinationen: TT, FF, TF und FT. Betrachten Sie die Eingabe X=3, Y=4 (x b) FALSCH, was eine Bedingungsabdeckung von 1/4 = 25 % ergibt.

Finite-State-Machine-Abdeckung

Die Codeabdeckung mittels endlicher Zustandsautomaten ist zweifellos die komplexeste Methode. Das liegt daran, dass sie das Verhalten des Designs analysiert. Bei dieser Methode wird untersucht, wie oft bestimmte Zustรคnde besucht oder durchlaufen werden. AuรŸerdem wird geprรผft, wie viele Sequenzen in einem endlichen Zustandsautomaten enthalten sind.

Welche Art von Code Auswahl des Versicherungsschutzes

Dies ist mit Sicherheit die schwierigste Frage. Um eine Testabdeckungsmethode auszuwรคhlen, muss der Tester prรผfen, ob Folgendes zutrifft:

  • Der zu testende Code weist einen oder mehrere unentdeckte Fehler auf.
  • Kosten der mรถglichen Strafe,
  • Kosten des Reputationsverlustes
  • Kosten durch UmsatzeinbuรŸen 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
Zeigt an, wie gut der Quellcode von Ihrer Testumgebung geprรผft wurde. Misst, wie gut die Funktionalitรคt des Designs von Ihrem Testsystem abgedeckt wurde.
Verwendet niemals eine Designspezifikation. Verwendet eine Designspezifikation.
Von Entwicklern erstellt. Durchgefรผhrt von Testern.

Code Abdeckungswerkzeuge

Hier ist eine Liste wichtiger Codeabdeckungstools:

Werkzeugname Beschreibung
Cobertura Ein Open-Source-Tool zur Codeabdeckung. Es misst die Testabdeckung, indem es eine Codebasis instrumentiert und analysiert, welche Codezeilen beim Ausfรผhren der Testsuite ausgefรผhrt werden und welche nicht.
Clover Klee (OpenClover) verkรผrzt auรŸerdem die Testzeit, indem nur die Tests ausgefรผhrt werden, die den seit dem vorherigen Build geรคnderten Anwendungscode abdecken.
DevPartner DevPartner ermรถglicht Entwicklern die Analyse Java Code fรผr Codequalitรคt und Komplexitรคt.
Emma EMMA unterstรผtzt die Codeabdeckung auf Klassen-, Methoden-, Zeilen- und Basisblockebene, aggregiert auf Quelldatei-, Klassen- und Methodenebene.
Kalistick Kalistick ist eine Drittanbieteranwendung, die den Code aus verschiedenen Perspektiven analysiert.
CoView und CoAnt Ein Codeabdeckungstool fรผr Metriken, Erstellung von Mock-Objekten, Testbarkeit des Codes, Pfad- und Zweigabdeckung und mehr.
Volltreffer fรผr C++ BullseyeCoverage ist ein Code-Coverage-Tool fรผr C++ und C.
Echolot Sonar ist ein Open-Source-Tool zur Codeabdeckung, das Ihnen bei der Verwaltung der Codequalitรคt hilft.

Vor- und Nachteile der Verwendung Code Abdeckung

Vorteile Nachteile
Hilfreich zur Bewertung eines quantitativen MaรŸes fรผr die Codeabdeckung. Selbst wenn eine bestimmte Funktion im Design nicht implementiert ist, meldet die Codeabdeckung dennoch eine Abdeckung von 100%.
Ermรถglicht das Erstellen zusรคtzlicher Testfรคlle, um die Testabdeckung zu erhรถhen. Mithilfe der Codeabdeckung lรคsst sich nicht feststellen, ob alle mรถglichen Werte eines Merkmals getestet wurden.
Ermรถglicht es Ihnen, die Bereiche eines Programms zu finden, die von einer Reihe von Testfรคllen nicht abgedeckt werden. Code Die Abdeckung sagt nichts darรผber aus, wie umfangreich und wie gut Sie Ihre Argumentation abgedeckt haben.

Hรคufig gestellte Fragen

Viele Teams peilen 70 bis 80 % als realistisches Ziel an. 100 % zu erreichen ist selten kosteneffektiv. Konzentrieren Sie sich lieber darauf, kritische und risikoreiche Logik abzudecken, anstatt einen einzelnen Wert fรผr die gesamte Codebasis anzustreben.

Nein. Eine vollstรคndige Testabdeckung beweist lediglich, dass jede Zeile ausgefรผhrt wurde, nicht aber, dass jede Eingabe, jeder Wert oder jede Anforderung validiert wurde. Logikfehler und fehlende Funktionen kรถnnen weiterhin unentdeckt bleiben. Daher ergรคnzt die Testabdeckung ein gutes Testdesign, ersetzt es aber nicht.

Code Die Testabdeckung misst, wie viel Quellcode wรคhrend des Testens ausgefรผhrt wird. Die Testabdeckung ist umfassender. tracWie gut Tests Anforderungen, Funktionen und Risiken abdecken. Code Die Testabdeckung ist ein Faktor fรผr die gesamte Testabdeckung.

Nein. Man kann eine 100%ige Anweisungsabdeckung erreichen, auch wenn Zweige ungetestet bleiben, beispielsweise ein fehlender else-Pfad. Die Zweigabdeckung (Entscheidungsabdeckung) ist jedoch aussagekrรคftiger, da sie die Anweisungsabdeckung umfasst und jedes mรถgliche Ergebnis prรผft.

KI analysiert Quellcode und bestehende Tests, um ungetestete, risikoreiche Pfade zu identifizieren und schlรคgt anschlieรŸend neue Fรคlle vor oder generiert diese. Maschinelles Lernen priorisiert zudem die auszufรผhrenden Tests, wodurch das Feedback beschleunigt und gleichzeitig die Sicherheit erhรถht wird.ping Hohe Abdeckung.

Ja. KI-Tools wie Diffblue Cover scannen Code und schreiben selbststรคndig Unit-Tests fรผr ungedeckte Logik. Sie zielen auf riskante Verzweigungen und Bedingungen ab und erhรถhen so die Testabdeckung mit deutlich weniger manuellem Aufwand.

OpenClover misst die Abdeckung von Anweisungen, Zweigen und Methoden und erfasst mehr als 20 Metriken. Cobertura, EMMA und JaCoCo sind andere weit verbreitete kostenlose Optionen fรผr Java Projekte.

Die modifizierte Bedingungs-/Entscheidungsabdeckung erfordert, dass jede Bedingung in einer Entscheidung das Ergebnis unabhรคngig beeinflussen muss. Sie ist strenger als die Zweigabdeckung und ist gemรครŸ dem DO-178C-Standard fรผr sicherheitskritische Software, wie z. B. Avionik, vorgeschrieben.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: