Testverfahren

b00m3r
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 10. Okt 2005 11:02

Testverfahren

Beitrag von b00m3r »

Ich bin gerade dabei die Testverfahren alle zu wiederholen.


Vielleicht können wir zusammen versuchen, die richtige Lösung zu entwickeln.

Momentan sehe ich die Testfälle so:

Statement Coverage:
alle Statements müssen einmal abgeprüft werden
auch als Basic Block Coverage bekannt (alle Statements einmal ausführen von oben nach unten im code)
Branche Coverage:
alle Pfade eines Knotens (Statements) müssen einmal getestet werden. Heißt, falls zwei if - Abfragen exisiteren, sollten 4 Testfälle exisiteren
Simple Condition Coverage:
Alle Möglichkeiten für eine Conditionrichtung (true oder false) testen.
Multi - Condition Coverage:
Simple Condition Coverage jedoch beidseitig -> Alle möglichen Ausprägungen für true und false mit dem Test abdecken.


Wo seht ihr falsches, was ist stattdessen richtig.

Benutzeravatar
JanM
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 157
Registriert: 24. Aug 2010 10:58

Re: Testverfahren

Beitrag von JanM »

das mit dem branchcoverage seh ich etwas anders. ich brauch für 2 ifs auch nur 2 testcases, da ja jeder testcase einen pfad von dem if abdecken kann

b00m3r
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 10. Okt 2005 11:02

Re: Testverfahren

Beitrag von b00m3r »

Mir ist das Basic Block noch nicht ganz klar. Insbesondere die Aussage wann ist 100 % BBC erreicht?
Müsste im Control-flow-Graph nicht if(v<=100) stehen, damit das Sinn macht?
Wäre toll, wenn mir jemand das Prinzip mal an Folie 42 in Foliensatz 9 erklären könnte.

Gleiches gilt auch für Simple Condition Coverage. So wie ich das SCC verstanden habe muss immer nur ein Zweig also entweder true oder false ausgewertet werden? Wann istin diesem Fall 100 % Coverage erreicht? Wenn man einen Testcase schreibt sind ja immer 100% erreicht. Ihr merkt mir ist das noch nicht ganz klar.



Danke :)

Benutzeravatar
JanM
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 157
Registriert: 24. Aug 2010 10:58

Re: Testverfahren

Beitrag von JanM »

Zu BBC:
ich denke auch, dass es in dem Block v<=100 heißen müsste, sonst würde es ja nicht mit dem code daneben überenstimmen.
100%BBC sind erreicht, wenn du jeden Basisblock mindestens einmal besucht hast. In Einführung in Trusted Systems wurde es auch beschrieben als "jede Zeile einmal ausführen". Auf dem Schaubild auf Folie 42 sind ja die Basisblöcke gekennzeichnet. Wenn du mit deinen Testfällen jeden Block mindestens einmal erreicht hast, dann hast du 100% BBC erreicht.

Zu SCC:
jede atomare Bedingung muss hierbei einmal zu true und einmal zu false auswerten. Heißt wenn du etwas wie (a&&b || c&&a) hast, dann muss einmal a&&b zu true auswerten (c&&a wir aber nicht erreicht), dann wertest du einmal a&&b zu false und c&&a zu true aus und dann brauchst du noch einen fall, wo beide zu false auswerten, damit auch c&&a einmal zu false ausgewertet sind. Wenn alle solchen atomaren Bedingungen zu einmal zu true und einmal zu false ausgewertet wurden hast du 100% SCC erreicht.
Mit den Zweigen hat SCC nur indirekt zu tun. Das was mit den Zweigen zu tun hat war Branch Coverage.

b00m3r
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 10. Okt 2005 11:02

Re: Testverfahren

Beitrag von b00m3r »

Ich spiel das gerade mal an dem Beispiel von Foliensatz 9 Seite 44 durch.
Heißt für den Fall (a&&b) muss A= true und B= true sein, damit ich in den true Zweig komme. Da kein negativer Zweig existiert, endet das BBC an dieser Stelle und man hat 100 % BBC erreicht. Ist mein Verständnis für BBC damit richtig?

