LU07.A07 - Sicherheitsnetz zuerst

Schreiben Sie Characterization Tests für eine Funktion, deren Verhalten niemand mehr kennt - und refactoren Sie sie erst danach.

Ausgangslage

Diese Funktion läuft seit zwei Jahren im Notensystem. Dokumentation gibt es keine, Tests auch nicht.

def notenschnitt(punkte, maximum):
    if maximum == 0:
        return 1
    note = 1 + 5 * (sum(punkte) / len(punkte)) / maximum
    if note > 6:
        note = 6
    return round(note * 2) / 2

1. Verhalten erkunden

Rufen Sie die Funktion mit verschiedenen Eingaben auf und notieren Sie, was herauskommt. Denken Sie an die Ränder: leere Liste, maximum = 0, mehr Punkte als das Maximum, exakt die Höchstpunktzahl.

2. Verhalten festhalten

In main_test.py sind sechs Tests vorbereitet, die noch 0 als erwarteten Wert enthalten. Tragen Sie den beobachteten Wert ein - auch dann, wenn er Ihnen falsch vorkommt. Ein Characterization Test hält fest, was ist, nicht was sein sollte.

Raten Sie nicht. Ein geratener Wert fällt sofort durch, weil die Funktion etwas anderes liefert.

Auch der Absturz gehört dazu: test_leere_punkteliste erwartet eine Ausnahme. Tragen Sie ein, welche tatsächlich auftritt.

3. Refactoren

Erst jetzt: sprechende Namen, benannte Konstanten, die Rundungsregel als eigene Funktion. Nach jedem Schritt pytest. Alle sieben Tests bleiben grün.

4. Bewerten

Notieren Sie in BEFUND.md, welche Ergebnisse Sie für fachlich falsch halten und was zu tun wäre. Ändern Sie das Verhalten nicht - das wäre ein Bugfix und gehört in einen eigenen Commit nach dem Refactoring.

Bewertung

Teil Punkte
Tests (main_test.py) 14
pylint (main.py) 5

Die Punkte gibt es nur, wenn der eingetragene Wert dem tatsächlichen Verhalten entspricht und die Funktion nach dem Refactoring immer noch so reagiert.

Leitfragen


https://github.com/templates-python/m323-lu07-a07-characterization

© Kevin Maurizi