Wieviele Testfälle muss man hier schreiben? (Software Engineering)

Zrebna

Zrebna

Aktives Mitglied
Hi!

Ich weiß nicht in welchen Forenbereich meine Frage am besten passt und hoffe daher, dass sie hier ok aufgehoben ist (für den sub-Forenbereich "Softwareentwicklung" erscheint sie mir zu basic).

Folgende Ausgangssituation -> bitte siehe angefügtes Bild

Hier gibt es wohl für den ersten Fall bzgl. gültigen Bereichen 3 ÄK:
35-36, 45-47 und 35-47; -> 3 ÄK
ungültiger Bereich:
< 35, >47, leere Eingabe -> effektiv 2 ÄK
Gesamt_1: 5 ÄK, weil die ÄK 'leere Eingabe' nicht mittels Methode getestet werden kann? Methode benötigt ja Parameter...

Zweiter Fall:

gültiger Bereich: 3 ÄK mit {"Leder", "Stoff", "Kunstfaser"}
ungültiger Bereich: String-Wert ungleich der obigen 3 Werte -> 1 ÄK (und leere Eingabe, aber fürs Testen nicht relevant)
Gesamt_2: 4 ÄK

Dritter Fall:

gültiger Bereich: Boolean Ausdruck von {True, False} -> 2 ÄK
ungültiger Bereich: Eingabe, die kein boolescher Wert ist -> 1 ÄK
Gesamt_3: 3 ÄK

Ok, wenn nun gefragt ist: "Wieviele Testfällle muss man hier erstellen"?
Wie geht man dann vor? Einfach:
#Testfälle = 5 * 4 * 3 = 60

Wie hättet ihr diese Aufgabe gelöst?

Lg,
Zrebna
 

Anhänge

  • AK.PNG
    AK.PNG
    33,6 KB · Aufrufe: 45
MoxxiManagarm

MoxxiManagarm

Top Contributor
60?! OMG! Auf garkeinen Fall! Dann würde man ja in größeren Programmen gar nicht mehr aus dem Test herauskommen. Es reicht ein Fall für jede Äquivalenzklasse. Davon mal abgesehen, meistens testet man zuerst einmal den Gutfall. Das wäre hier z.B. ein exklusives Ledermodell der Größe 38. Dann hast du in einem Testfall direkt 3 Äquivalenzklassen abgedeckt.

ungültiger Bereich: Eingabe, die kein boolescher Wert ist -> 1 ÄK
Darüber kann man streiten. Dem würde ich zustimmen wenn du a) eine Benutzereingabe dafür hast oder b) ein Boolean Objekt, welches null sein kann. Wenn du aber z.B. einen Java boolean hast kann diese Äquivalenzklasse garnicht auftreten.
 
M

Meniskusschaden

Top Contributor
Hier gibt es wohl für den ersten Fall bzgl. gültigen Bereichen 3 ÄK:
35-36, 45-47 und 35-47; -> 3 ÄK
ungültiger Bereich:
< 35, >47, leere Eingabe -> effektiv 2 ÄK
Gesamt_1: 5 ÄK, weil die ÄK 'leere Eingabe' nicht mittels Methode getestet werden kann? Methode benötigt ja Parameter...
Ich sehe da drei Äquivalenzklassen: Standardgröße, Sondergröße, ungültige Größe.
 
Zrebna

Zrebna

Aktives Mitglied
Ich sehe da drei Äquivalenzklassen: Standardgröße, Sondergröße, ungültige Größe.

Ja, das stimmt eigentlich - merci für den Hinweis^^

Generell, auch bzgl. den anderen Antworten:
Meines Wissens nach muss man aber hier gem. Software-Engineering-Theorie alle Kombinationen aller möglichen ÄK betrachten,
d.h. das Kreuzprodukt bilden? Oder sehe ich das falsch? Glaube, dass wir das damals so oder so ähnlich in der SE-Vorlesung besprochen haben...
 
