Code Abdeckung
Veröffentlicht auf 23. Februar 2012
Viele Testmanager stellen sich die Fragen "Wie viel muss ich testen?" und "Wann ist mein Code ausreichend getestet?". Um diese Fragen zu beantworten, kann man sich eine bestimmte Codeabdeckung oder auch Code Coverage als Ziel setzen. Alternativ geben auch viele Richtlinien und Standards Abdeckungsgrade vor. Ich möchte die wichtigsten Testverfahren kurz zusammenfassen.
Anweisungsabdeckung / Statement Coverage
Das Verhältnis von ausgeführten Anweisungen während des Tests, zu allen Anweisungen im Code.
Zweigabdeckung / Branch Coverage
Das Verhältnis von getesteten Zweigen, zu allen vorhandenen Zweigen in einem Kontrollflussgraph eines Moduls.
Entscheidungsabdeckung / Decision Coverage
Eine erweiterte Sicht der Zweigabdeckung. Statt Zweigen werden die Knoten im Kontrollflussgraph oder eben die boolschen Werte von Ausdrücken (Schleifen, Verzweigungen, ...) ausgewertet. Wird oft auch der Zweigabdeckung gleich gesetzt, verschiedene Ansätze [FAASVS] bewerten aber die Entscheidungsabdeckung höher. Ein Grund dafür ist, dass Entscheidungen auch außerhalb von Ausdrücken bereits getroffen und gespeichert werden können. Die Prüfung dieses speziellen Sachverhalts ist allerdings stark werkzeugabhängig.
Somit das Verhältnis von getroffenen Entscheidungen während des Tests, zu allen möglichen Entscheidungen während der Programmausführung.
Bedingungsabdeckung / Condition Coverage
Das Verhältnis von ausgewerteten atomaren Werten (Term, Bedingung, ...) innerhalb von Ausdrücken zu allen vorhandenen atomaren Werten in einem Modul.
Abdeckung aller Bedingungskombinationen / Multicondition Coverage
Das Verhältnis von durchlaufenen atomaren Bedingungen während des Tests, zu allen möglichen Kombinationen von atomaren Bedingungen innerhalb eines Ausdrucks in einem Modul.
Modified Condition / Decision Coverage (MC/DC)
Abdeckung aller Bedingungskombinationen erfordert einen enormen Aufwand, dieses Testverfahren versucht dies zu minimieren. Jeder atomare Wert innerhalb eines Ausdrucks soll dazu mindestens einmal positiv und negativ den Wert des kompletten Ausdrucks entscheidend beeinflussen.
Somit vielleicht das Verhältnis von Auswirkungen von bewerteten atomaren Werten auf den Gesamtausdruck, zu allen möglichen Auswirkungen von atomaren Werten innerhalb eines Moduls.
Pfadabdeckung / Path Coverage
Das Verhältnis der getesteten Pfade (Wege im Kontrollflussgraph), zu allen möglichen Pfaden in einem Modul.
Die Testabdeckungsgrößen C0 – C4 sind nicht einheitlich definiert, ich würde daher von der Verwendung abraten.
Wenn Sie trotzdem diese Größen verwenden wollen, erscheint mir folgende Einteilung am sinnvollsten.
C0 Statement Coverage
C1 Branch / Decision Coverage
C2 Path Coverage
C3 Condition / Multicondition Coverage, MC/DC
Weitere Testverfahren sind entsprechend einzuordnen.
Wikipedia:
http://de.wikipedia.org/wiki/Kontrollflussorientierte_Testverfahren
Artikel eines Toolherstellers:
http://www.bullseye.com/coverage.html
Codeabdeckungswerkzeuge:
http://en.wikipedia.org/wiki/Code_coverage#Software_tools
[FAAASVS] US Federal Aviation Administration
http://www.tc.faa.gov/its/worldpac/techrpt/ar0654.pdf