Im Fall von SSC muss "jede atomare Bedingung" zu true und false ausgewertet werden. Dazu muss ich noch etwas weiter bohren.

bei (a&&b)||(c&&b)||(b&&a)
-> a=true; c=true b= ist nicht mehr relevant, da die Belegung von b nichts mehr am Ergebnis des Statements ändert
-> a=false; c=false; b=false (wobei b ebenfalls nichts mehr am Ergebnis ändern kann jedoch ist mit diesem Zweig jede atomare Bedingung zu false ausgewertet. Wieso hat man dann im ersten Fall nicht auch einfach a=b=c=true gemacht ?!)
Nun fehlt nur noch einmal b = true, damit es überhaupt berücksichtigt wird muss nun a oder c = true sein, wobei das jeweils andere false sein muss.
->a= false; c=true; b=true
->a=true; c=false; b=true die beiden Statements erfüllen den selben Zweck.
Verstehe ich das richtig?

Gruß,
Mark

Benutzeravatar
JanM
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 157
Registriert: 24. Aug 2010 10:58

Re: Testverfahren

Beitrag von JanM »

zu BBC: was meinst du mit "da kein negativer Zweig existiert"? wenn du damit meinst, dass es keine blöcke gibt, die man nur erreichen kann, wenn das zu false auswertet ist es richtig.

zu SCC:
dein erster Punkt stimmt schon nicht, da b sehr wohl relevanz ist, da zuerst a&&b ausgewertet wird. daher nehme ich an du hast dich einfach bei dem statement verschrieben und meintest (a&&c)|| (c&&b)||(b&&a). damit würde es auch dem beispiel auf folie 40 entsprechen.
man kann zwar in dem ersten Fall b=true setzen. Da es aber nie erreicht wird, wird es auch nicht getestet und das will man ja nicht. Man will ja gerade testen was passiert wenn b=true ist.
Daher benötigt man einen Fall wo man zu c&&b oder b&&a kommt. und das kannst du mit den von dir angegebenen tests.

Zu meinem Beitrag von vorher muss ich noch sagen, dass es da etwas missverständlich erscheint,bzw ich einen denkfehler hatte: natürlich muss ich nicht a&&c zu true auswerten, sonder a und c, da dass ja die simple conditions sind.

b00m3r
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 10. Okt 2005 11:02

Re: Testverfahren

Beitrag von b00m3r »

Hi Jan,

zu BBC das ist völlig richtig.

zu SCC: (ja meinte damit das Statement aus den Folien)

Mit nicht mehr relevant meinte ich, dass egal wie b belegt wird, es keine Auswirkungen auf die Auswertung des Statements hat.
Kann ich dein Statement dahingehend interpretieren, dass wenn ich mir zum Ziel setzte ein atomares Statement mit true zu belegen, dass komplette Statement true seien muss (bzw. atomares Statement = false; komplettes Statement = false)

Benutzeravatar
JanM
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 157
Registriert: 24. Aug 2010 10:58

Re: Testverfahren

Beitrag von JanM »

Nein kannst du nicht. Beim SCC geht es nur um die atomaren boolschen Bedingungen (eine boolsche Variable, oder 3 < x,....) Diese alle sollen einmal zu true und einmal zu false ausgewertet werden. wenn du zusätzlich auch noch das ganze statement einmal zu true und false auswerten willst machst du zu viel. das geht dann in die richtung von condition-coverage oder multi-condition-coverage (folie 35 foliensatz 9)

b00m3r
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 10. Okt 2005 11:02

Re: Testverfahren

Beitrag von b00m3r »

OMG ich sehe gerade das ich Simple Condition Coverage mit (Simple) Condition Coverage vertauscht habe.
SCC ist so wie du es gesagt hast quasi alle atomaren statements einmal zu true und false auswerten
BEIM CC ist es so wie ich gesagt habe, da muss das komplette Statement dann zusätzlich noch betrachtet werden.

