Programmierprojekt: Tests

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Programmierprojekt: Tests

Beitrag von Owyn » 7. Jul 2012 21:39

Hallo,

wir haben auf unserer Webseite die Tests veröffentlicht, die wir für die Bewertung des Programmierprojekts benutzt haben.

Sie finden diese ganz unten im Bereich "Prüfung" oder direkt hier: https://moodle.informatik.tu-darmstadt. ... p?id=10975

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

system.out.prinln();
Windoof-User
Windoof-User
Beiträge: 31
Registriert: 19. Okt 2011 19:46

Re: Programmierprojekt: Tests

Beitrag von system.out.prinln(); » 9. Jul 2012 18:06

Hallo,

ich finds echt super, dass ihr uns euer Testprogramm zur Verfügung stellt. Das macht die ganze Bewertung sehr viel transparenter. Außer dem sieht man, wie gut ihr programmieren könnt und dass eine anständige Doku eigentlich vollkommen überflüssig ist.

Ich würde nun ganz gerne wissen, was der erste Test, also a2abc1() eigentlich testet. So wie ich das verstanden habe wird überprüft, ob die Objektvariablen der Klasse Spielkarte allsamt protected, private oder pubilc static final sind. Dies ist bei mir meiner Meinung nach der Fall, allerdings wird dies bei mir im Testverlauf als Fehler angezeigt mit der Ausgabe "Private oder Protected".

Benutzeravatar
mmec
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 203
Registriert: 7. Sep 2011 17:59
Wohnort: Darmstadt

Re: Programmierprojekt: Tests

Beitrag von mmec » 9. Jul 2012 18:25

Hallo system.out.println();,

Code: Alles auswählen

assertTrue("private oder protected!", pri || pro || (pub && sta && fin));
An dieser stelle wurde bereits in pri, pro, pub, sta und fin gespeichert ob die entsprechende Variable private, protected, public, static bzw. fin ist.
Wenn eine Variable also etweder private, oder protected oder public static final ist passiert gar nichts. In allen anderen Fällen wird ein AssertionError geworfen, mit der Nachricht "private oder protected!".

Das ganze wird mit all deinen Datenfeldern (also Objekt und Klassenvariablen und Konstanten) der Klasse Kartenstapel gemacht.

Code: Alles auswählen

Kartenstapel k = new Kartenstapel();
[..]
Class kc = k.getClass();
Das bedeutet also dass du in deiner Klasse Kartenstapel mindestens ein Datenfeld hast dass nicht protected und nicht private und nicht public static final ist.

JUnit API für die Klasse Assert

Grüße, Johannes
FC SEEMOO No.1

system.out.prinln();
Windoof-User
Windoof-User
Beiträge: 31
Registriert: 19. Okt 2011 19:46

Re: Programmierprojekt: Tests

Beitrag von system.out.prinln(); » 9. Jul 2012 19:07

Ah, in Kartenstapel liegt also der Fehler. Da hab ich mich wohl einfach verlesen. Dankesehr :)

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Programmierprojekt: Tests

Beitrag von Owyn » 9. Jul 2012 19:21

system.out.prinln(); hat geschrieben:Außer dem sieht man, wie gut ihr programmieren könnt und dass eine anständige Doku eigentlich vollkommen überflüssig ist.
Ich weiß jetzt gerade nich, ob das ironisch gemeint ist. Eine programmiertechnische Meisterleistung ist die Testklasse sicherlich nicht, aber sie tut was sie soll.
Kommentiert und dokumentiert ist sie tatsächlich so gut wie nicht, da sie ursprünglich nur für den internen Gebrauch gedacht war.
Bei Fragen gibt es ja das Forum hier...
Ich würde nun ganz gerne wissen, was der erste Test, also a2abc1() eigentlich testet. So wie ich das verstanden habe wird überprüft, ob die Objektvariablen der Klasse Spielkarte allsamt protected, private oder pubilc static final sind. Dies ist bei mir meiner Meinung nach der Fall, allerdings wird dies bei mir im Testverlauf als Fehler angezeigt mit der Ausgabe "Private oder Protected".
a2abc1 testet der Reihe nach folgendes:
- Hat ein neuer Kartenstapel 0 Karten?
- Ist ein neuer Kartenstapel inaktiv?
- Lässt er sich durch setAktiv(true) aktivieren?
- Lässt er sich durch setAktiv(false) deaktivieren?
- Ist die Wunschfarbe eines neuen Stapels 0?
- Gibt es mindestens zwei Objektvariablen (eine für die Spielkarten, eine für Status+Wunschfarbe)?
- Ist jede Objektvariable private oder protected (oder eine öffentliche Klassenkonstante - einige hatten die Kartenwerte und -farben als Konstanten deklariert)?

