Sie erwähnen Ihr Testwerkzeug nicht. Viele haben "Kombinations" -Funktionen, mit denen Sie die Ergebnisse mehrerer Läufe oder Suiten zusammenfassen können. Wenn Sie eine aggregierte Abdeckungsmetrik wünschen, untersuchen Sie die Kombinationsfunktion in Ihrem Abdeckungstool.
Können wir jetzt über den Elefanten im Raum sprechen?
Da ist kein Löffel. Und es gibt keinen "Prozentsatz der Gesamtabdeckung". Zumindest kein einfacher.
Der Abdeckungsprozentsatz ist eine leicht verständliche Metrik, die zum besseren Verständnis des Umfangs, der Tiefe und des Bereichs von Testsuiten dargestellt wird. Aber wie bei jedem einfachen Benchmark ist es sehr einfach, sich als magischer Talisman des "vollständigen Testens" auf diesen Wert zu fixieren .
Angenommen, Sie haben den Ruhm einer "100% igen Testabdeckung" erreicht. Yay! Aber was heißt das? 100% der Codezeilen werden getestet, oder? Was ist dann mit dieser Zeile?
launch_missile = launch_authorized and launch_cmd_given else previous_launch_status
Das "Abdecken" dieser Linie bedeutet etwas - aber nicht viel, da es eine Vielzahl von Bedingungen gibt, die True
oder False
mit einiger Wahrscheinlichkeit vorliegen , aber es ist unwahrscheinlich, dass Sie alle Kombinationen dieser Bedingungen getestet haben. Selbst wenn diese Linie ein Dutzend Mal abgedeckt wird, wenn eine der Bedingungen relativ ungewöhnlich ist, haben Sie nicht annähernd alle tatsächlichen Ergebnisse getestet, die in der Praxis auftreten könnten. Um dies klarer zu machen, ein synthetischeres Beispiel:
engage_laser = (laser_armed and safety_disengaged) or random.random() < 0.0000003
Wie oft müssten Sie diese Linie abdecken, um sie wirklich ausführlich zu testen? Wie oft müssten Sie es abdecken, um es in Kombination mit allen anderen Variablen im Programm (mit ihren eigenen, möglicherweise ähnlich seltenen) Wahrscheinlichkeiten zu testen?
Ich sage nicht, dass Abdeckungsmetriken nutzlos sind. Sie sind wirklich großartig . Sie konzentrieren sich auf eines der Hauptprobleme: Wie umfassend wird mein Softwaresystem getestet? Sie helfen dabei, von "Wir haben einige Tests" zu "Wir haben gründlich getestet" zu wechseln.
Während Sie jedoch an "kombinierten Bewertungen" arbeiten, ist die Realität, dass Ihre Bewertung in der Regel eher für "Anweisungsabdeckung" als für "Bedingung", "Prädikat" oder "Pfadabdeckung" gilt . Unabhängig von der Anzahl Ihrer aggregierten Bewertungen ist es unwahrscheinlich, dass Sie ein genaues Bild davon erhalten, wie viele potenzielle Status und Statuskombinationen Ihres Programms getestet werden. Während Sie daran arbeiten, Ihren Abdeckungsprozentsatz zu erhöhen, sollten Sie auch Ihre Prädikatabdeckung messen. Sie erhalten eine realistischere - und fast immer ernüchternde - Sicht auf die Testausdehnung.