0%

Programma’s plannen, bouwen en testen · oefening

Werk voorbeelden met de hand uit

Werk zelf een paar antwoorden uit voordat je Python om een antwoord vraagt. Een met de hand uitgewerkt voorbeeld maakt een eis concreet.

De quizscore begint op nul en krijgt er voor elk resultaat True één punt bij. Hier is een lijst met resultaten:

[True, False, True]

Volg de score één resultaat tegelijk:

ResultaatScore daarna
start0
True1
False1
True2

Schrijf de verwachte score, 2, op voordat je quiz_score() schrijft.

Waarom doe je dit eerst?

Als de code later 1 of 3 teruggeeft, heb je een precieze afwijking om te onderzoeken. Zonder een onafhankelijk verwacht resultaat is het verleidelijk te vertrouwen op wat het programma afdrukt.

Het doorlopen van de score legt ook onbeantwoorde vragen bloot:

  • Levert een lege resultatenlijst een score van nul op?

  • Voegt elk goed antwoord precies één punt toe?

  • Kan de score ooit hoger zijn dan het aantal resultaten?

Die vragen horen bij de eisen. Ze vóór de implementatie ontdekken kost minder dan wanneer er al meerdere functies van een aanname afhankelijk zijn.

Gebruik verschillende soorten voorbeelden

Kies een kleine set met verschillende doelen:

  • een normaal geval;

  • een nulwaarde of leeg geval wanneer dat is toegestaan;

  • een belangrijke grens;

  • een geval waarin elk antwoord goed of elk antwoord fout is.

Voor de quizscore controleert een lege lijst de beginwaarde. Een lijst met alleen True controleert dat elk goed antwoord wordt meegeteld. Elk voorbeeld heeft een taak.

ResultatenVerwachte scoreDoel
[True, False, True]2normale mix
[]0leeg geval
[False]0geen goede antwoorden
[True, True, True, True]4elk antwoord goed

Houd verwachte resultaten onafhankelijk

Bereken een “verwacht” resultaat niet door de functie aan te roepen die je test:

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

Dat vraagt alleen aan dezelfde code om het met zichzelf eens te zijn.

Leg in plaats daarvan het resultaat vast dat je uit de eis hebt afgeleid:

expected = 2

Het voorbeeld is nuttig, omdat het uit een afzonderlijke redenering kwam. Een functie haar eigen verwachte resultaat laten bedenken lijkt een beetje op haar het eigen huiswerk laten nakijken.

Waarom moet een verwacht resultaat onafhankelijk van de geteste functie worden berekend?

Opdracht

Plan en implementeer quiz_score(results).

De regel is:

start at zero and add one point for every True result

De startcode bevat drie voorbeelddictionaries. Volg voordat je de functie implementeert elke resultatenlijst met de hand en vervang de bijbehorende None door de verwachte score.

Implementeer daarna de functie en behoud de lus die de drie scores afdrukt. De uiteindelijke uitvoer moet zijn:

2
0
3

Je functie moet ook werken voor andere lijsten met booleaanse resultaten.