Es geht also beim Test a2abc1 um die Klasse Kartenstapel, nicht um die Klasse Spielkarte - die wird in den Tests a1... abgehandelt (außer die Methode kompatibel).
Als Kommentar hinter der Testmethodensignatur steht auch, welche Methoden welcher Klasse getestet werden.

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Programmierprojekt: Tests

Beitrag von Owyn » 9. Jul 2012 19:27

Ach ja:

Wir werden die Tests noch mal überarbeiten (natürlich nur zu eurem Vorteil), aber eher nächste Woche als diese.

Geplante Änderungen bisher:
- Sortierung in der Kartenhand auch in umgekehrter Reihenfolge erlaubt.
- Fehler in Spielkarte.punkte führen nicht mehr automatisch zum Folgefehler bei Kartenhand.punkte.

Evtl. gibt es auch nicht jedes Mal Abzug, wenn die Objektvariablen die falschen Zugriffsrechte haben, allerdings war die Datenkapselung deutlich in der Aufgabenstellung erwähnt und sie ist uns auch wichtig.

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Sven Schäfer
Neuling
Neuling
Beiträge: 3
Registriert: 10. Jul 2012 11:24

Re: Programmierprojekt: Tests

Beitrag von Sven Schäfer » 10. Jul 2012 11:29

Ich hatte in der Klasse "Spieler" eine interne Hilfsvariable benutzt, die von "Computer" nicht benötigt wurde. Entsprechend sah ich keine Notwendigkeit, diese auf protected zu setzten und habe statt dessen privat verwendet (die Aufgabenstellung sah auch nur vor, dass die Erben auf Kartenhand und Name zugreifen können). Der Test hat nun aber geprüft, ob alle Klassenvariablen protected sind und schlug bei mir deshalb fehl, was mir wohl einen Punkt gekostet hat. Es wäre schön, wenn das bei den angekündigen neuen Tests auch bedacht werden könnte. Viele Grüße
Sven

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Programmierprojekt: Tests

Beitrag von Owyn » 10. Jul 2012 18:48

Hallo,

die automatischen Tests werden nie alle Besonderheiten abdecken können. Bei Sonderfällen bitte eine E-Mail an mich, ich schaue mir das dann an. In Ihrem Fall gibt es den Punkt natürlich.
Man könnte sich zwar fragen, warum i eine Eigenschaft der Klasse Spieler sein muss, aber das würde zu weit führen...

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Programmierprojekt: Tests

Beitrag von Owyn » 11. Jul 2012 18:01

Die Tests sind überarbeitet. Um kein Chaos zu verursachen, werden sie allerdings erst nach der Testatwoche veröffentlicht und auch nicht bei den Testaten berücksichtigt.
Wir werden die Programmierprojektergebnisse natürlich veröffentlichen, da schlagen sich die Änderungen dann nieder.

Was aktualisiert wurde:
- Die Sortierung in der Kartenhand ist auch in umgekehrter Reihenfolge erlaubt. Das gilt auch für Tests der Klasse Spieler, in denen das bisher zu Folgefehlern geführt hat.
- Fehler in Spielkarte.punkte führen nicht mehr automatisch zum Folgefehler bei Kartenhand.punkte.
- Abzug für falsche Zugriffsrechte: Wenn Objektvariablen in den Klassen Spielkarte, Kartenstapel und Kartenhand nicht private sind, wird jetzt höchstens ein Punkt abgezogen (statt 3) - ein Punktabzug für Objektvariablen in der Klasse Spieler, die nicht protected sind, bleibt aber erhalten.
- Die Tests für Computer.zug und Computer.wunsch wurden getrennt. Bisher gab es nur dann zwei Punkte, wenn beide Tests erfolgreich waren. Jetzt gibt es 1,5 Punkte für Computer.zug und 0,5 für Computer.wunsch.
- Die Namen für Computergegner dürfen etwas von der Aufgabenstellung abweichen: Groß-und Kleinschreibung ist egal, außerdem darf das Leerzeichen vor der fortlaufenden Nummer fehlen.

Gruß,
Christian Heinig
Zuletzt geändert von Owyn am 13. Jul 2012 17:39, insgesamt 1-mal geändert.
Grund: Test-Update 13.07.2012
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

wambo
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 20. Feb 2012 09:19

Re: Programmierprojekt: Tests

