Am Beispiel einer Aufgabe des Informatik-Schülerwettbewerbs “Informatik-Biber” erklären wir die Idee hinter dem Test-First-Ansatz.

Der Test-First-Ansatz

Die übliche Vorgehensweise beim Programmieren und Testen ist es, erst zu coden, dann zu testen. Beim Test-First-Ansatz wird dieses Prinzip umgekehrt: Die grundlegende Idee des Ansatzes ist es, die Tests für ein System zu schreiben, bevor das System implementiert wird. Die Tests können dabei als Beispiele für die Nutzung des Systems beschrieben werden oder bereits selbst als ausführbare Testfälle implementiert werden, der Entwickler kann dann das System gegen diese Tests implementieren. Als Beispiele dafür sind die Ansätze Test-Driven Development (TDD), Acceptance Test-Driven Development (ATDD) oder Behavior-Driven Development (BDD) bekannt.

Das prinzipielle Vorgehen bei ausführbaren Testfällen am Beispiel von TDD:

  1. Schreibe einen neuen Testfall bzw. ändere einen bestehenden Testfall.
  2. Führe die Testfälle aus und prüfe, ob sie fehlschlagen.
  3. Implementiere den Code.
  4. Führe die Testfälle erneut aus und prüfe, ob sie fehlschlafen.
  5. Führe ein Refactoring deines Codes durch.
  6. Wiederhole 3) bis 5) bis die Testfälle erfolgreich durchlaufen.

Dieses Vorgehen birgt eine Menge von Vorteilen:

  • Testen wird zum festen Bestandteil der Entwicklung.
  • Testen findet nicht unter Zeitdruck statt.
  • Der Code wird testbar entwickelt.
  • Code und Testfälle sind synchron, Testfälle können nicht veralten.
  • Die Testfälle werden eher gegen die Anforderungen entwickelt, als gegen den Code.

Der Informatik-Biber

Der “Informatik-Biber” ist Deutschlands größter Informatik-Schülerwettbewerb für Kinder und Jugendliche von Klasse 3 bis 13. Der Wettbewerb wird seit 2007 jährlich durch das BWINF (Bundesweite Informatikwettbewerbe) ausgerichtet. Zur Vorbereitung auf den Wettbewerb können verschiedene Aufgaben online trainiert werden und mit der Programmierumgebung “Blockly” auch online programmiert werden. Bei vielen dieser Aufgaben werden die erwarteten Ergebnisse in Form von Testfällen definiert, die Teilnehmenden lernen damit schon früh die Bedeutung des Testens und das Prinzip des Test-First-Ansatzes kennen.

Beispiel: ein Programm mit einem Passwort absichern

Das Prinzip des Test-First-Ansatzes möchten wir hier am Beispiel einer Übungsaufgabe (die 4-Sterne-Version der Aufgabe) zeigen.

Die folgende Aufgabe gilt es zu lösen. In dem Beispiel sollen Passwörter geprüft werden und – abhängig vom Ergebnis der Prüfung – drei verschiedene Ausgaben an den Benutzer gemacht werden.

1. Schritt: Testfälle erstellen

In einem Online-Editor für die Programmierumgebung “Blockly” kann das Programm geschrieben werden. Daneben finden sich die bereits erstellen Testfälle, für jede der drei möglichen Regeln gibt es zwei Testfälle, d.h. insgesamt sechs Testfälle. Das Programm gilt also dann als erfolgreich umgesetzt, wenn alle diese Testfälle erfolgreich ausgeführt werden können.

2. Schritt: Testfälle ausführen

Bevor wir die erste Zeile Code schreiben, führen wir die Testfälle aus. Wie erwartet sind alle Testfälle fehlerhaft:

3. Schritt: Einen kleinen Teil des Programms umsetzen und die Testfälle erneut ausführen

Zunächst entwickeln wir den Code für die erste der drei Regeln (wenn das Passwort ausschließlich aus Kleinbuchstaben besteht, soll “Nur Kleinbuchstaben” ausgegeben werden). Anschließend führen wir die Testfälle aus und prüfen das Ergebnis: zwei Testfälle sind grün, vier Testfälle sind noch rot. Wir wissen also, dass diese Regel schon richtig umgesetzt ist, wir wissen aber auch, dass wir noch nicht fertig sind.

4. Schritt: Einen weiteren Teil umsetzen und die Testfälle ausführen

Jetzt entwickeln wir den Code für die zweite Regel (wenn das Passwort ausschließlich aus Großbuchstaben besteht, soll “Nur Großbuchstaben” ausgegeben werden). Anschließend führen wir die Testfälle aus und prüfen das Ergebnis: vier Testfälle sind grün, zwei Testfälle sind noch rot. Wir wissen also, dass die erste und die zweite Regel schon richtig umgesetzt sind, wir wissen aber auch, dass wir immer noch nicht fertig sind.

5. Schritt: Den letzten Teil umsetzen und die Testfälle ausführen

Nun entwickeln wir den Code für die dritte und letzte Regel (wenn das Passwort sowohl aus Klein- als auch aus Großbuchstaben besteht, soll “Sehr gut” ausgegeben werden). Anschließend führen wir die Testfälle aus und prüfen das Ergebnis: alle sechs Testfälle sind grün. Wir wissen also, dass wird die dritte Regel richtig umgesetzt haben und auch die erste und die zweite Regel immer noch richtig umgesetzt sind. Da alle Testfälle grün sind, wissen wir, dass wir das Programm richtig umgesetzt haben.

An dieser Stelle sieht man auch, dass man den Code, den man in den vorherigen Schritten bereits implementiert hat, nochmal verändern muss. Das könnte theoretisch bedeuten, dass wir den bestehenden Code wieder kaputt machen, da wir aber unsere Testfälle haben, können wir sicherstellen, dass immer noch alles richtig funktioniert.