mihe7

mihe7

Top Contributor
Schuhgröße:

Klasse 1.1: Anwendung von Preismodell A wird für Schuhgrößen 37 bis incl. 44 erwartet
Klasse 1.2: Anwendung von Preismodell B wird für Schuhgrößen 35 und 36 erwartet
Klasse 1.3: Anwendung von Preismodell C wird für Schuhgrößen 45, 46 und 47 erwartet.
Klasse 1.4: alle Werte kleiner als 37 sind ungültig
Klasse 1.5: alle Werte größer als 47 sind ungültig

Das sind 5 ÄK (zu 1.2 und 1.3: hier steht in der Aufgabenstellung "jeweils zu besonderen Preisberechnungen")

Material:
Klasse 2.1: Leder
Klasse 2.2: Stoff
Klasse 2.3: Kunstfaser
Klasse 2.4: alle anderen Werte (z. B. null, falls Material durch ein enum dargestellt wird) sind ungültig.

Macht 4 ÄK.

Exklusivmodell:

Klasse 3.1: ja
Klasse 3.2: nein
Annahme: ungültige Werte kann es nicht geben (Datentyp boolean).

Macht 2 ÄK.

Jetzt ist die Frage, ob ein schwacher oder ein starker Äquivalenzklassentest gefordert ist. Beim schwachen brauchst Du 5 Testfälle (= maximale Anzahl von ÄK aller Parameter), so dass aus jeder ÄK wenigstens ein Wert verwendet wurde. Beim starken brauchst Du 4*5*2 - 1 = 39 Testfälle. Die -1 kommt daher, dass angenommen wird, dass sich die Funktion bei einer ungültigen Eingabe immer gleich verhält, unabhängig davon wie viele Eingaben ungültig sind. Sprich: wenn die Schuhgröße ungültig ist, spielt es keine Rolle mehr, ob auch das Material ungültig ist, so dass die Kombination nicht getestet werden muss.

So würde ich das zumindest sehen.
 
Zrebna

Zrebna

Aktives Mitglied
Top erklärt - vielen Dank!

Ich habe mittlerweile eine vermeintliche Muster-Lsg. betrachtet und dort ist alles, wie du es bzgl. einem "starkem Testing" geschildert hast, mit einer Ausnahme:

Leere Eingabe zählt dort auch immer mit dazu, als jeweils eigene ÄK und diese gibt es auch bei den "Schuhgrößem".
Laut der Muster-Lsg (vermeintlich, da von Kollegen) dann:
6 * 5 * 3
Ein Kommilitone meint sogar, dass bei "Material" quasi {Leder, Stoff, Kunstfaser} als nur eine ÄK gilt, aber sehe nicht, warum das Sinn machen könnte...

Jedenfalls, scheint es u.a. mit Hilfe deinen Erläuterungen wohl richtungsweise zu stimmen - ich versuche noch selber mehr Infos zu bekomen^^
Ansonsten, danke soweit schon mal
lg,
Zrebna
 
mihe7

mihe7

Top Contributor
Leere Eingabe zählt dort auch immer mit dazu, als jeweils eigene ÄK und diese gibt es auch bei den "Schuhgrößem".
Das hängt von den getroffenen Annahmen ab. Für die Schuhgröße würde ich bei so einer Aufgabe einen primitiven Datentyp erwarten, so dass es keine leere Eingabe geben kann. Analog beim Fall ja/nein. Wie der Interpretationsspielraum auszulegen ist, ergibt sich meist aus dem Kontext (Aufgabenstellung, Skripte, Prof.)

