Whiteboxtest-Übungsaufgabe “Rabatt”
https://bildung.social/@oerinformatik/111523080351425661
https://oer-informatik.de/whitebox-testfall-uebung-rabatt
tl/dr; (ca. 15 min Bearbeitungszeit): Übungsaufgabe zur Whitebox-Testfall-Erstellung und Berechnung der Codeüberdeckung am Beispiel einer “Rabatt”-Funktion. (Zuletzt geändert am 06.12.2023)
Die Aufgaben beziehen sich auf die Inhalte der folgenden Blogposts:
Überdeckungstests-Übungsaufgabe Rabattrechner
Gegeben ist die folgende Methode, die Rabatte errechnet in Abhängigkeit der Positionskosten (über 100€ -> 5€ Rabatt) und Gesamtkosten (über 1000€ -> 5% Rabatt auf die rabattierte Gesamtsumme):
public static int rabattAusgeben(int[] kosten){
int rabatt = 0;
int summe = 0;
for(int position:kosten){
if (position > 100) {
rabatt += 5;
}
summe += position;
}
if (summe-rabatt > 1000){
rabatt +=(int)((summe-rabatt)*0.05);
}
return rabatt;
}
- Welchen Anweisungsüberdeckungsgrad und Zweigüberdeckungsgrad erhältst Du mit dem folgenden Testfall (Gibt die Werte in der Form
xx von yy
an (oder als nicht gekürzter Bruch), und nicht als Prozentzahl!):
@Test
public void rabattAusgeben_1000_10_Test() {
// given: Preparation
int[] kosten = { 1000, 10 };
// when: Execution
int result = App.rabattAusgeben(kosten);
// then: Verification
int expected = 55;
assertEquals(result, expected);
}
Testfall im Kontrollflußgraph: 1->2->3->4->5->6->3->4->6->3->7->8->9
Anweisung 1 + 2 kann zusammengefasst werden.
C0 = durchlaufende Anweisungen / mögliche Anweisungen = 9/9 = 100% (bei Zusammenfassung von 1+2: 8/8 = 100%)
C1 = durchlaufende Zweige / mögliche Zweige = 5/6 = (83%)
Berechnung über Kanten statt Zweige:
C1 = durchlaufende Kanten / mögliche Kanten = 9/10 = 90%

- Ergänze so wenige Testfälle wie möglich, um eine 100%ige Zweigüberdeckung zu erhalten. (Erwartete Ergebnisse sind nicht erforderlich – lediglich die zu testenden Parameter sollen angegeben werden. Die Testfälle können abgekürzt werden nach dem Muster
assertEquals(result, expected)
, für den obigen Testfall also - weil das erwartete Resultat ja nicht berechnet werden muss, z.B.:assertEquals(rabattAusgeben({ 1000, 10 }), ??);
)
summe-rabatt muss unter 1000 bleiben, damit else-Zweig genommen wird, also:
Testfall im Kontrollflußgraph: 1->2->3->4->6->3->7->9
assertEquals(rabattAusgeben({10 }), ??);
Weitere Übungsaufgaben
Links zu weiteren Übungsaufgaben finden sich über das Menü oder am Ende des Artikels zu Whitebox-Tests/Code-Coverage
Hinweis zur Nachnutzung als Open Educational Resource (OER)
Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Whiteboxtest-Übungsaufgabe "Rabatt"” von Hannes Stein, Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/whitebox-testfall-uebung-rabatt veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/qs/code-coverage. Stand: 06.12.2023.
[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]