WhiteBox Tests

ChristianK
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 127
Registriert: 13. Sep 2007 01:15
Wohnort: Darmstadt
Kontaktdaten:

WhiteBox Tests

Beitrag von ChristianK »

Beim Statement Coverage Test sollen alle Anweisungen einmal durchlaufen werden. Was genau ist eine Anweisung in dem Fall? Ist ein return a; oder eine Schleife/if Bedingung/Funktionsaufruf eine Anweisung?

Und ist es richtig, dass PathCoverage impliziert BranchCoverage impliziert Statement Coverage?

Benutzeravatar
bruse
Kernelcompilierer
Kernelcompilierer
Beiträge: 412
Registriert: 2. Aug 2006 22:42

Re: WhiteBox Tests

Beitrag von bruse »

Eine Anweisung ist eher sowas wie "return a". Eine Schleife ist definitiv nicht nur eine Anweisung, das geht aber aus den Folien auch hervor.

Die Implikationen stimmen.
Un hombre de frente a una ventana
Súper lúcida la mirada
Recorre el paisaje y no,
no es su interior, es luna.

Steven
Kernelcompilierer
Kernelcompilierer
Beiträge: 425
Registriert: 2. Sep 2008 10:00
Wohnort: Frankfurt am Main

Re: WhiteBox Tests

Beitrag von Steven »

Wobei du bei einer for-Schleife auch die Zählanweisung als Anweisung betrachten musst, d.h. auch eine leere Schleife muss mindestens einmal durchlaufen werden:
for (int i = 0; i < k; i++)
{
// tue nichts
}
Hier muss also k > 0 gelten, sonst wird i++ niemals ausgeführt.

atchem
Neuling
Neuling
Beiträge: 3
Registriert: 23. Sep 2007 10:19

Re: WhiteBox Tests

Beitrag von atchem »

ich hätte auch noch eine frage bzgl white box tests.

auf der letzten folie im foliensatz 13 sind testfälle für die branch coverage angegeben.

ist das die minimale anzahl an testfällen um 100% branch coverage zu erreichen?

branch coverage sieht doch zusammengesetzte bedingungen als eine bedingung. (true oder false). damit könnte man doch alle zweige mit 2 testfällen abdecken und nicht mit 4? also z.b einen testfall wo beide bedingungen true sind und dann einen wo beide false sind?!

xAx
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 157
Registriert: 6. Mär 2008 17:20

Re: WhiteBox Tests

Beitrag von xAx »

ja, das ist afaik korrekt.
Nichts ist wie es scheint!
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Zuletzt geändert von xAx am 14. Mär 2009 16:17, insgesamt 99-mal geändert.

ChristianK
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 127
Registriert: 13. Sep 2007 01:15
Wohnort: Darmstadt
Kontaktdaten:

Re: WhiteBox Tests

Beitrag von ChristianK »

Und was ist mit dem Path Coverage? Da bräuchte man dann doch den letzten Test auch nicht oder?

Benutzeravatar
Tigger
Kernelcompilierer
Kernelcompilierer
Beiträge: 404
Registriert: 26. Okt 2007 17:35
Wohnort: Hofheim
Kontaktdaten:

Re: WhiteBox Tests

Beitrag von Tigger »

Wenn du nach den Pfaden im Diagramm gehst, brauchst du den schon. Das ist der Fall, indem Der Pfad einfach senkrecht nach unten durchläuft. Nach dem Diagramm ists halt auch ein gesonderter Pfad, wenn der erste Teil einer Bedingung falsch ist und erst der 2. wahr.

Steven
Kernelcompilierer
Kernelcompilierer
Beiträge: 425
Registriert: 2. Sep 2008 10:00
Wohnort: Frankfurt am Main

Re: WhiteBox Tests

Beitrag von Steven »

Ich habe mir das eben mal aufgezeichnet. Wenn ich keinen Fehler gemacht habe, brauchst du für Path Coverage alle angegebenen fünf Tests, da du jeden möglichen Pfad durch den gesamten Kontrollflussgraphen durchlaufen musst. Der fünfte Test ist z.B. der einzige, der oben "rechts abbiegt", also a > 1, b = 0 jeweils wahr und dann "gerade nach unten durchläuft", also a = 2, x > 1 jeweils falsch.
Für Path Coverage reicht es nicht, jede Kante einmal getestet zu haben, du brauchst wirklich alle Pfade.

// Edit: Die vier Tests für die Branch Coverage sind aber wirklich seltsam, das sieht eher nach C3, also mehrfacher Bedingungsüberdeckung aus?!
// Korrektur: C3, nicht C2, das wäre nur einfache Bedingungsüberdeckung
Zuletzt geändert von Steven am 15. Mär 2009 23:33, insgesamt 1-mal geändert.