Ein Kommilitone meint sogar, dass bei "Material" quasi {Leder, Stoff, Kunstfaser} als nur eine ÄK gilt, aber sehe nicht, warum das Sinn machen könnte...
Das ergibt auch keinen Sinn. Würde es hierfür nur eine ÄK geben, dann würde das Material nicht in die Preisberechnung einfließen. Die Aufgabenstellung gibt dagegen das Material als Parameter der Preisberechnungsfunktion vor, d. h. der Preis ist abhängig vom Material. Es muss also eine wie auch immer geartete Fallunterscheidung im Algorithmus existieren. Um alle Fälle abzudecken, muss jedes Material eine ÄK bilden.
 
Zrebna

Zrebna

Aktives Mitglied
Das ergibt auch keinen Sinn. Würde es hierfür nur eine ÄK geben, dann würde das Material nicht in die Preisberechnung einfließen. Die Aufgabenstellung gibt dagegen das Material als Parameter der Preisberechnungsfunktion vor, d. h. der Preis ist abhängig vom Material. Es muss also eine wie auch immer geartete Fallunterscheidung im Algorithmus existieren. Um alle Fälle abzudecken, muss jedes Material eine ÄK bilden.

Hierzu noch einmal:
ich habe eine Aufgabe mit wirklicher Musterlösung vom Prof gefunden, bei der die Menge von drei unterschiedlichen String-Werten def.
als nur 1 ÄK gezählt wird.
Das macht dort auch Sinn, weil mit den Strings dort nichts berechnet wird, bzw. nichts Weiteres von dem abhängt, welchen String man nun aus der String-Menge wählt - jeder kann ein Repräsentant sein.

Ich habe nun nochmal mit einem Kollegen gesprochen und er meint, dass diese Begründung auch hier durchgeht.
Denn ja, abhängig von der Materialwahl ist der Preis ein anderer.
Aber das ist doch egal?
Man nimmt halt irgendein Material und abhängig von diesem ist der erwartete Wert beim testen ('expected'), den man ja selber einstellt entweder so oder so... es wird ja am Ende klar, ob es funktioniert.

Analog dazu würde man ja beim Testen einer ganzzahligen Additions-Funktion auch zwei Zahlen, z.B. aus der Menge aller natürlichen Zahlen wählen und eben das erwartete Ergebnis (expected) entsprechend setzen/einstellen - da sind die Zahlen 2 und 3 genauso äquivalente Repräsentanten aus der einen ÄK aller natürlchen Zahlen, wie 100 und 101.

Daher ist evtl. die Stringmenge in der Aufgabe, die ich hier gepostet habe, doch nur eine ÄK, oder haben wir einen Denkfehler?

Lg,
Zrebna
 
mihe7

mihe7

Top Contributor
ich habe eine Aufgabe mit wirklicher Musterlösung vom Prof gefunden, bei der die Menge von drei unterschiedlichen String-Werten def.
als nur 1 ÄK gezählt wird.
Das macht dort auch Sinn, weil mit den Strings dort nichts berechnet wird, bzw. nichts Weiteres von dem abhängt, welchen String man nun aus der String-Menge wählt - jeder kann ein Repräsentant sein.
Exakt.

Man nimmt halt irgendein Material und abhängig von diesem ist der erwartete Wert beim testen ('expected'), den man ja selber einstellt entweder so oder so... es wird ja am Ende klar, ob es funktioniert.
Nein.

Die Sache ist doch ganz einfach. Mal ein einfaches Beispiel skizziert:
Java:
preis = 0;

if (groesse < 35 || groese > 47) {
    throw new IllegalArgumentException("Ungültige Größe " + groesse);
} else if (groesse < 37) {
    preis += 43;
} else if (groesse < 46) {
    preis += 40;
} else {
    preis += 45;
}

switch (material) {
    case "Leder":  preis += 15; break;
    case "Stoff": preis += 10; break,
    case "Kunstfaser": preis += 5; break;
}

