Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Testgetriebene Entwicklung (TDD)

Nach dieser Lektion: Ich kann einen fehlschlagenden Test schreiben, ihn bestehen lassen und dann aufräumen.

Lektion, 60 Min.11 BefehleLab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

Erst der Test, dann der Code

Testgetriebene Entwicklung, englisch Test-driven Development oder kurz TDD, heißt: Sie schreiben den Test, bevor Sie den Code schreiben. So wächst eine Funktion in kleinen Schritten, und jeder Schritt ist geprüft.

Eine Kassensoftware soll Cent-Beträge als Text mit Komma anzeigen, zum Beispiel „1,50 Euro“. Wer erst alles schreibt, findet die Fehler erst spät. Wer in kleinen Schritten arbeitet, findet sie sofort.

Am Ende dieser Lektion

Notiz

Ich kann einen fehlschlagenden Test schreiben, ihn bestehen lassen und dann aufräumen.

Schlüsselwörter

BegriffWas er bedeutet
RotDer neue Test schlägt fehl, wie gewollt
GrünDer Test besteht mit möglichst wenig Code
Refactoringden Code aufräumen, ohne sein Verhalten zu ändern
Regressionstestein alter Test, der meldet, wenn eine Änderung etwas Altes zerstört
kleiner Schrittein neuer Test für genau eine neue Regel

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Der Zyklus heißt Rot, Grün, Refactoring

Jede Runde hat drei Schritte. Rot: Sie schreiben einen Test für eine Regel, die noch nicht stimmt, und sehen ihn scheitern. Grün: Sie schreiben gerade so viel Code, dass er besteht. Refactoring: Sie räumen den Code auf, und alle Tests bleiben grün.

Dann beginnt die nächste Runde mit der nächsten Regel.

Eine Funktion wächst im Lab Test für Test

Sie bauen eurotext(cent) im Lab. Zuerst schreiben Sie einen Test für „1,50 Euro“. Er scheitert, denn die Funktion gibt es noch nicht.

Dann schreiben Sie die Funktion, fügen einen zweiten Test für 5 Cent hinzu und lassen auch ihn zuerst scheitern. Lesen Sie jedes Mal die letzte Zeile des Testlaufs.

Den Ordner anlegen

Befehl
mkdir -p ~/testlabor

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Hineingehen

Befehl
cd ~/testlabor

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Alte Dateien dieser Übung entfernen

Befehl
rm -f eurotext.py test_eurotext.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Rot: den ersten Test schreiben

Befehl
printf 'import unittest\nfrom eurotext import eurotext\n\nclass TestEurotext(unittest.TestCase):\n    def test_ein_euro_fuenfzig(self):\n        self.assertEqual(eurotext(150), "1,50 Euro")\n' > test_eurotext.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Der Testlauf, letzte Zeile

Befehl
python3 -m unittest test_eurotext 2>&1 | tail -n 1

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Grün: die einfachste Funktion

Befehl
printf 'def eurotext(cent):\n    euro, rest = divmod(cent, 100)\n    return str(euro) + "," + str(rest) + " Euro"\n' > eurotext.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Der Testlauf, letzte Zeile

Befehl
python3 -m unittest test_eurotext 2>&1 | tail -n 1

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Beispiel: zwei Runden mit eurotext

RundeNeuer TestFarbe vor dem CodeÄnderung am Code
1eurotext(150) ergibt 1,50 EuroRot: es gibt die Funktion nichtEuro und Rest mit divmod trennen
2eurotext(5) ergibt 0,05 EuroRot: die Funktion gibt 0,5 Euro ausBei Resten unter 10 eine 0 voranstellen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Rot: den zweiten Test anhängen

Befehl
printf '\n    def test_fuenf_cent(self):\n        self.assertEqual(eurotext(5), "0,05 Euro")\n' >> test_eurotext.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Der Testlauf, letzte Zeile

Befehl
python3 -m unittest test_eurotext 2>&1 | tail -n 1

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Grün: die Funktion verbessern

Befehl
printf 'def eurotext(cent):\n    euro, rest = divmod(cent, 100)\n    cents = str(rest)\n    if rest < 10:\n        cents = "0" + cents\n    return str(euro) + "," + cents + " Euro"\n' > eurotext.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Der Testlauf, letzte Zeile

Befehl
python3 -m unittest test_eurotext 2>&1 | tail -n 1

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele glauben, ein roter Test sei ein Misserfolg. In diesem Zyklus ist Rot der erste Beweis: Der Test kann scheitern. Ein Test, der nie rot war, könnte nichts prüfen. Schreiben Sie auch nie zuerst viel Code und danach alle Tests auf einmal.

Aufräumen ist sicher, wenn die Tests grün sind

Beim Refactoring ändern Sie den Aufbau des Codes, nicht sein Verhalten: bessere Namen, weniger Wiederholung. Nach jeder kleinen Änderung läuft der Testlauf.

Bleibt er grün, ist nichts kaputtgegangen. Alte Tests, die so schützen, heißen Regressionstests.

Über dieses Lab und seinen Quellcode: Lab „Linux im Alltag“: die dreißig Befehle, die Entwickelnde auswendig tippen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.