Bridge < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 22:28 Mi 14.12.2011 | Autor: | dennis2 |
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Aufgabe | 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:
Java Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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?
Oder sind die gegebenen beiden Fälle komplett schon fertig?!
Was muss ich denn hier eigentlich in dem Code ergänzen?
Und wie kann ich die Methode getHand() stubben?
__________________ |
Kann es sein, daß der obige Quellcode bereits das Stubben und überhaupt alles was man machen soll, an einem Beispielfall zeigt?
Eigentlich müsste ich doch das jetzt "nur noch" auf alle anderen Fälle übertragen, sprich mir Beispielblätter ausdenken?
Sehe ich das richtig oder missverstehe ich die Aufgabe bzw. den gegebenen Quellcode?
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:52 Do 15.12.2011 | Autor: | dennis2 |
Ich frage das eigentlich nur, weil in der Aufgabe steht, dass wir die Methode gethand() stubben sollen und so wie ich das sehe, ist das doch schon vorgemacht?!
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 20:14 Do 15.12.2011 | Autor: | dennis2 |
Aufgabe | Hallo, ich habe jetzt ein paar Tests geschrieben und nun soll man diese direkt in den Doxygen-Kommentaren dokumentieren und dazu Folgendes nutzen:
1: |
| 2: | @Test void testXYZ001 {
| 3: | ...
| 4: | /**
| 5: | * @test
| 6: | * <b>tag</b> (Eindeutiger Bezeichner für den Testfall) <br>
| 7: | * <b>condition</b> (Vorbedingung für die Testfallausführung<br>
| 8: | * <b>event</b> Beschreibung des Funktionsaufrufs<br>
| 9: | * <b>expected</b>Beschreibung der erwarteten Resultate <br>
| 10: | * <b>req</b> Verweis auf 1. Voraussetzung <br>
| 11: | * <b>req</b> Verweis auf 2. Voraussetzung <br>
| 12: | */
| 13: | //Hier folgt der eigentliche Test.
| 14: | ...
| 15: | } | |
Also ich frage mich, was ich da jeweils hinschreiben muss!
Als Beispiel mal diesen Test, wo ich Testfall R003 teste, der lautet:
Name: R003
Voraussetzungen: Zwischen 14 und 22 Punkten und eine einfarbige Verteilung
Ausgabe: 1Kreuz, wenn Kreuz die dominante Farbe ist
1Karo, wenn Karo die dominante Farbe ist
usw.
1: | // "normaler" Testfall für R003
| 2: | @Test
| 3: | public void testGetOpeningBid_00() {
| 4: |
| 5: | /**
| 6: | * @test
| 7: | * <b>tag</b> "R003" <br>
| 8: | * <b>condition</b><br>
| 9: | * <b>event</b>>br>
| 10: | * <b>expected</b>Player bids 1 club<br>
| 11: | * <b>req</b><br>
| 12: | * <b>req</b><br>
| 13: | *
| 14: | */
| 15: |
| 16: | BridgePlayer player = new BridgePlayer() {
| 17: |
| 18: | public Hand getHand() {
| 19: | PlayingCard cards[] = new PlayingCard[13];
| 20: | cards[0] = CardSet.CLUB_K;
| 21: | cards[1] = CardSet.HEART_2;
| 22: | cards[2] = CardSet.SPADE_2;
| 23: | cards[3] = CardSet.DIAMOND_A;
| 24: | cards[4] = CardSet.CLUB_3;
| 25: | cards[5] = CardSet.CLUB_4;
| 26: | cards[6] = CardSet.CLUB_5;
| 27: | cards[7] = CardSet.CLUB_6;
| 28: | cards[8] = CardSet.CLUB_7;
| 29: | cards[9] = CardSet.CLUB_8;
| 30: | cards[10] = CardSet.CLUB_9;
| 31: | cards[11] = CardSet.CLUB_A;
| 32: | cards[12] = CardSet.SPADE_A;
| 33: |
| 34: | return new Hand( cards );
| 35: | }
| 36: | };
| 37: |
| 38: | Assert.assertTrue( "Player doesn't bid 1 club on 15 points and 9-2-1-1 distribution!", player.getOpeningBid() == Bid.ONE_CLUB );
| 39: | } |
Also meine Frage:
tag ist hier "R003"
expected ist hier: Player bids 1 club
Aber was ist condition?
Was ist event?
Was ist req?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:20 Sa 17.12.2011 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 23:20 Fr 16.12.2011 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|