Frage zur Korrektur von Übung 7

Moderator: SE - Wartung und Qualitätssicherung

MuldeR
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 131
Registriert: 18. Okt 2005 16:14
Wohnort: (d)armstadt
Kontaktdaten:

Frage zur Korrektur von Übung 7

Beitrag von MuldeR » 12. Jul 2011 17:22

Zur Aufgabe 1 a) haben wir folgenden Testfall angegeben:

Code: Alles auswählen

matrixSum(4,4,15) = 0
Wieso ist dieser Testfall (laut Korrektur) nicht minimal?

Ich denke beim ersten Durchlauf der inneren Schleife wird sofort stopp = true gesetzt und das Programm bricht ab. Damit wurden alle Knoten, bis auf die While-Knoten, genau einmal besucht.

Dass man die While-Knoten 2x besucht, lässt sich ja nicht verhindern...

---

Außerdem hätte ich noch eine Frage zum Boundary Interior Test:

Wenn man die äußere Schliefe 2x durchläuft, sind dann "nur" die folgenden Kombinationen zu Testen:
  • 2x äußere, 2x 0x innere Schleife
  • 2x äußere, 2x 1x innere Schleife
  • 2x äußere, 2x 2x innere Schleife
Oder muss man zusätzlich auch so etwas testen:
  • 2x äußere, 0x innere Schleife + 1x innere Schleife
  • 2x äußere, 0x innere Schleife + 2x innere Schleife
  • 2x äußere, 1x innere Schleife + 0x innere Schleife
  • 2x äußere, 1x innere Schleife + 2x innere Schleife
  • 2x äußere, 2x innere Schleife + 0x innere Schleife
  • 2x äußere, 2x innere Schleife + 1x innere Schleife
Oder anders ausgedrückt: Sind Pfade, bei denen die Anzahl der Durchläufe der inneren Schleife zwischen den einzelnen Durchläufen der äußeren Schleife variiert, abzutesten?

Im Skript sieht es so aus, auf Seite Seite 311, vorletzte Zeile des Beispiels. In der Musterlösung wurden solche Pfade, soweit ich das erkennen kann, aber nicht getestet...

Benutzeravatar
saller
Moderator
Moderator
Beiträge: 161
Registriert: 12. Okt 2007 15:14
Wohnort: Darmstadt
Kontaktdaten:

Re: Frage zur Korrektur von Übung 7

Beitrag von saller » 15. Jul 2011 15:34

Zur Aufgabe 1 a) haben wir folgenden Testfall angegeben:

Code: Alles auswählen
matrixSum(4,4,15) = 0

Wieso ist dieser Testfall (laut Korrektur) nicht minimal?
Hier sollte eigentlich ein Häckhen mit Klammern drum rum gesetzt worden sein und in der Kntrolle wurde es wohl nicht als Optimal Durchlauf aufgenommen (fälschlicherweise). Fehler gab es ohnehin keinen, da ein Testfall das minimal Testkriterium ist - optimale Durchläufe wurden ja gar nicht gefordert.
Oder anders ausgedrückt: Sind Pfade, bei denen die Anzahl der Durchläufe der inneren Schleife zwischen den einzelnen Durchläufen der äußeren Schleife variiert, abzutesten?
Du meinst doch Kombinationen wie 2-0; 2-1; 1-2; 1-0, oder? Also generell würde ich Deine Frage mit Ja beantworten. Beim Boundary im Boundary Interior wird das Maximum mit bis zu 2-Iterationen, alle möglichen Kombinationen, einzeln abgetestet.
2x äußere, 0x innere Schleife + 2x innere Schleife
Damit ist im Script gemeint, dass wir zwei mal die äußere Schleife wiederholen und die innere zweimal, einmal, null-mal durchgehen. Also ganz einfach von zwei auf 0 runterzählen soz.

