0%

Programme planen, bauen und testen · Übung

Arbeite Beispiele von Hand durch

Bevor du Python nach einem Ergebnis fragst, arbeite einige Ergebnisse selbst durch. Ein von Hand durchgerechnetes Beispiel macht eine Anforderung konkret.

Die Punktzahl des Quiz beginnt bei null und erhält für jedes True-Ergebnis einen Punkt. Hier ist eine Ergebnisliste:

[True, False, True]

Verfolge die Punktzahl Ergebnis für Ergebnis:

ErgebnisPunktzahl danach
Start0
True1
False1
True2

Schreibe die erwartete Punktzahl 2 auf, bevor du quiz_score() schreibst.

Warum solltest du das zuerst tun?

Wenn der Code später 1 oder 3 zurückgibt, hast du eine genaue Abweichung, die du untersuchen kannst. Ohne ein unabhängig ermitteltes erwartetes Ergebnis ist es verlockend, einfach der Ausgabe des Programms zu vertrauen.

Das Durchrechnen der Punktzahl deckt auch unbeantwortete Fragen auf:

  • Ergibt eine leere Ergebnisliste eine Punktzahl von null?

  • Fügt jede richtige Antwort genau einen Punkt hinzu?

  • Kann die Punktzahl jemals größer als die Anzahl der Ergebnisse sein?

Diese Fragen gehören in die Anforderungen. Sie vor der Umsetzung zu entdecken ist weniger aufwendig, als sie erst zu finden, wenn mehrere Funktionen bereits auf einer Annahme beruhen.

Verwende unterschiedliche Arten von Beispielen

Wähle eine kleine Gruppe mit unterschiedlichen Zwecken:

  • einen Normalfall;

  • einen Fall mit null oder einer leeren Sammlung, sofern er erlaubt ist;

  • eine wichtige Grenze;

  • einen Fall, in dem jede Antwort richtig oder jede Antwort falsch ist.

Bei der Quizpunktzahl prüft eine leere Liste den Startwert. Eine Liste ausschließlich mit True-Werten prüft, ob jede richtige Antwort gezählt wird. Jedes Beispiel hat eine Aufgabe.

ErgebnisseErwartete PunktzahlZweck
[True, False, True]2normale Mischung
[]0leerer Fall
[False]0keine richtige Antwort
[True, True, True, True]4jede Antwort richtig

Ermittle erwartete Ergebnisse unabhängig

Berechne ein „erwartetes“ Ergebnis nicht durch einen Aufruf der Funktion, die du gerade testest:

expected = quiz_score([True, False, True])

Damit fragst du nur denselben Code, ob er sich selbst zustimmt.

Halte stattdessen das Ergebnis fest, das du aus der Anforderung hergeleitet hast:

expected = 2

Das Beispiel ist nützlich, weil es aus einem getrennten Gedankengang stammt. Wenn eine Funktion ihr eigenes erwartetes Ergebnis erfindet, ist das ein bisschen so, als dürfte sie ihre eigenen Hausaufgaben benoten.

Warum sollte ein erwartetes Ergebnis unabhängig von der getesteten Funktion berechnet werden?

Aufgabe

Plane und implementiere quiz_score(results).

Die Regel lautet:

start at zero and add one point for every True result

Der Startcode enthält drei Beispiel-Dictionarys. Verfolge vor dem Implementieren der Funktion jede Ergebnisliste von Hand und ersetze ihr None durch die erwartete Punktzahl.

Implementiere dann die Funktion und behalte die Schleife bei, die die drei Punktzahlen ausgibt. Die endgültige Ausgabe muss lauten:

2
0
3

Deine Funktion muss auch für andere Listen mit booleschen Ergebnissen funktionieren.