Frage

Was ist Codeabdeckung und wie messen SIE sie?

Diese Frage wurde mir bezüglich unserer automatisierten Testcodeabdeckung gestellt.Es scheint, dass es sich außerhalb automatisierter Werkzeuge eher um Kunst als um Wissenschaft handelt.Gibt es Beispiele aus der Praxis für die Verwendung der Codeabdeckung?

War es hilfreich?

Lösung

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

Code-Coverage wird durch die Verwendung eines speziellen Werkzeugs Instrument die Binärdateien gesammelt Tracing Anrufe hinzufügen und eine ganze Reihe von automatisierten Tests gegen die instrumentierte Produkt führen. Ein gutes Werkzeug wird Ihnen nicht nur den Prozentsatz des Codes, der ausgeführt wird, sondern auch ermöglicht es Ihnen, in die Daten zu bohren und sehen genau, welche Codezeilen während eines bestimmten Tests ausgeführt wurden.

Unser Team nutzt Magellan - ein haus Satz von Code-Coverage-Tools . Wenn Sie ein .NET-Shop sind, hat Visual Studio Tools integriert Codeabdeckung zu sammeln. Sie können auch einige benutzerdefinierte Tools rollen, wie diesem Artikel beschreibt.

Wenn Sie ein C ++ Geschäft sind, hat Intel einige Tools diesem Lauf für Windows und Linux, obwohl ich sie nicht genutzt haben. Ich habe auch da ist das gcov Werkzeug für GCC gehört, aber ich weiß nichts davon und kann keine Verbindung geben.

Darüber, wie wir sie verwenden - Code ist Abdeckung eines unserer Ausgangskriterien für jeden Meilenstein. Wir haben tatsächlich drei Code-Coverage-Metriken - Abdeckung von Unit-Tests (aus dem Entwicklungsteam), Szenario-Tests (vom Testteam) und kombinierte Abdeckung

.

BTW, während Codeabdeckung eine gute Metrik, wie viele Tests ist, dass Sie tun, ist es nicht unbedingt eine gute Metrik, wie gut Sie Ihr Produkt testen. Es gibt auch andere Metriken Sie mit Codeabdeckung verwenden zusammen sollte die Qualität zu gewährleisten.

Andere Tipps

Code-Coverage-Tests im Grunde, dass, wie viel von dem Code unter Tests abgedeckt. Also, wenn Sie 90% Codeabdeckung haben, als es bedeutet, dass es 10% des Code, der nicht unter Tests abgedeckt ist. Ich weiß, Sie denken vielleicht, dass 90% des Codes abgedeckt ist, aber Sie müssen aus einem anderen Blickwinkel zu betrachten. Was hindert Sie daran 100% Code Coverage zu bekommen?

Ein gutes Beispiel hierfür wird folgendermaßen aus:

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

Nun, in dem obigen Code gibt es zwei Wege / branches. Wenn Sie immer den Zweig „JA“ schlagen dann bedecken Sie nicht den anderen Teil, und es wird in den Code Coverage Ergebnisse angezeigt. Das ist gut, denn jetzt, dass Sie wissen, was nicht abgedeckt ist und Sie einen Test schreiben, können die sonst Teil abzudecken. Wenn es keine Code-Coverage war dann sitzen Sie gerade auf einer Zeitbombe explodiert.

NCover ist ein gutes Werkzeug Codeabdeckung zu messen.

Denken Sie daran, „100% Code-Coverage“, die nicht alles bedeuten, ist komplett getestet - während es jede Codezeile bedeutet, geprüft wird, bedeutet es nicht, sie unter allen (häufig) Situation getestet werden ..

würde ich Code-Coverage verwendet Bit-Code zu markieren, die ich wahrscheinlich für Tests schreiben soll. Zum Beispiel, wenn alles, was Code-Coverage-Tool zeigt myImportantFunction (), während nicht ausgeführt wird meine aktuellen Komponententests ausführen, sollten sie wahrscheinlich verbessert werden.

Im Grunde genommen 100% Codeabdeckung bedeutet nicht, Ihr Code perfekt ist. Verwenden Sie es als Leitfaden umfassende (fonds-) Tests zu schreiben.

Ergänzend zu vielen der vorherigen Antworten einige Punkte:

Codeabdeckung bedeutet, wie gut Ihr Testsatz Ihren Quellcode abdeckt.d.h.Inwieweit wird der Quellcode durch die Testfälle abgedeckt?