Abgetestet wurden:
// 0xS1
// 1xS1, 0xS2
// 1xS1, 1x1xS2
// 1xS1, 1x1xS2 //Beide Bedingungspfade If!
// 1xS1, 1x2xS2
// 1xS1, 1x2xS2 //Beide Bedingungspfade If!
// 2xS1, 2x0xS2
// 2xS1, 2x1xS2
// 2xS1, 2x1xS2 //Beide Bedingungspfade If!
// 2xS1, 2x2xS2 ---> entspricht 2x äußere, 0x innere Schleife + 2x innere Schleife, da die innere auch 1x und 0x passiert wird durch die Dekrementierung des counters.
// 2xS1, 2x2xS2 //Beide Bedingungspfade If!
Damit haben wir für die zweier-Iteration der äußeren Schleife die volle Abdeckung: 0x die innere, 1x die innere und 2x die innere (und das ganze dann zwei mal, wegen den zwei Durchläufen der äußeren Schleife).

Gruß
Karsten

MuldeR
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 131
Registriert: 18. Okt 2005 16:14
Wohnort: (d)armstadt
Kontaktdaten:

Re: Frage zur Korrektur von Übung 7

Beitrag von MuldeR » 21. Jul 2011 19:09

Also vllt erstmal eine Stufe einfacher:

Wenn man nur zwei verschachtelte Schleifen, ohne IF in der inneren hätte, und wir mal davon ausgehen, dass es für alle im folgenden genannten Pfade auch passende Testfälle gibt, müsste man dann also beim "Boundary Interior Test" wirklich alle diese 13 Testfälle durchführen?

Code: Alles auswählen

Testfall | Äußere Schleife | Innere Schleife (erster Durchlauf äußere) | Innere Schleife (zweiter Durchlauf äußere)

01         0x                -                                           -
02         1x                0x                                          -
03         1x                1x                                          -
04         1x                2x                                          -
05         2x                0x                                          0x
06         2x                0x                                          1x
07         2x                0x                                          2x
08         2x                1x                                          0x
09         2x                1x                                          1x
10         2x                1x                                          2x
11         2x                2x                                          0x
12         2x                2x                                          1x
13         2x                2x                                          2x
----

Außerdem wurde in der Musterlösung zwar für den Fall "außen 2x und innen 2x2x" zwar unterschieden, ob man durch das IF abbricht oder "normal" zu Ende läuft. Allerdings wurde nicht unterschieden, ob im zweiten Durchlauf der äußeren Schleife der Abbruch nun beim ersten oder beim zweiten Durchlaufen der inneren Schleife eintritt. Hätte man das nicht separat testen müssen ???

Ich hätte noch zusätzlich den Testfall Assert.assertEquals(7, ex7.matrixSum(2, 2, 8)) hinzugefügt.

----

Und schließlich beim "Modifizierten Boundary Interior Test" in der Aufgabe (e). Wird da wirklich der Testfall "1xS1, 0xS2" benötigt?

Für 1xS1 haben wir ja noch andre Testfälle und im letzten Testfall, "2xS1, 2x0xS2", wird doch 0xS2 noch abgedeckt werden.

MuldeR
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 131
Registriert: 18. Okt 2005 16:14
Wohnort: (d)armstadt
Kontaktdaten:

Re: Frage zur Korrektur von Übung 7

Beitrag von MuldeR » 22. Jul 2011 13:27

Könnte das bitte noch beantwortet werden?

Benutzeravatar
saller
Moderator
Moderator
Beiträge: 161
Registriert: 12. Okt 2007 15:14
Wohnort: Darmstadt
Kontaktdaten:

Re: Frage zur Korrektur von Übung 7

Beitrag von saller » 22. Jul 2011 15:55

Hallo Mulder,

sorry, der Post war mir entgangen. Aaalso:
wirklich alle diese 13 Testfälle durchführen?
Genau - sofern es über entsp. Testfälle möglich ist, muss es voll kombinatorisch durgetestet werden (entsp. deiner Auflistung).
Ich hätte noch zusätzlich den Testfall Assert.assertEquals(7, ex7.matrixSum(2, 2, 8)) hinzugefügt.
Dass muss ich überprüfen - wir haben zwar lange an einem Codebeispiel gesessen, dass möglichst viele Überdeckungskriterien veranschaulicht, allerdings war ich der Meinung, dass der Boundary Interior Test durch die Counter, Flags etc nicht komplett erfüllt werden kann. Leider komme ich vor der Klausur nicht mehr dazu, deinen Testfall zu verifizieren.
Wird da wirklich der Testfall "1xS1, 0xS2" benötigt?
Ich würde hier weiterhin an diesem Testfall festhalten! Man benötigt einen Testfall, der die innere Schleife einmal kompleet und explizit überspring, also nie wirklich zur Ausführung bringt. Damit kann man dann Fehlverhalten in der inneren Schleife gezielt identifizieren. Bei dem letzten testfall wird die innere Schleife ja 2 Mal zur Ausführung gebracht, wenn auch nur in einer Iteration der ersten Schleife.

