it-swarm.com.de

Was ist Code Coverage und wie misst DU es?

Was ist Code Coverage und wie misst DU es?

Diese Frage wurde mir im Hinblick auf die Automatisierung der Codeabdeckung beim Testen gestellt. Es scheint, dass es außerhalb von automatisierten Werkzeugen mehr Kunst als Wissenschaft ist. Gibt es Beispiele aus der Praxis für die Verwendung der Codeabdeckung?

239
Brian G

Die Codeabdeckung ist ein Maß dafür, wie viele Zeilen/Blöcke/Bögen Ihres Codes ausgeführt werden, während die automatisierten Tests ausgeführt werden.

Die Codeabdeckung wird mithilfe eines speziellen Tools erfasst, um die Binärdateien zu instrumentieren, um Ablaufverfolgungsaufrufe hinzuzufügen und einen vollständigen Satz automatisierter Tests für das instrumentierte Produkt auszuführen. Ein gutes Tool gibt Ihnen nicht nur den Prozentsatz des ausgeführten Codes an, sondern ermöglicht es Ihnen auch, die Daten aufzuspüren und genau zu sehen, welche Codezeilen während eines bestimmten Tests ausgeführt wurden.

Unser Team verwendet Magellan - eine Reihe interner Tools zur Codeabdeckung. Wenn Sie ein .NET-Shop sind, verfügt Visual Studio über integrierte Tools zum Erfassen der Codeabdeckung. Sie können auch einige benutzerdefinierte Werkzeuge rollen, wie dieser Artikel beschreibt.

Wenn Sie ein C++ - Shop sind, hat Intel einige Tools , die für Windows und Linux ausgeführt werden, obwohl ich sie nicht verwendet habe. Ich habe auch gehört, dass es das gcov-Tool für GCC gibt, aber ich weiß nichts darüber und kann Ihnen keinen Link geben.

Wie wir es verwenden - Codeabdeckung ist eines unserer Ausstiegskriterien für jeden Meilenstein. Wir haben tatsächlich drei Kennzahlen für die Codeabdeckung - die Abdeckung aus Komponententests (vom Entwicklungsteam), Szenarientests (vom Testteam) und die kombinierte Abdeckung.

Übrigens, während die Codeabdeckung eine gute Messgröße dafür ist, wie viel Sie testen, ist sie nicht unbedingt eine gute Messgröße dafür, wie gut Sie Ihr Produkt testen. Es gibt andere Metriken, die Sie zusammen mit der Codeabdeckung verwenden sollten, um die Qualität sicherzustellen.

217
Franci Penov

Die Codeabdeckung testet im Grunde genommen, wie viel Ihres Codes durch Tests abgedeckt wird. Wenn Sie also eine Codeabdeckung von 90% haben, bedeutet dies, dass 10% des Codes nicht durch Tests abgedeckt werden. Ich weiß, dass Sie vielleicht denken, dass 90% des Codes abgedeckt sind, aber Sie müssen aus einem anderen Blickwinkel schauen. Was hindert Sie daran, eine 100% ige Codeabdeckung zu erhalten?

Ein gutes Beispiel wird dies sein:

if(customer.IsOldCustomer()) 
{
}
else 
{
}

Im obigen Code gibt es nun zwei Pfade/Zweige. Wenn Sie immer die Verzweigung "JA" treffen, decken Sie den else-Teil nicht ab und er wird in den Ergebnissen der Codeabdeckung angezeigt. Das ist gut, weil Sie jetzt wissen, was nicht abgedeckt ist, und Sie können einen Test schreiben, um den anderen Teil abzudecken. Wenn es keine Codeabdeckung gab, sitzen Sie nur auf einer Zeitbombe, um zu explodieren.

NCover ist ein gutes Werkzeug zum Messen der Codeabdeckung.

165
azamsharp

Denken Sie daran, dass "100% Codeabdeckung" nicht bedeutet, dass alles vollständig getestet wird - während dies bedeutet, dass jede Codezeile getestet wird, bedeutet dies nicht, dass sie unter jeder (üblichen) Situation getestet werden.

Ich würde Code-Coverage verwenden, um Teile des Codes hervorzuheben, für die ich wahrscheinlich Tests schreiben sollte. Wenn beispielsweise das Code-Coverage-Tool myImportantFunction () während der Ausführung meiner aktuellen Komponententests nicht ausgeführt wird, sollten diese wahrscheinlich verbessert werden.

Grundsätzlich bedeutet 100% Codeabdeckung nicht, dass Ihr Code perfekt ist. Verwenden Sie es als Leitfaden, um umfassendere (Einheits-) Tests zu schreiben.

57
dbr

Ergänzung einiger Punkte zu vielen der vorherigen Antworten:

Codeabdeckung bedeutet, wie gut Ihr Testset Ihren Quellcode abdeckt. inwieweit wird der Quellcode von der Menge der Testfälle abgedeckt?.

