Het gevaar van 1 waarde
Stel je hebt een applicatie waarin persoonsgegevens worden beheert. Elke aangemaakte persoon krijgt als standaard geslacht de waarde "Man". En stel dat je nu een test bedenkt of programmeert waar een persoon wordt aangepast. En deze test bevat de volgende regel:
GESLACHT = MANJe wil bij deze test dus het geslacht wijzigen naar man. Daarom maak je snel een persoon aan en ga je daarna de gegevens wijzigen. Dus van de nieuwe persoon wijzig je het geslacht van man naar man. Anders gezegd: je test eigenlijk niets. Want als de wijziging niet opgeslagen wordt, is het geslacht man. Maar als de wijziging opgeslagen wordt ook.
Waar het om gaat is, dat als je een gegeven in al je testen slechts een waarde geeft, de waarde per ongeluk de juiste waarde kan hebben. Dit is op twee manieren te voorkomen:
1. Controleer voor de wijziging of het betreffende gegeven een een andere waarde heeft
GESLACHT <> MAN2. Geef het gegeven tijdens je testen twee verschillende waardes en controleer dit ook tweemaal. Dit verkleint de kans dat de gegevens per ongeluk elke keer opnieuw toch de gewenste waarde hadden.
Het gevaar van condities
Stel je hebt een applicatie waarmee je kortingen berekent. Een van de voorwaarden voor korting is de volgende
LEEFTIJD > 18 OR WOONPLAATS = UTRECHTEen persoon krijgt dus volgens de code alleen korting als hij ouder is dan 18 en woont in Utrecht. Maar stel nu dat de persoon ook 18 jaar mag zijn, hoe haal je dit dan uit de test? En stel dat de korting eigenlijk alleen uitgevoerd mag worden als de de leeftijd 18 jaar en ouder is, maar ook de woonplaats Utrecht is?
LEEFTIJD >= 18 AND WOONPLAATS = UTRECHT
Met de volgende testcase in ieder geval niet
LEEFTIJD = 20
WOONPLAATS = UTRECHTJe hebt nu alles getest. De korting is toegekend. Maar de fouten zitten er nog in.
Stel nu dat je slim bent en je wilt de randgevallen testen. Randgevallen zijn in ieder geval die twee waardes die er net voor zorgen dat de uitkomst anders is. In het geval van 18 jaar en ouder zijn dat dus de leeftijden 17 en 18. De leeftijd 17 geeft geen korting, de leeftijd 18 wel. Nu komt er wel een fout naar boven. Als de leeftijd 17 is, dan krijg je alsnog korting. Verder testen zou aantonen dat ook de leeftijd 16, 15 14 en 13 alsnog korting zouden geven. Dus er moet nog uitgebreider getest worden.
Als er voorwaarden zijn, die de woorden "en" of "of"bevatten (door ontwikkelaar eerder AND of OR genoemd), is het regelmatig handig om hier meerdere testen aan te besteden. Mijn favoriete methode is het aantal condities + 1. Op de volgende wijze uitgewerkt
A AND B AND C
A = TRUE, B = TRUE, C = TRUE => Resultaat = TRUE
A = FALSE, B = TRUE, C = TRUE => Resultaat = FALSE
A = TRUE, B = FALSE, C = TRUE => Resultaat = FALSE
A = TRUE, B = TRUE, C = FALSE => Resultaat = FALSE
Wat bij de onderste drie testcases gebeurt, is het volgende: ze verschillen slechts 1 waarde met het TRUE resultaat. Hierdoor kan je ervan uitgaan, dat als deze twee testcases het gewenste resultaat geven, het resultaat door de conditie met het verschil veroorzaakt wordt. Daarmee is die betreffende conditie 100% gedekt getest en niet alleen de volledige verzameling condities als geheel. En dat maakt de test een stuk betrouwbaarder.
En de andere variant
A OR B OR C
A = FALSE, B = FALSE, C = FALSE => Resultaat = FALSE
A = TRUE, B = FALSE, C = FALSE => Resultaat = TRUE
A = FALSE, B = TRUE, C = FALSE => Resultaat = TRUE
A = FALSE, B = FALSE, C = TRUE => Resultaat = TRUEAls je de grensgevallen en de AND/OR testen combineert, kom je dan op de volgende testcases uit:
LEEFTIJD = 18 AND WOONPLAATS = UTRECHT => Gewenste resultaat is korting
LEEFTIJD = 17 AND WOONPLAATS = UTRECHT => Gewenste resultaat is geen korting
LEEFTIJD = 18 AND WOONPLAATS = AMERSFOORT => Gewenste resultaat is geen kortingWanneer alle drie slagen, dan kan je ervan uitgaan dat je de eis qua condities voldoende hebt getest.
Geen opmerkingen:
Een reactie posten
Opmerking: Alleen leden van deze blog kunnen een reactie posten.