0%

Programma’s plannen, bouwen en testen · oefening

Zoek bewust naar randgevallen

Een normaal voorbeeld laat zien dat een programma in een vertrouwd geval werkt. Een randgeval controleert een waarde dicht bij de grens van een regel.

Het quizplan vereist dat elke titel, vraagtekst en elk verwacht antwoord bruikbare tekst bevat:

def has_usable_text(text):
    return len(text.strip()) > 0

"Ocean Facts" testen is nuttig, maar laat niet zien of de functie met lege tekst of tekst met extra spaties omgaat. Geef die randgevallen ook een beurt:

assert has_usable_text("") is False
assert has_usable_text("   ") is False
assert has_usable_text("?") is True

Het geval met één teken is belangrijk, omdat de eis niet-leeg zegt en niet “minstens twee tekens”.

Veelvoorkomende plekken om te zoeken

Voor het quizprogramma vind je randgevallen vaak bij:

  • precies drie vragen, het kleinste geldige plan;

  • nul goede antwoorden of een perfecte score;

  • een lege string, lijst of dictionary;

  • tekst met alleen spaties;

  • een vraagtekst of antwoord van één teken;

  • twee vraagteksten die na het opschonen overeenkomen;

  • een antwoord met spaties of andere hoofdletters.

Voeg deze gevallen niet allemaal blind toe. Kies gevallen die het gedrag dat de eisen beloven kunnen veranderen.

Grenswaardetabellen leggen gaten bloot

Schrijf voor een tekstregel een kleine tabel voordat je code schrijft:

Oorspronkelijke tekstNa strip()Bruikbaar?
""""False
" """False
"?""?"True
" honey ""honey"True

De tabel maakt de grens zichtbaar: na het opschonen zijn nul tekens onbruikbaar en is één teken bruikbaar.

Testgegevens moeten een reden hebben

Elk testgeval moet een vraag beantwoorden:

  • Telt tekst met alleen witruimte als leeg?

  • Wordt de kortste niet-lege vraagtekst geaccepteerd?

  • Blijft gewone tekst behouden bij het opschonen?

Willekeurige waarden kunnen problemen losmaken, maar een bewust gekozen grensgeval vertelt je precies welk punt je test.

De controle op het aantal vragen slaagt vanaf drie vragen. Welk geval controleert het meest direct of de grenswaarde is inbegrepen?

Opdracht

Implementeer en test has_usable_text(text) volgens deze afspraak:

  • na het verwijderen van witruimte aan de buitenkant geeft lege tekst False terug;

  • één of meer overgebleven tekens geven True terug.

De startcode bevat een functie met twee fouten in randgevallen en een lijst cases met kleine dictionaries. Vervang elke None in cases door de verwachte booleaanse waarde.

Behoud de lus die de velden "text" en "expected" van elk geval met assert controleert. Druk dit af zodra alle controles slagen:

Boundary checks passed.

Je functie moet ook werken voor tekst die niet in cases staat.