Beitrag von wambo » 12. Jul 2012 17:30

Auf Objektvariablen darf grundsätzlich nie direkt
aus anderen Klassen zugegriffen werden (Prinzip der Datenkapselung). Nutzen Sie dafür ausschließlich
die Methoden, die Sie laut Aufgabenstellung schreiben sollen!
Das kann man auch so interpretieren, dass wir das eben mit den Methoden zum Zugriff umsetzen sollen, und nicht anders umsetzen dürfen. Dass wir es 'verhindern' sollen wird nicht erwähnt...
Auch wenn danach
Die Zugriffsrechte für Objektvariablen sind also auch entsprechend zu setzen.
Ein Wink mit dem Zaunpfahl sein sollte....

wambo
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 20. Feb 2012 09:19

Re: Programmierprojekt: Tests

Beitrag von wambo » 12. Jul 2012 18:24

Aber ich hätte auch eine Frage zum Test a4d:
Ich versteh sie nicht ganz, aber was bei mir ankommt:
Es wird ein Stapel erstellt, darauf wird der Kreuzkönig gelegt.
2 Spieler (Karel / Chuck)
Karel bekommt eine Hand von der nur die letzten 2 von 5 karten passen.
Zuerst wird getestet ob die Anzahl richtig zurückgegeben wird.
Dann wird der Zug ausgeführt, anscheinend wird von der Benutzeroberfläche eine nach der Anderen durchprobiert.
Nach dem ersten Zug muss die Kreuz9 zurückgegeben werden, beim 2. Zug die Kreuz 10.
-> Hier verstehe ich nicht ganz wie man einen Zug mit dem Spieler ausführen kann, wenn bei "h=s.hand()" h mit der (leeren) Hand des Spielers überschrieben wird, dann werden h Karten hinzugefügt, und mit der Hand des Spielers wird ein Zug ausgeführt, aber die Hand h ändert sich???? die Hand des Spielers wird doch nirgends verändert. Aber anscheinend funktioniert es.


Neuer Spieler neue Hand
Am Stapel ändert sich nichts (also Kreuz 10 obenauf)
-> Dann sollte doch die Pik10 abzulegen sein, also der Rückgabewert !nicht! Null

Hier bekommt ich den Fehler: "Keine passende Karte"

Wenn ich die beiden Hände simuliere (also manuell den Spieler, den Stapel, die hand erstelle) finde ich keinen Fehler....



a4g:
Hier ist es ähnlich, hier soll eine Reihe von Karten geprüft werden, alle sollen kompatibel sein
falls einmal 'null' von der Methode zurückgegeben wird, kommt es zum Fehler (bei welcher karte)
Meiner Logik nach muss es irgendwann zum Fehler kommen, weil ja immer die abgelegte Karte zur obersten wird, und die kompatiblen Karten alle auf den Herz König (vom Anfang) bezogen sind
warum es bei mir bei 'null4' zum Fehler kommt, verstehe ich erst recht nicht :-/

Je länger ich mich in die Tests reinlese, desto verwirrter werde ich...

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Programmierprojekt: Tests

Beitrag von Owyn » 12. Jul 2012 19:21

wambo hat geschrieben:
Auf Objektvariablen darf grundsätzlich nie direkt
aus anderen Klassen zugegriffen werden (Prinzip der Datenkapselung). Nutzen Sie dafür ausschließlich
die Methoden, die Sie laut Aufgabenstellung schreiben sollen!
Das kann man auch so interpretieren, dass wir das eben mit den Methoden zum Zugriff umsetzen sollen, und nicht anders umsetzen dürfen. Dass wir es 'verhindern' sollen wird nicht erwähnt...
Auch wenn danach
Die Zugriffsrechte für Objektvariablen sind also auch entsprechend zu setzen.
Ein Wink mit dem Zaunpfahl sein sollte....
Das ist nicht nur ein Wink mit dem Zaunpfahl, sondern Teil desselben Absatzes. Man kann sich aus der Aufgabenstellung nicht nur die Teile herauspicken, die einem besonders gut gefallen...

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Programmierprojekt: Tests

Beitrag von Owyn » 12. Jul 2012 19:31

wambo hat geschrieben:Aber ich hätte auch eine Frage zum Test a4d:

(...)

