home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Code Coverage

Code Coverage bezeichnet den Abdeckungsgrad von Testmethoden. Man unterscheidet

  • Anweisungsabdeckung (statement coverage): Die Anzahl der durchlaufenen Anweisungen in Prozent
  • Zweig- oder Kantenabdeckung (branch coverage) ist die Anzahl der durchlaufenen Zweige/Kanten in Prozent. Diese Bedingung ist stärker als die Anweisungsabdeckung
  • Die einfache Bedingungsabdeckung berechnet sich als die Anzahl der atomaren Teilbedingungen, die im Test die logischen Werte wahr und falsch annehmen in Prozent der existierenden atomaren Teilbedingungen. Da diese Bedingung nicht verlangt, dass die Gesamtbedingung die logischen Werte wahr und falsch annimmt, ist sie schwächer als die Mehrfachbedingungsabdeckung
  • Hingegen bezeichnet die Mehrfachbedingungsabdeckung (multi condition coverage) die Anzahl aller Kombinationen aller Teilbedingungen
  • Unter Pfadabdeckung versteht man die Anzahl (in Prozent) aller möglichen Abläufe durch einen Grafen (beispielsweise all möglichen Zahlen für Schleifenzähler). Diese Anzahl ist meist untestbar hoch

Beispiel

Der Programmgraph besteht aus 8 Anweisungen und 10 Kanten. Der zugehörige Quellcode könnte auszugsweise wie folgt aussehen:

 

public static void main (String[] arg){
String name = args[0]; //1
for (int i = 1; i < 5; i++) { //2
if (i < 3 || name.equals("Hi")) { //3
...
}
}
System.out.println("Fertig"); //10
}

 

Eine vollständige (100 prozentige) Anweisungsabdeckung könnte über die Zweige <1,2,3,5,7,9,2,4,8,10> erreicht werden. Dafür müsste der Zweig 6 nicht durchlaufen werden.

Eine vollständige Zweigabdeckung wäre durch den Durchlauf durch die Zweige/Kanten <1,2,3,5,7,9,2,3,6,8,9,2,4,8,10> gegeben.

Betrachten wir die folgende Zeile des Programms

 

if (i < 3 || name.equals("Hi"))

 

Eine einfache Bedingungsabdeckung wäre zu erreichen durch die Kombinationen für die Werte für i und für name:

     

  • i = 2 (=> wahr), name = "Nop" (=> falsch)
  • i = 4 (=> falsch), name = "Hi" (=> wahr)

Dann hätte jeder der beiden atomaren Bedingungen einmal den Wert wahr und einmal den Wert falsch angenommen (nicht jedoch die Gesamtbedingung, die beidesmal den Wert falsch hätte).

Für die Mehrfachbedingungsabdeckung müssten alle Kombinationen für die beiden Teilbedingungen getestet werden. Dies könnte erreicht werden durch

     

  • i = 2 (=> wahr), name = "Nop" (=> falsch)
  • i = 4 (=> falsch), name = "Hi" (=> wahr)
  • i = 2 (=> wahr), name = "Hi" (=> wahr)
  • i = 4 (=> falsch), name = "Nop" (=> falsch)