atchem
Neuling
Neuling
Beiträge: 3
Registriert: 23. Sep 2007 10:19

Re: WhiteBox Tests

Beitrag von atchem »

Ich sehe ebenfalls nicht warum es 5 Testfälle sein sollen. Worin liegt der Unterschied zwischen dem zweiten und dritten?
(Alles ausgehend von der Annahme, dass auch hier zusammengesetzte Bedingungen als eine einzige Bedingung betrachtet werden)

Steven
Kernelcompilierer
Kernelcompilierer
Beiträge: 425
Registriert: 2. Sep 2008 10:00
Wohnort: Frankfurt am Main

Re: WhiteBox Tests

Beitrag von Steven »

Hm, ich bin jetzt davon ausgegangen, dass die Pfadüberdeckung (C7) stärker ist als die mehrfache Bedingungsüberdeckung (C3) und somit alle Kanten auf der Folie betrachtet werden müssen. Genau genommen führt die "Short Evaluation" Regel der meisten Programmiersprachen ja auch zu echt unterschiedlichen Pfaden. Wenn du folgenden Code nimmst:
if (a > 3 || testeWas ()) { ... }
dann wird die boolesche Funktion "testeWas()" nur ausgeführt, wenn a > 3 nicht ohnehin schon gilt. Jetzt könnte "testeWas()" aber theoretisch beliebigen Unfug anrichten, den du bei atomarer Betrachtung der Bedingung unter Umständen gar nicht findest. Das ist aber nur meine Meinung, wenn jemand etwas Nachweisbares hat, wüsste ich das auch gerne.

ChristianK
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 127
Registriert: 13. Sep 2007 01:15
Wohnort: Darmstadt
Kontaktdaten:

Re: WhiteBox Tests

Beitrag von ChristianK »

Also ich glaube ja eigentlich, dass man bei beiden mindestens die Anzahl an Tests braucht, die da steht...
Beim Branch Coverage braucht man die 4 Fälle, um sozusagen alle Pfeile anzumalen, beim Path Coverage alle 5 um ebenfalls alle Pfeile anzumalen und außerdem alle Kombinationen der Statements abzugehen.
(Dann werden zusammengesetzte if-Anweisungen eben nicht als eine betrachtet)

xAx
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 157
Registriert: 6. Mär 2008 17:20

Re: WhiteBox Tests

Beitrag von xAx »

die path coverage scheint mir gar nicht vollständig zu sein: der pfad, der bei a=3, b=1, x=1 abgelaufen wird, wird von der angegebenen testfallmenge nicht abgedeckt.
Nichts ist wie es scheint!
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Zuletzt geändert von xAx am 14. Mär 2009 16:17, insgesamt 99-mal geändert.

Benutzeravatar
itportal2
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 236
Registriert: 25. Jan 2008 15:34
Wohnort: Darmstadt

Re: WhiteBox Tests

Beitrag von itportal2 »

ChristianK hat geschrieben:Beim Branch Coverage braucht man die 4 Fälle, um sozusagen alle Pfeile anzumalen
Es geht auch mit 3 - { {a = 2, b = 0, x = 1}, {a = 3, b = 1, x = 2}, {a = 1, x = 1, b = 1} }

atchem
Neuling
Neuling
Beiträge: 3
Registriert: 23. Sep 2007 10:19

Re: WhiteBox Tests

Beitrag von atchem »

Richtig, selbst wenn man den Graphen aus den Folien nimmt, reichen 3 Testfälle.

Ich frage mich jedoch immer noch warum man den Graph als Grundlage nehmen sollte. Man findet überall, dass bei der Branch Coverage die zusammengesetzten Bedingungen als eine betrachtet werden. (In den alten EiSE Folien steht das z.B. explizit)

Richtig finde ich das so: (Folie 37/38, gleiches Programm)

http://www.ifi.uzh.ch/rerg/fileadmin/do ... Testen.pdf

Benutzeravatar
itportal2
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 236
Registriert: 25. Jan 2008 15:34
Wohnort: Darmstadt

Re: WhiteBox Tests

Beitrag von itportal2 »

Naja, wenn du die Bedingungen nicht als zusammengesetzt betrachtest, ist es mehr detailiert. Stell dir folgedes Beispiel vor.

if( a && b ) { .. do sth .. }

Testcase 1: a = true, b = true
Testcase 2: a = false - wegen short cut Regel wird b nicht betractet

Also, wir überprüfen nicht wie sich b verhält, wenn b false ist/zurückliefert.

Antworten

Zurück zu „Archiv“