-> Hier verstehe ich nicht ganz wie man einen Zug mit dem Spieler ausführen kann, wenn bei "h=s.hand()" h mit der (leeren) Hand des Spielers überschrieben wird, dann werden h Karten hinzugefügt, und mit der Hand des Spielers wird ein Zug ausgeführt, aber die Hand h ändert sich???? die Hand des Spielers wird doch nirgends verändert. Aber anscheinend funktioniert es.
Das Stichwort sind "Referenzen". Die Methode hand() liefert ein Objekt vom Typ Kartenhand zurück - genauer gesagt eine Referenz auf dieses Objekt. Wenn ich diese Kartenhand also verändere, ändert sie sich auch für den Spieler! Das gilt ganz allgemein für alle Objekte (für primitive Datentypen wie int, boolean, double etc. nicht).
Neuer Spieler neue Hand
Am Stapel ändert sich nichts (also Kreuz 10 obenauf)
-> Dann sollte doch die Pik10 abzulegen sein, also der Rückgabewert !nicht! Null

Hier bekommt ich den Fehler: "Keine passende Karte"
Auf dem Ablagestapel liegt keine Kreuz-10, sondern weiterhin der Kreuz-König - beim Test handelt es sich nicht um ein korrektes Mau-Mau-Spiel, die vom Spieler abgelegte Karte wird also nicht auf den Ablagestapel gelegt.
Und auf den Kreuz-König passt keine der Karten, die "Chuck Norris" auf der Hand hat, zumindest sollte keine passen.

a4g:
Hier ist es ähnlich, hier soll eine Reihe von Karten geprüft werden, alle sollen kompatibel sein
falls einmal 'null' von der Methode zurückgegeben wird, kommt es zum Fehler (bei welcher karte)
Meiner Logik nach muss es irgendwann zum Fehler kommen, weil ja immer die abgelegte Karte zur obersten wird, und die kompatiblen Karten alle auf den Herz König (vom Anfang) bezogen sind
warum es bei mir bei 'null4' zum Fehler kommt, verstehe ich erst recht nicht :-/
Auch hier gilt: Die vom Computerspieler abgelegten Karten landen nie auf dem Ablagestapel...

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

wambo
Windoof-User
Windoof-User
Beiträge: 25
Registriert: 20. Feb 2012 09:19

Re: Programmierprojekt: Tests

Beitrag von wambo » 12. Jul 2012 20:19

Owyn hat geschrieben:
Neuer Spieler neue Hand
Am Stapel ändert sich nichts (also Kreuz 10 obenauf)
-> Dann sollte doch die Pik10 abzulegen sein, also der Rückgabewert !nicht! Null

Hier bekommt ich den Fehler: "Keine passende Karte"
Auf dem Ablagestapel liegt keine Kreuz-10, sondern weiterhin der Kreuz-König - beim Test handelt es sich nicht um ein korrektes Mau-Mau-Spiel, die vom Spieler abgelegte Karte wird also nicht auf den Ablagestapel gelegt.
Und auf den Kreuz-König passt keine der Karten, die "Chuck Norris" auf der Hand hat, zumindest sollte keine passen.
Also es wird doch die ganz normale Funktion zug(stapel) aufgerufen, diese wiederum legt doch eine Karte auf den Stapel,entfernt sie von der Hand und gibt diese zurück. Wie wird dabei denn das Ablegen der Karte unterbunden?

Aber selbst wenn ich für jede Karte einzeln prüfe: die Zug Methode lässt bei mir nicht zu, dass eine Pik8,10,Dame oder Ass auf den Kreuz König abgelegt wird. Manuell muss ich ja mit der originalen Klasse Benutzeroberflaeche arbeiten, könnte es sein dass sich im Zusammenspiel mit der Neuen, oder durch vorherige Tests dabei Fehler ergeben?

Edit: um mal bei guten Etiquetten zu bleiben:
gruß zurück
Wambo

Benutzeravatar
Owyn
BSc Spammer
BSc Spammer
Beiträge: 1012
Registriert: 5. Sep 2005 21:53
Wohnort: Rheingau

Re: Programmierprojekt: Tests

Beitrag von Owyn » 12. Jul 2012 23:16

Dann scheint da Ihr Fehler zu liegen: In der Aufgabenstellung steht nichts davon, dass die vom Spieler abgelegte Karte in der Methode zug auch auf den Ablagestapel soll, sondern: "Geben Sie dann diese Karte als Ergebnis der Methode zurück und entfernen Sie sie aus der Kartenhand des Spielers."

Das Ablegen der Karte auf den Stapel passiert dann in der Klasse MauMau aus der Vorgabe (Zeile 146 bzw. 149).

Gruß,
Christian Heinig
All those who believe in psycho-kinesis, raise my hand.
(Steven Wright)

Antworten

Zurück zu „Archiv“