Oben siehst Du die fünf ÄK, wobei ÄK 1.4 und 1.5 hier mit einem if gleich behandelt werden. Es spielt keine Rolle, ob Du für ÄK 1.4 eine Schuhgröße von 10, 20 oder 30 einsetzt oder für ÄK 1.1 eine Größe von 38, 40 oder 42 verwendest. Nachtrag: Wichtig ist, dass Du für jede ÄK einen Repräsentanten wählst.

Wenn Du jetzt nur "Leder" prüfst, testest Du nur, ob der "Leder-Zweig" das richtige Ergebnis liefert. Das wäre, wie wenn Du nur die Schuhgröße 43 testen würdest und sagst: ok, wenn die 43 funktioniert, muss auch die 20 funktionieren - falsch.
 
Zuletzt bearbeitet:
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Jetzt ist die Frage, ob ein schwacher oder ein starker Äquivalenzklassentest gefordert ist. Beim schwachen brauchst Du 5 Testfälle (= maximale Anzahl von ÄK aller Parameter), so dass aus jeder ÄK wenigstens ein Wert verwendet wurde. Beim starken brauchst Du 4*5*2 - 1 = 39 Testfälle. Die -1 kommt daher, dass angenommen wird, dass sich die Funktion bei einer ungültigen Eingabe immer gleich verhält, unabhängig davon wie viele Eingaben ungültig sind. Sprich: wenn die Schuhgröße ungültig ist, spielt es keine Rolle mehr, ob auch das Material ungültig ist, so dass die Kombination nicht getestet werden muss.
Das -1 dürfte falsch sein, sind ja vier Tests mit mehr als einer ungültigen Eingabe ((1.4+1.5) x 2.4 x (3.1+3.2))?
 
Zrebna

Zrebna

Aktives Mitglied
Hm ok - ich denk ich habs nun geschnallt - vielen Dank für die Erläuterungen und Illustrationen dazu:)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Wieviele Threads sind sinnvoll? Allgemeine Java-Themen 8
R Wieviele Bytes gesendet Allgemeine Java-Themen 3
B Testfälle mit JUnit Allgemeine Java-Themen 4
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
R Was muss ich ändern, damit der Kreis links unten gezeichnet wird? Allgemeine Java-Themen 17
Drachenbauer Wie muss ein Konstructor aussehen, um dinge mit verschiedenen Zusätzen in den "<>" anzunehmen? Allgemeine Java-Themen 1
S Validation Null aber nicht Blank und muss Email sein Allgemeine Java-Themen 22
W Warum muss void main() public sein? Allgemeine Java-Themen 3
T Was muss ich zu JSMPP bzw anderen Lösungen wissen? Allgemeine Java-Themen 0
N Vererbung Parameter muss 2 Bedingungen erfüllen Allgemeine Java-Themen 2
K Muss ich Eclipse und Java nochmal neu installieren? Allgemeine Java-Themen 10
X Generic muss zwei Klassen/Interfaces erfüllen Allgemeine Java-Themen 5
E Compiler-Fehler wie muss ich die entstandene Quellcode kompilieren?? Allgemeine Java-Themen 2
P Mail wird nicht gesendet - Muss ich kein PW angeben ? Allgemeine Java-Themen 13
D Muss eine JNI Biblio testen (MAC OS X) Allgemeine Java-Themen 4
X Will JAR Datei zum Download anbieten, worauf muss ich rechtlich achten? Allgemeine Java-Themen 2
J Applet in JAR packen - was muss in main() stehen? Allgemeine Java-Themen 12
B welchen port muss ich angeben? Allgemeine Java-Themen 11
J Erstes Programm bei Sourceforge: Was muss ich beachten? Allgemeine Java-Themen 18
C JAVA Anwendung - Was muss auf dem Server installiert sein? Allgemeine Java-Themen 6
G Threads werden nicht beendet. Was muss dahin? Allgemeine Java-Themen 12
G wer muss hier wen aufrufen? Allgemeine Java-Themen 7

Ähnliche Java Themen

Anzeige

Neue Themen


Oben