Benutzeravatar
JanM
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 157
Registriert: 24. Aug 2010 10:58

Re: Testverfahren

Beitrag von JanM »

ok dann haben wir anscheinend die ganze zeit aneinander vorbei geredet... ;)

cpunkt
Mausschubser
Mausschubser
Beiträge: 56
Registriert: 12. Okt 2009 20:29

Re: Testverfahren

Beitrag von cpunkt »

Wie kommst Du darauf, dass Simple Condition Coverage und (Simple) Condition Coverage unterschiedliche Dinge sind?
Soweit ich das verstanden habe soll die Klammer nur zu verstehen geben, dass man Simple Condition Coverage manchmal auch mit Condition Coverage bezeichnet.
Auf Folie 35 im Satz 9 ist jedenfalls nur einmal Simple Condition Coverage erwähnt....
Ich glaube auf den Folien 39 und 40 geht es eher um die unterschiedliche Auswertung von &, | und &&, ||, oder?

edit: ah, jez habe ich auch das kleingedruckte gelesen...."Condition Coverage = Simple Condition Coverage + Branch Coverage", sorry

Benutzeravatar
prOud
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 31. Okt 2007 16:29
Kontaktdaten:

Re: Testverfahren

Beitrag von prOud »

nach durchlesen dieses Threads bin ich mir jetzt immer noch nicht sicher was ein Basic Block ist?
Könnte jemand mal eine genaue Definition dazu abgeben, wie ein Basic Block zu identifizieren ist?

Bisher sieht es für mich nämlich so aus als ob Statement Coverage und Basic Block Coverage deckungsgleich sind.

b00m3r
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 182
Registriert: 10. Okt 2005 11:02

Re: Testverfahren

Beitrag von b00m3r »

Statement Coverage -> jedes Statement muss einmal erreicht werden-> sicherstellen, dass es keinen toten Code gibt

Die Folien sind da auch etwas schwammig sie sagen zu Basic Block -> Sometimes “statement coverage” is used as a synonym for “basic block coverage”
Sind sie jetzt identisch oder nicht ?!

Benutzeravatar
Sepp
Mausschubser
Mausschubser
Beiträge: 75
Registriert: 29. Sep 2008 15:20
Kontaktdaten:

Re: Testverfahren

Beitrag von Sepp »

Hatten heute auch eine kleine Diskussion bezüglich Statement und Basic Block Coverage.
Wir haben uns dann darauf geeinigt, dass sie prinzipiell das gleiche aussagen, aber in manchen Spezialfällen unterschiedlich wirken. (Würde zur Aussage "Sometimes “statement coverage” is used as a synonym for “basic block coverage”" passen).

Als Beispiel sei einfach ne Funktion foobar gegeben, die wie folgt aussieht.

Code: Alles auswählen

public int foobar() {
  int a=0;
  a++;
  return a;
  a=1337;
}
So, der Sinn der Funktion ist Wurst, aber möchte man sie nun testen, kommt man niemals auf 100% Statement Coverage, da a=1337 niemals ausgeführt werden würde (return macht immer Schluss). Bei Basic Block Coverage könnte man die komplette Methode als Block (wenn man sehr grob ist) sehen. Testet man also auf Basic Block Coverage, dann hätte man die 100% erreicht, auch wenn a=1337 auch dort nicht erreicht wird.

Keine Ahnung ob man es sich so leicht machen darf... Kann durchaus auch falsch sein. ;-)
Zuletzt geändert von Sepp am 28. Feb 2011 19:48, insgesamt 1-mal geändert.

Benutzeravatar
JanM
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 157
Registriert: 24. Aug 2010 10:58

Re: Testverfahren

Beitrag von JanM »

also ich finde es ziemlich sinnlos die methode, die du testen willst als ganzen block zu sehen.
Deshalb denke ich nicht, dass du dann 100% block coverage erreicht hast.
wäre aber auch über ein offizielles statement froh...

Antworten

Zurück zu „Archiv“