Wie in den obigen Antworten erwähnt, gibt es verschiedene Abdeckungskriterien, wie Pfade, Bedingungen, Funktionen, Aussagen usw. Es müssen jedoch zusätzliche Kriterien abgedeckt werden

  1. Bedingungsabdeckung: Alle booleschen Ausdrücke müssen auf wahr und falsch ausgewertet werden.
  2. Entscheidungsabdeckung: Nicht nur boolesche Ausdrücke, die einmal auf wahr und falsch ausgewertet werden sollen, sondern alle nachfolgenden if-elseif-else-Körper.
  3. Loop Coverage: bedeutet, dass jede mögliche Schleife einmal, mehrmals und nullmal ausgeführt wurde. Wenn wir die Annahme eines maximalen Grenzwerts haben, dann testen Sie nach Möglichkeit die maximalen Grenzwerte und einen Wert mehr als die maximalen Grenzwerte.
  4. Einreise- und Ausreisedeckung: Prüfen Sie auf alle möglichen Anrufe und deren Rückgabewert.
  5. Parameterwertabdeckung (PVC). Um zu überprüfen, ob alle möglichen Werte für einen Parameter getestet wurden. Beispielsweise kann eine Zeichenfolge eine der folgenden sein: a) Null, b) Leerzeichen, c) Leerzeichen (Leerzeichen, Tabulatoren, neue Zeile), d) gültige Zeichenfolge, e) ungültige Zeichenfolge, f) Einzelbytezeichenfolge, g ) Doppelbyte-Zeichenfolge. Wenn nicht alle möglichen Parameterwerte getestet werden, kann dies zu einem Fehler führen. Wenn Sie nur eine dieser Optionen testen, kann dies zu einer 100% igen Codeabdeckung führen, da jede Zeile abgedeckt wird. Da jedoch nur eine von sieben Optionen getestet wird, bedeutet dies, dass der Parameterwert nur zu 14,2% abgedeckt wird.
  6. Vererbungsabdeckung: Im Fall einer objektorientierten Quelle sollte bei der Rückgabe eines abgeleiteten Objekts, auf das von der Basisklasse verwiesen wird, die Abdeckung getestet werden, um zu bewerten, ob ein Geschwisterobjekt zurückgegeben wird.

Hinweis: Bei der statischen Codeanalyse wird festgestellt, ob nicht erreichbarer Code oder hängender Code vorhanden ist, d. H. Code, der von keinem anderen Funktionsaufruf abgedeckt wird. Und auch andere statische Abdeckung. Selbst wenn die statische Codeanalyse meldet, dass 100% Code abgedeckt ist, werden keine Berichte zu Ihrem Testsatz angezeigt, wenn alle möglichen Codeabdeckungen getestet wurden.

47
Chand51

Die Codeabdeckung wurde in den vorherigen Antworten ausführlich erläutert. Das ist also eher eine Antwort auf den zweiten Teil der Frage.

Wir haben drei Tools verwendet, um die Codeabdeckung zu bestimmen.

  1. JTest - ein proprietäres Tool, das über JUnit erstellt wurde. (Es werden auch Komponententests generiert.)
  2. Cobertura - Ein Open-Source-Code-Coverage-Tool, das problemlos mit JUnit-Tests gekoppelt werden kann, um Berichte zu erstellen.
  3. Emma - eine andere - diese haben wir für einen etwas anderen Zweck als Unit-Tests verwendet. Es wurde verwendet, um Abdeckungsberichte zu generieren, wenn Endbenutzer auf die Webanwendung zugreifen. In Verbindung mit Web-Test-Tools (Beispiel: Canoo) können Sie sehr nützliche Abdeckungsberichte erhalten, aus denen hervorgeht, wie viel Code während der typischen Endbenutzerverwendung abgedeckt wird.

Wir nutzen diese Tools um

  • Überprüfen Sie, ob die Entwickler gute Komponententests geschrieben haben
  • Stellen Sie sicher, dass beim Black-Box-Test der gesamte Code durchlaufen wird
13
Vivek Kodira

Die Codeabdeckung ist lediglich ein Maß für den getesteten Code. Es gibt verschiedene Kriterien für die Abdeckung, die gemessen werden können. In der Regel sind es jedoch die verschiedenen Pfade, Bedingungen, Funktionen und Anweisungen innerhalb eines Programms, die die gesamte Abdeckung ausmachen. Die Codeabdeckungsmetrik ist nur ein Prozentsatz der Tests, die jedes dieser Abdeckungskriterien ausführen.

Was das Verfolgen der Testabdeckung von Einheiten in meinen Projekten angeht, verwende ich statische Code-Analysetools, um den Überblick zu behalten.

6
SaaS Developer

Für Perl gibt es das ausgezeichnete Devel :: Cover Modul, das ich regelmäßig für meine Module benutze.

Wenn der Build und die Installation von Module :: Build verwaltet werden, können Sie einfach ./Build testcover Ausführen, um eine nette HTML-Site zu erhalten, die Ihnen die Abdeckung pro Sub, Zeile und Bedingung mit netten Farben anzeigt, die es einfach machen, welchen Code zu sehen Weg wurde nicht zurückgelegt.

5
moritz

In den vorherigen Antworten wurde die Codeabdeckung gut erklärt. Ich füge nur einige Kenntnisse in Bezug auf Tools hinzu, wenn Sie auf den Plattformen iOS und OSX arbeiten. Xcode bietet die Möglichkeit, die Codeabdeckung zu testen und zu überwachen.

Referenz-Links:

https://developer.Apple.com/library/archive/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/07-code_coverage.html

https://medium.com/zendesk-engineering/code-coverage-and-xcode-6b2fb8756a51

Beide sind hilfreiche Links zum Erlernen und Erkunden der Codeabdeckung mit Xcode.

0
taha027