Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
150 KAPITEL 12. PROGRAMMENTWURF<br />
Losungsweg gestellt wurden, eingehalten werden. Vollstandig bedeutet, da das Programm fur<br />
alle zulassigen Anfangsgro en korrekt arbeitet. Dabei ist es im allgemeinen allerdings nicht<br />
moglich, Testlaufe fur alle moglichen Anfangsgro en durchzufuhren, in der Regel gibt es namlich<br />
unendlich viele mogliche Anfangszustande. Daher besteht eine wesentliche Aufgabe der Testphase<br />
darin, sogenannte Testmengen zu bilden. Testmengen werden derart gebildet, da die Menge<br />
der zulassigen Anfangsgro en in (disjunkte) Teilmengen zerlegt wird, wobei alle Elemente einer<br />
Teilmenge jeweils gewisse Gemeinsamkeiten bzw. gleichartige Charakteristiken aufweisen. Aus<br />
jeder dieser Teilmengen wird ein Vertreter gewahlt und in die Testmenge eingefugt. Hat man<br />
eine korrekte Zerlegung der Menge der zulassigen Anfangsgro en gewahlt, d.h. eine korrekte<br />
Testmenge bebildet, und arbeitet das Programm fur alle Elemente der Testmenge korrekt, dann<br />
kann man ruckschlie en, da das Programm vollstandig korrekt ist. Allerdings ist die Art und<br />
Weise einer Teilmengenzerlegung der Menge der Anfangsgro en aufgabenspezi sch und erfordert<br />
vom Programmierer Erfahrung und Intuition.<br />
Leider wird die Testphase nicht nur von Programmieranfangern hau g vernachlassigt. Man la t<br />
sein Programm ein- oder zweimal laufen, alles lauft glatt ab, das Programm scheint also korrekt<br />
zu sein. Hierbei handelt es sich um ein psychologisches Problem; niemand gesteht sich selbst<br />
gerne Fehler ein, also ist man auch gar nicht daran interessiert, Fehler zu nden. Daher der<br />
dringende Appell: Widmen Sie insbesondere der Testphase viel Aufmerksamkeit, und lassen Sie<br />
das Programm eventuell auch mal von anderen Personen testen.<br />
In Kapitel 3.1.4 wurden einige Teststrategien vorgestellt, die im folgenden nun am obigen Beispiel<br />
demonstriert werden. Von besonderer Bedeutung ist dabei wie bereits erwahnt die Konstruktion<br />
von Testmengen, wobei insbesondere Grenzwerte zu bercksichtigen sind.<br />
Notieren Sie sich beim Zusammenstellen der Testmengen nicht nur die Ausgangsgro en, sondern<br />
jeweils auch das erwartete Ergebnis, und uberprufen Sie nach Beendigung des Programms, ob<br />
das tatsachliche Ergebnis mit dem erwarteten ubereinstimmt.<br />
Im Umfeld der Hamsterprogramme bestehen Testmengen immer aus moglichen Hamster-Territorien,<br />
auf denen das zu testende Hamsterprogramm gestartet werden konnte. Abbildung 12.2<br />
enthalt eine typische Testmenge fur das obige Beispiel. Teil (a) der Abbildung zeigt eine " normale\<br />
Hamsterlandschaft, Teil (b) skizziert den Grenzfall, da der Hamster bereits anfangs direkt<br />
vor dem Berg steht und in Teil (c) ist der Berg nur eine einzige Stufe hoch.<br />
Bei der Konstruktion von Testmengen fur Ihre Hamsterprogramme ist es wichtig zu wissen,<br />
da Sie naturlich nur Situationen berucksichtigen mussen, die auch mit der Aufgabenstellung<br />
konform sind. Wird Ihr Programm mit nicht-zulassigen Ausgangsgro en gestartet, kommt es<br />
zwangslau g zu Fehlern; aber das sind nicht Ihre Fehler, sondern die Fehler desjenigen, der das<br />
Programm gestartet hat.<br />
Lassen Sie nun das Hamsterprogramm fur alle Elemente der Testmenge laufen. Kontrollieren<br />
Sie dabei sowohl den Zustand der Landschaft bei Beendigung des Programmes (auf jeder Stufe<br />
einschlie lich dem Gipfel { und nur dort { liegt genau ein Korn; der Hamster be ndet sich auf<br />
dem Gipfel) als auch den Weg des Hamsters (der Hamster darf nicht in " Absturzgefahr\ kommen).<br />
Sie werden feststellen, da das Beispielprogramm fur alle Elemente der Testmenge korrekt<br />
ablauft und korrekte Ergebnisse liefert. Das Programm scheint also in der Tat die Problemstellung<br />
korrekt und { unter der Voraussetzungen, da die Testmenge korrekt gebildet wurde {<br />
vollstandig zu losen.