Dieses Repository dient als Spielwiese, um git bisect kennenzulernen und zu üben.
Das Repository enthält eine kleine Python-Anwendung (stats.py), die statistische Berechnungen durchführt – zum Beispiel Summe, Durchschnitt, Median und Standardabweichung.
Irgendwo in der Commit-Historie hat sich ein Bug eingeschlichen. Eine Funktion liefert seitdem falsche Ergebnisse, ohne dass dabei ein Fehler geworfen wird. Deine Aufgabe ist es, mit git bisect den genauen Commit zu finden, der den Fehler eingeführt hat.
- Python 3 installiert
- Git installiert
Führe die Anwendung aus und schau dir die Ausgabe an:
python stats.pyÜberlege, welcher der ausgegebenen Werte nicht stimmen könnte. Das Testskript hilft dir dabei, den Fehler eindeutig zu erkennen:
python test_average.pyMarkiere zunächst den aktuellen Stand als fehlerhaft und einen frühen Commit als funktionierend:
git bisect start
git bisect bad # aktueller Stand ist fehlerhaft
git bisect good <commit-hash> # ein früher Commit, der noch korrekt warDen Hash eines frühen Commits findest du mit:
git log --onelineGit wechselt nun automatisch zwischen Commits. Nach jedem Wechsel testest du, ob der Bug vorhanden ist:
python test_average.pyTeile Git dann das Ergebnis mit:
git bisect good # dieser Commit ist noch fehlerfrei
# oder
git bisect bad # dieser Commit ist bereits fehlerhaftStatt jeden Commit manuell zu testen, kann Git das Testskript auch selbst ausführen:
git bisect run python test_average.pySobald Git den problematischen Commit gefunden hat, schau dir die Änderung genau an:
git show <gefundener-commit-hash>Kannst du den Fehler im Code erkennen?
Vergiss nicht, die Bisect-Sitzung abzuschließen, bevor du weitermachst:
git bisect resetFüge das Repository https://github.com/codevibe-de/datasets als Submodul hinzu, z.B. unter dem Pfad "data"
Das vorhandene Skript run_dataset.py lädt einen Datensatz und gibt die Statistiken aus,
wobei der Code aus stats.py verwendet wird.
python3 run_dataset.py data/fibonacci.csv
python3 run_dataset.py data/float_values.csv
python3 run_dataset.py data/negative_values.csv
python3 run_dataset.py data/empty.csvNach dieser Übung solltest du verstehen:
- wie
git bisecteine binäre Suche über die Commit-Historie durchführt - wie du mit
git bisect goodundgit bisect badCommits bewertest - wie du mit
git bisect rundie Suche vollständig automatisierst - warum ein automatisierbarer Test die Voraussetzung für eine effiziente Bisect-Suche ist