Ich habe hier immer mal wieder erwähnt, dass das AWP von automatischen Tests abgesichert wird. Einige werden sich vielleicht fragen: “Automatische Tests ? Was ist das ?”. Hier ein kleiner Einblick:

Mit den automatischen Tests (auch Unit-Tests genannt) kann man einzelne Programmteile auf ihre richtige Funktionsweise testen. Diese Tests kann man so oft man will aufrufen. Sie geben einem die Sicherheit, dass man nicht durch eine Änderung einer Stelle im Programm an einer anderen Stelle einen ungewüschten Nebeneffekt erzeugt oder sogar was kaputt gemacht hat.

Ein Beispiel: ich habe die Funktion “ermittle den nächsten freien Mitspieler” und will sicherstellen, dass dort immer der richtige Spieler ermittelt wird. In der Testumgebung stelle ich dann beispielsweise zwei Mannschaften auf (die beiden Test-Teams, die bei allen Tests genommen werden), gebe Spieler 6 den Ball und rufe die Funktion “ermittle den nächsten freien Mitspieler”. Da ich in den Tests weiss, wer der nächste freie Mitspieler ist (hier zum Beispiel Spieler 8), sage ich der Testumgebung: Spieler 6 hat den Ball, und bei der Funktion “ermittle den nächsten freien Mitspieler” muss als Ergebnis die 8 herauskommen. Diese Tests baue ich dann mit ein paar verschiedenen Situationen auf.

Die Tests lasse ich nach jeder Änderung im AWP erneut komplett laufen, um zu sehen, das noch Alles so funktioniert wie erwartet. Alternativ müsste ich ja nach jeder Änderung immer ein paar Spiele durchlaufen lassen und mir Alles ansehen. Oder hoffen, das nichts passiert ist, ohne überhaupt zu testen.

Man kann mit diesen Tests zwar auch nicht 100% sicher sein, die Wahrscheinlichkeit eines unbemerkten Fehlers ist dadurch allerdings erheblich eingeschränkt.

Genauso verhält es sich mit Fehlern, die ich feststelle: Bevor ich den Fehler behebe, schreibe ich einen Test, der das richtige Ergebnis einer bestimmten Situation erwartet. Dieser Test wird dann natürlich erstmal fehlschlagen. Dann behebe ich den Fehler. Das Ergebnis muss dann sein, das danach alle Tess fehlerfrei laufen, also sowohl der Neue (was bedeutet, ich habe den Fehler gelöst) als auch alle alten Tests (was bedeutet, ich habe nicht bei der Behebung des aktuellen Fehlers direkt einen neuen Fehler eingebaut).

Derselbe Fehler dürfte dann normalerweise mit der selbsten Konstellation nie mehr auftreten. Wenn doch, finden ihn die automatischen Tests.

Diese Vorgehen ist natürlich in der Entwicklungsphase aufwendiger, spart aber hinterher erheblich Zeit bei der Bugsuche ein und liefert im Ergebnis ein von Anfang an stabileres System.