Wie in den obigen Antworten erwähnt, gibt es verschiedene Abdeckungskriterien wie Pfade, Bedingungen, Funktionen, Anweisungen usw.Es sind aber noch weitere Kriterien abzudecken

  1. Zustandsabdeckung:Alle booleschen Ausdrücke werden auf wahr und falsch ausgewertet.
  2. Entscheidungsabdeckung:Nicht nur boolesche Ausdrücke, die einmal auf wahr und falsch ausgewertet werden, sondern alle nachfolgenden if-elseif-else-Körper abdecken.
  3. Schleifenabdeckung:Das heißt, wurde jede mögliche Schleife einmal, mehr als einmal und null Mal ausgeführt?Wenn wir außerdem Annahmen über die maximale Grenze haben, testen Sie, wenn möglich, die maximalen Grenzzeiten und eine Zeitspanne mehr als die maximalen Grenzzeiten.
  4. Ein- und Ausreiseschutz:Testen Sie alle möglichen Aufrufe und deren Rückgabewert.
  5. Parameterwertabdeckung (PVC).Um zu überprüfen, ob alle möglichen Werte für einen Parameter getestet werden.Beispielsweise könnte eine Zeichenfolge wie folgt aussehen:a) null, b) leer, c) Leerzeichen (Leerzeichen, Tabulatoren, neue Zeile), d) gültige Zeichenfolge, e) ungültige Zeichenfolge, f) Einzelbyte-Zeichenfolge, g) Doppelbyte-Zeichenfolge.Wenn nicht jeder mögliche Parameterwert getestet wird, kann es zu einem Fehler kommen.Das Testen nur einer dieser Optionen könnte zu einer Codeabdeckung von 100 % führen, da jede Zeile abgedeckt wird. Da jedoch nur eine von sieben Optionen getestet wird, bedeutet dies nur eine Abdeckung des Parameterwerts von 14,2 %.
  6. Erbschaftsschutz:Im Falle einer objektorientierten Quelle sollte bei der Rückgabe eines abgeleiteten Objekts, auf das von der Basisklasse verwiesen wird, die auszuwertende Abdeckung getestet werden, wenn ein Geschwisterobjekt zurückgegeben wird.

Notiz:Durch die statische Codeanalyse wird festgestellt, ob unerreichbarer 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 % des Codes abgedeckt sind, liefert sie keine Berichte über Ihren Testsatz, wenn die gesamte mögliche Codeabdeckung getestet wird.

Code-Coverage ist gut in den vorangegangenen Antworten erklärt. Das ist also eher eine Antwort auf den zweiten Teil der Frage.

Wir verwendet haben drei Tools Codeabdeckung zu bestimmen.

  1. jtest - ein proprietäres Tool über JUnit gebaut. (Es erzeugt Unit-Tests als auch.)
  2. Cobertura - ein Open-Source-Code-Coverage-Tool, das leicht mit JUnit-Tests gekoppelt werden kann, um Berichte zu erstellen.
  3. Emma - andere - das, was wir für einen etwas anderen Zweck als Unit-Tests verwendet haben. Es wurde verwendet, um Berichterstattung Berichte zu erzeugen, wenn die Web-Anwendung, die von Endbenutzern zugegriffen wird. Dies in Verbindung mit Web-Test-Tools (Beispiel: Canoo). Sie können sehr nützlich Berichterstattung Berichte geben, die Ihnen sagen, wie viel Code wird während der typischen Anwender Nutzung abgedeckt

Wir verwenden diese Tools

  • Überprüfen, die Entwickler gute Unit-Tests geschrieben haben
  • Stellen Sie sicher, dass der gesamte Code während der Black-Box-Test
  • durchlaufen wird

Code-Coverage ist einfach ein Maß für den Code, der getestet wird. Es gibt eine Vielzahl von Abdeckungskriterien, die gemessen werden können, aber in der Regel ist es die verschiedenen Wege, die Bedingungen, Funktionen und Anweisungen in einem Programm, die Make-up die gesamte Abdeckung. Die Code-Coverage-Metrik ist nur ein Prozentsatz der Tests, die jeder dieser Deckungskriterien auszuführen.

Was, wie ich mich über meine Projekte Einheit Testabdeckung Tracking, verwende ich statische Code-Analyse-Tools, um zu verfolgen.

Für Perl gibt es die ausgezeichnete Devel :: Abdeckung Modul, das ich auf regelmäßig meine Module.

Wenn die Erstellung und Installation von Modul verwaltet :: Bauen Sie einfach ./Build testcover laufen können eine schöne HTML-Seite zu bekommen, dass Sie die Abdeckung pro Unter, Linie und Zustand sagt, mit schönen Farben machen es einfach, zu sehen, welchen Codepfad hat nicht abgedeckt.

In den vorangegangenen Antworten Code-Coverage wurde gut erklärt. Ich bin nur etwas Wissen Hinzufügen zu Werkzeugen aus, wenn Ihr auf iOS und OSX Plattformen arbeiten, Xcode bietet die Möglichkeit zu testen und Code-Coverage zu überwachen.

Referenz Links:

https: // Entwickler .apple.com / Bibliothek / Archiv / Dokumentation / DeveloperTools / Conceptual / testing_with_xcode / Kapitel / 07-code_coverage.html

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

Sowohl

sind hilfreiche Links für das Lernen und die Erkundung Codeabdeckung mit Xcode.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top