Java Reference
In-Depth Information
12.7.5 Test
In der Testphase wird das Programm auf allen Landschaften der Testmenge (siehe Abbildung 12.3
gestartet. In den Fällen (a) und (c) liefert es auch die erwarteten korrekten Ergebnisse. In Fall (b) ge-
rät das Programm jedoch in eine Endlosschleife: Die beiden Reihen werden ununterbrochen zyklisch
vom Hamster durchlaufen. Also ist das Programm nicht korrekt!
Es muss nun untersucht werden, woran der Fehler liegt: Der Hamster erntet die untere Reihe ab
und testet die Bedingung der while-Schleife. Die boolesche Funktion liefert den Wert true , d.h.
die while-Schleife wird betreten. Also begibt sich der Hamster in die obere Reihe und erntet. An-
schließend wird die Bedingung der if-Anweisung überprüft. Die boolesche Funktion liefert den Wert
false , weil sich rechts vom Hamster eine Mauer befindet. Da die if-Anweisungen keinen else-Teil
enthält, wird als nächstes wieder die Bedingung der while-Schleife überprüft. Eigentlich müsste die-
se nun den Wert false liefern, weil ja alle Reihen abgegrast sind. Tut sie aber leider nicht. Der
Grund hierfür ist der, dass als Vorbedingung für die boolesche Funktion weitereReihe-Links-
VomHamsterExistiert , die in der Bedingung der while-Schleife aufgerufen wird, angenommen
wird, dass der Hamster gerade in Blickrichtung Osten schaut. Diese Vorbedingung ist aber nicht er-
füllt; denn ein Richtungswechsel wird nur im true-Teil der if-Anweisung, nicht aber im false-Teil der
if-Anweisung vorgenommen. Dies haben wir bei der obigen Lösung schlicht vergessen. Wir müssen
das Hauptprogramm dementsprechend korrigieren:
/*
* der Hamster soll einzelne Koernerreihen abgrasen,
* solange noch weitere Reihen existieren;
* er unterscheidet dabei, ob er die Reihen von
* Osten oder von Westen aus abgrast
*/
void main() {
ernteEineReiheNachOsten();
while (weitereReiheLinksVomHamsterExistiert()) {
begibDichLinksUmInNaechsteReihe();
ernteEineReiheNachWesten();
if (weitereReiheRechtsVomHamsterExistiert()) {
begibDichRechtsUmInNaechsteReihe();
ernteEineReiheNachOsten();
} else {
kehrt();
}
}
}
Nach der Compilierung muss nun das Programm erneut mit allen (!) Hamster-Landschaften der Test-
menge getestet werden. Dieses Mal liefert es tatsächlich in allen Fällen die erwarteten Ergebnisse
(siehe auch die Ausschnitte des Testlaufprotokolls in Abbildung 12.4).
12.7.6 Dokumentation
Der Vollständigkeit halber werden im Folgenden nochmal alle Bestandteile der Dokumentation zu-
sammengestellt.
Search WWH ::




Custom Search