Hallo, folgende Aufgabe ist gestellt:
Gestet werden soll eine Software zum Spielen des Kartenspiels Bridge (Black-Box-Testen).
Diese Software besteht aus vier Klassen:
PlayingCard
PlayingSet
Hand
BridgePlayer
und drei Aufzählungen:
Suit
Rank
Bid
Dabei sind die vorkompilierten class-Dateien gegeben und eine dazugehörige Doxygen-Dokumentation.
Die Methode getOpeningBid() in der Klasse BridgePlayer soll dazu dienen, die Stärke eines Blatts mit 13 unterschiedlichen Karten abzuschätzen und abhängig davon entweder ein Angebot abzugeben (s. diese Tabelle: "Alle Gebote im Bridge" bei Wikipedia: http://de.wikipedia.org/wiki/Bridge_(Kartenspiel)) oder zu passen.
Bei der Bewertung des Blatts gibt es zwei Kriterien:
1.) Kartenpunkte:
Ass = 4 Punkte
König = 3 Punkte
Dame = 2 Punkte
Bube = 1 Punkt
jede Zahlkarte = 0 Punkte
2.) Kartenverteilung:
Die vier grundlegenden Verteilungen sind:
a) Gleichmäßige Verteilung: Alle Karten sind gleichmäßig über die vier Farben verteilt. Je Farbe gibt es mindestens zwei und höchstens fünf Karten.
b) Einfarbige Verteilung: Setzt eine Karte mit mindestens 5 Karten voraus. Diese wird als dominant bezeichnet. Alle anderen Farben haben höchstens 4 Karten. Wenn die dominante Farbe genau 5 Karten hat, gibt es eine andere Farbe mit genau einer Karte.
c) Zweifarbige Verteilung: Setzt zwei Farben mit mindestens 5 Karten voraus. Diese werden als dominant bezeichnet.
d) Dreifarbige Verteilung: Setzt drei Farben mit mindestens 4 Karten voraus. Diese werden als dominant bezeichnet.
Die Aufgabe ist es, die Methode getOpeningBid() gegen folgende Anforderungen zu testen:
1. Fall: Das Blatt enthält nicht 13 unterschiedliche Karten. Ausgabe: Invalid
2. Fall: zwischen 15 und 22 Punkten und gleichmäßige Verteilung. Ausgabe: 1 NT
3. Fall: 14-22 Punkte, einfarbige Verteilung. Ausgabe: 1 Pik, wenn Pik die dominante Farbe ist usw.
4. Fall: 13-22 Punkte, zweifarbige Verteilung
5. Fall: 12-22 Punkte, dreifarbige Verteilung
6. Fall: 23 oder mehr
7. Fall: Voraussetzungen von Fall 1 bis 6 nicht erfüllt
Schwierigkeit:
Die Methode getOpenBid() ruft selbst die Methode getHand() auf, d.h.
Die Methode getHand() muss gestubbt werden.
Die Tests sollen direkt in den Doxygen-Kommentaren dokumentiert werden.
-------------------------------------------
Das war jetzt viel Text!!
Ich habe soweit alles vorbereitet, dass ich die Tests in Eclipse ausführen lassen könnte.
Es ist folgendes Gerüst für die Testklasse BridgePlayerTest.java gegeben:
Jede Anforderung muss durch mindestens einen Testfall abgedeckt werden. Grenzfälle sollen auch getestet werden.
Verstehe ich das richtig, dass hier zwei Testfälle vorgegeben sind:
Der erste für Fall 3, der zweite für den Fall Pass?
Und dass ich jetzt diese beiden Fälle erstmal implementieren muss (inkl. Grenzfälle) und dann das Gleiche für die restlichen 5 Fälle?
Was muss ich denn hier eigentlich in dem Code ergänzen?
Und wie kann ich die Methode getHand() stubben?
Gestet werden soll eine Software zum Spielen des Kartenspiels Bridge (Black-Box-Testen).
Diese Software besteht aus vier Klassen:
PlayingCard
PlayingSet
Hand
BridgePlayer
und drei Aufzählungen:
Suit
Rank
Bid
Dabei sind die vorkompilierten class-Dateien gegeben und eine dazugehörige Doxygen-Dokumentation.
Die Methode getOpeningBid() in der Klasse BridgePlayer soll dazu dienen, die Stärke eines Blatts mit 13 unterschiedlichen Karten abzuschätzen und abhängig davon entweder ein Angebot abzugeben (s. diese Tabelle: "Alle Gebote im Bridge" bei Wikipedia: http://de.wikipedia.org/wiki/Bridge_(Kartenspiel)) oder zu passen.
Bei der Bewertung des Blatts gibt es zwei Kriterien:
1.) Kartenpunkte:
Ass = 4 Punkte
König = 3 Punkte
Dame = 2 Punkte
Bube = 1 Punkt
jede Zahlkarte = 0 Punkte
2.) Kartenverteilung:
Die vier grundlegenden Verteilungen sind:
a) Gleichmäßige Verteilung: Alle Karten sind gleichmäßig über die vier Farben verteilt. Je Farbe gibt es mindestens zwei und höchstens fünf Karten.
b) Einfarbige Verteilung: Setzt eine Karte mit mindestens 5 Karten voraus. Diese wird als dominant bezeichnet. Alle anderen Farben haben höchstens 4 Karten. Wenn die dominante Farbe genau 5 Karten hat, gibt es eine andere Farbe mit genau einer Karte.
c) Zweifarbige Verteilung: Setzt zwei Farben mit mindestens 5 Karten voraus. Diese werden als dominant bezeichnet.
d) Dreifarbige Verteilung: Setzt drei Farben mit mindestens 4 Karten voraus. Diese werden als dominant bezeichnet.
Die Aufgabe ist es, die Methode getOpeningBid() gegen folgende Anforderungen zu testen:
1. Fall: Das Blatt enthält nicht 13 unterschiedliche Karten. Ausgabe: Invalid
2. Fall: zwischen 15 und 22 Punkten und gleichmäßige Verteilung. Ausgabe: 1 NT
3. Fall: 14-22 Punkte, einfarbige Verteilung. Ausgabe: 1 Pik, wenn Pik die dominante Farbe ist usw.
4. Fall: 13-22 Punkte, zweifarbige Verteilung
5. Fall: 12-22 Punkte, dreifarbige Verteilung
6. Fall: 23 oder mehr
7. Fall: Voraussetzungen von Fall 1 bis 6 nicht erfüllt
Schwierigkeit:
Die Methode getOpenBid() ruft selbst die Methode getHand() auf, d.h.
Die Methode getHand() muss gestubbt werden.
Die Tests sollen direkt in den Doxygen-Kommentaren dokumentiert werden.
-------------------------------------------
Das war jetzt viel Text!!
Ich habe soweit alles vorbereitet, dass ich die Tests in Eclipse ausführen lassen könnte.
Es ist folgendes Gerüst für die Testklasse BridgePlayerTest.java gegeben:
Java:
import org.junit.*;
import org.junit.runner.*;
import org.junit.Assert.*;
public class BridgePlayerTest {
@Test
public void testGetOpenBid_00() {
public Hand getHand() {
PlayingCard cards[] = new PlayingCard[13];
cards[0]=CardSet.CLUB_K;
cards[1]=CardSet.HEART_2;
cards[2]=CardSet.SPADE_2;
cards[3]=CardSet.DIAMOND_A;
cards[4]=CardSet.CLUB_3;
cards[5]=CardSet.CLUB_4;
cards[6]=CardSet.CLUB_5;
cards[7]=CardSet.CLUB_6;
cards[8]=CardSet.CLUB_7;
cards[9]=CardSet.CLUB_8;
cards[10]=CardSet.CLUB_9;
cards[11]=CardSet.CLUB_A;
cards[12]=CardSet.SPADE_A;
return new Hand( cards );
}
};
Assert.assertTrue("Player doesn't bid 1 club on 15 points and 9-2-2-1 distribution!", player.getOpeningBid() == Bid.ONE_CLUB );
}
@Test
public void testGetOpeningBid_01() {
// Hier wird jetzt folgendes Blatt erzeugt, ich habe aber keine Lust mehr, das abzutippen:
// Kreuz 2, Herz 2, Pik 2, Karo 4, Kreuz 3, Kreuz 4, Kreuz 5, Kreuz 6, Kreuz 7, Kreuz 8, Kreuz 9,
// Kreuz 10, Kreuz Bube
Jede Anforderung muss durch mindestens einen Testfall abgedeckt werden. Grenzfälle sollen auch getestet werden.
Verstehe ich das richtig, dass hier zwei Testfälle vorgegeben sind:
Der erste für Fall 3, der zweite für den Fall Pass?
Und dass ich jetzt diese beiden Fälle erstmal implementieren muss (inkl. Grenzfälle) und dann das Gleiche für die restlichen 5 Fälle?
Was muss ich denn hier eigentlich in dem Code ergänzen?
Und wie kann ich die Methode getHand() stubben?