Gruß
Karsten

MuldeR
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 131
Registriert: 18. Okt 2005 16:14
Wohnort: (d)armstadt
Kontaktdaten:

Re: Frage zur Korrektur von Übung 7

Beitrag von MuldeR » 22. Jul 2011 16:16

saller hat geschrieben:
wirklich alle diese 13 Testfälle durchführen?
Genau - sofern es über entsp. Testfälle möglich ist, muss es voll kombinatorisch durgetestet werden (entsp. deiner Auflistung).
Ich hätte noch zusätzlich den Testfall Assert.assertEquals(7, ex7.matrixSum(2, 2, 8)) hinzugefügt.
Dass muss ich überprüfen - wir haben zwar lange an einem Codebeispiel gesessen, dass möglichst viele Überdeckungskriterien veranschaulicht, allerdings war ich der Meinung, dass der Boundary Interior Test durch die Counter, Flags etc nicht komplett erfüllt werden kann. Leider komme ich vor der Klausur nicht mehr dazu, deinen Testfall zu verifizieren.
Danke für die Antwort!
saller hat geschrieben:
Wird da wirklich der Testfall "1xS1, 0xS2" benötigt?
Ich würde hier weiterhin an diesem Testfall festhalten! Man benötigt einen Testfall, der die innere Schleife einmal kompleet und explizit überspring, also nie wirklich zur Ausführung bringt. Damit kann man dann Fehlverhalten in der inneren Schleife gezielt identifizieren. Bei dem letzten testfall wird die innere Schleife ja 2 Mal zur Ausführung gebracht, wenn auch nur in einer Iteration der ersten Schleife.
Hmm. Da sich diese Frage aber auf den modifizierten Boundary Interior Test bezieht, sollte die Anzahl der Durchläufe der äußeren Schleife ja für das Testen der inneren egal sein. So wie ich das sehe, wird beim letzten Testfall "matrixSum(2,-1,2)" die äußere Schleife zwei mal durchlaufen, die innere dabei jedes mal übersprungen. Ich verstehe nicht ganz, wieso damit der Test "innere Schleife 0x" (explizit überspringen) noch nicht abgedeckt ist. Wieso muss ich auch noch einen weiteren Testfall haben, bei dem die äußere Schleife nur einmal durchlaufen und die innere übersprungen wird?

Gruß,
Daniel.

Benutzeravatar
saller
Moderator
Moderator
Beiträge: 161
Registriert: 12. Okt 2007 15:14
Wohnort: Darmstadt
Kontaktdaten:

Re: Frage zur Korrektur von Übung 7

Beitrag von saller » 22. Jul 2011 16:34

Hall Daniel,

ich verstehe schon Deine Argumentation, aber im Script steht es halt auch so:
n1, n2(* kein Durchlauf *)
n1, n3n2, n3(* 1x äussere, 0x innere Schleife *)
n1, n3, n4n2, n3, n4(* 1x äussere, 1x innere Schleife *)
n1, n3, n5n2, n3, n5
n1, n3, n4, n4n2, n3, n4, n4(* 1x äussere, 2x innere Schleife *)
n1, n3, n4, n5n2, n3, n4, n5
n1, n3, n5, n4n2, n3, n5, n4
n1, n3, n5, n5n2, n3, n5, n5
n1, n3, n3n2, n3, n3(* 2x äussere, 0x innere Schleife *)
Du siehst, hier wird auch 1x0x und 2x0x eplizit abgetestet. Das Tool LDRA-Testbed, was ich mir vor kurzem näher angeschaut habe, macht es auch so.

Ich werde das Beispiel noch einmal mit Professor Schürr erörtern, um eine schlüssigerere Definition / Erklärung zu bekommen. Allerdings geht das nicht mehr vor der Klausur. Solange heisst es: An das Script halten...

Gruß
Karsten

Antworten

Zurück zu „Software Engineering - Wartung und Qualitätssicherung“