Skip to main content

Een van mijn favoriete uitspraken is: “werk slimmer, niet harder.” Dit geldt natuurlijk ook voor softwaretests. Dit betekent dat ik zo min mogelijk werk wil doen en tegelijkertijd de grootste waarde wil leveren.

Laten we het dus hebben over black-box-testtechnieken en hoe deze kunnen worden toegepast om testgevallen te maken en de belangrijkste bugs in de applicatie die wordt getest te vinden.

Wat is black-box-testen?

Laten we beginnen met te begrijpen wat black-box-testen is—in tegenstelling tot white-box-testen. Het is een type softwaretest waarbij de tester geen toegang heeft tot de interne structuur van de app die wordt getest. In plaats daarvan heeft de tester alleen toegang tot de invoer en uitvoer van het systeem en kan hij de functionaliteit van de software testen op basis van de specificaties van de vereisten.

Want more from The CTO Club?

Create a free account to finish this piece and join a community of CTOs and engineering leaders sharing real-world frameworks, tools, and insights for designing, deploying, and scaling AI-driven technology.

Name*
This field is hidden when viewing the form
This field is hidden when viewing the form
This field is hidden when viewing the form
This field is hidden when viewing the form
By submitting you agree to receive occasional emails and acknowledge our Privacy Policy. You can unsubscribe at anytime.

Houd er rekening mee dat black-box-testen alleen de externe functionaliteit van de software omvat en de interne werking van de broncode niet controleert. Daarom wordt het soms “gedragstesten” genoemd. Het moet dus samen met white-box-testen worden gebruikt, dat zich richt op het testen van de interne code. Op die manier kun je er meer vertrouwen in hebben dat de software volledig is getest en zo foutloos mogelijk is.

Get regular tech leadership wisdom for delivering better software and systems.

Name*
This field is hidden when viewing the form
This field is hidden when viewing the form
This field is hidden when viewing the form

5 typen black-box-testtechnieken

We gebruiken deze black-box-testtechnieken om de testdekking te vergroten en tegelijkertijd het aantal testgevallen te verminderen. Door de juiste testgegevens te identificeren, kunnen we het kleinst mogelijke aantal tests maken met de grootste dekking.

De technieken waarover ik het ga hebben, kunnen op alle testniveaus worden toegepast, waaronder unit tests, integratietests en systeemtests, evenals functionele en niet-functionele tests.

1. Equivalentiepartitionering

Equivalentieklassepartitionering is een techniek die bij softwaretests wordt gebruikt om de mogelijke invoer op te delen in een reeks equivalentieklassen, of partities, met als doel een representatieve reeks invoer uit elke klasse te vinden en te testen. Van alle elementen die tot een equivalentieklasse behoren, wordt verwacht dat ze dezelfde uitvoer opleveren. Daarom zou het voldoende moeten zijn om één waarde uit de set te testen.

Dit helpt om het aantal testgevallen dat moet worden gemaakt en uitgevoerd te verminderen, terwijl er toch een goede dekking wordt geboden. De klassen worden gedefinieerd op basis van functionele of niet-functionele vereisten en kunnen rekening houden met factoren zoals gegevenstypen, bereiken en relaties tussen invoerwaarden.

Bij het definiëren van de equivalentieklassen moet je er altijd voor zorgen dat je ook de ongeldige klassen opneemt, zodat je de negatieve testscenario’s eveneens afdekt. Mijn ervaring is dat de meeste defecten worden gevonden bij het gebruik van ongeldige invoer in plaats van geldige invoer.

Laten we naar een voorbeeld kijken:

Je hebt een optioneel veld waarin alleen gehele getallen tussen 1 en 10 zijn toegestaan. Je hebt dan de volgende equivalentieklassen:

  • geen waarde (geldige partitie)
  • waarden tussen 1 en 10 (geldige partitie)
  • waarden kleiner dan 1 (ongeldige partitie)
  • waarden groter dan 10 (ongeldige partitie)

Je hebt dus slechts 4 testgevallen nodig: 1 voor elke partitie. Het opnieuw testen van dezelfde partitie met meerdere waarden levert geen extra waarde op—als je hebt getest met waarde 5, krijg je dezelfde resultaten voor waarden 4, 8 enzovoort.   

2. Grenswaardenanalyse

Grenswaardenanalyse is een techniek die bij softwaretests wordt gebruikt om de invoerwaarden op of nabij de rand of “grens” van het invoerdomein van een programma te identificeren en te testen. Het idee is dat deze waarden vaker fouten of onverwacht gedrag veroorzaken, omdat ze vaak speciale gevallen of randgevallen betreffen die het programma mogelijk niet goed kan verwerken.

Bij het testen van een programma dat een bereik van gehele getallen tussen 1 en 100 accepteert, zijn de grenswaarden bijvoorbeeld 1, 100 en alle waarden net buiten het bereik, zoals 0 en 101.

De twee typen grenswaardentests zijn:

  • Testen van interne grenswaarden: richt zich op de invoerwaarden die zich net binnen de rand van het invoerdomein bevinden, zoals de minimaal en maximaal toegestane waarden.
  • Testen van externe grenswaarden: richt zich op de invoerwaarden die zich net buiten de rand van het invoerdomein bevinden, zoals waarden die iets boven of onder de minimaal en maximaal toegestane waarden liggen.

Grenswaardeanalyse is een belangrijke techniek om fouten te vinden en ervoor te zorgen dat een programma zich correct gedraagt voor alle invoerwaarden, niet alleen voor de waarden in het midden van het invoerdomein. Dit kan helpen bij het identificeren en oplossen van bugs die anders mogelijk onopgemerkt zouden blijven.

3. Testen met beslissingstabellen

Bij het testen met beslissingstabellen testen we de logica en het gedrag van software wanneer meerdere voorwaarden beschikbaar zijn. Het is een manier om de relaties tussen invoer en uitvoer in tabelvorm weer te geven. De tabel bevat doorgaans kolommen voor voorwaarden en rijen voor de verschillende combinaties. Voor elke rij moet je een specifieke testcasus maken. De verwachte uitvoer voor de testcasus moet ook in de tabel worden opgenomen.

Laten we ons een voorbeeld van een softwarevereiste voorstellen waarop deze techniek kan worden toegepast: een app die de kosten van een aankoop berekent op basis van het artikel, de hoeveelheid en de verzendmethode:

In dit voorbeeld zijn het artikel, de hoeveelheid en de verzendmethode de invoerwaarden en zijn de kosten de uitvoer. De tabel toont alle mogelijke combinaties van invoerwaarden en de bijbehorende uitvoer in elk geval. Door deze tabel te gebruiken, kun je snel de testcases en hun verwachte resultaten identificeren, waardoor het eenvoudig wordt om de beschikbare combinaties te testen en te verifiëren.

Testen met beslissingstabellen is nuttig wanneer een programma meerdere invoerwaarden en voorwaarden heeft die op complexe manieren op elkaar inwerken. Door de invoerwaarden en voorwaarden op te splitsen in een tabel, wordt het eenvoudiger om alle mogelijke combinaties en variaties te identificeren en te testen.

4. Testen van statusovergangen

Testen van statusovergangen is een black-box-testtechniek waarbij we het gedrag van een programma testen terwijl het tussen verschillende statussen of modi overgaat. Een status is een toestand of een reeks toestanden waarin het programma kan verkeren, en een overgang is een verandering van de ene status naar een andere. Het idee achter het testen van statusovergangen is om alle mogelijke statussen en overgangen te identificeren die een programma kan doorlopen en vervolgens testcases te maken om te controleren of het programma zich in elke status correct gedraagt en geldige overgangen tussen statussen maakt.

Een voorbeeld van het testen van statusovergangen is een e-commercewebsite waarop klanten artikelen aan hun winkelwagen kunnen toevoegen, kunnen doorgaan naar het afrekenen, hun betalingsgegevens en verzendgegevens kunnen invoeren en ten slotte een bestelling kunnen plaatsen. De statussen in dit voorbeeld zijn:

  • Producten bekijken
  • Artikelen aan de winkelwagen toevoegen
  • Afrekenen
  • Betalings- en verzendgegevens invoeren
  • Bestelbevestiging

De overgangen tussen deze statussen zijn:

  • Producten bekijken -> Artikelen aan de winkelwagen toevoegen
  • Artikelen aan de winkelwagen toevoegen -> Afrekenen
  • Afrekenen -> Betalings- en verzendgegevens invoeren
  • Betalings- en verzendgegevens invoeren -> Bestelbevestiging

Deze techniek helpt bij het identificeren en testen van alle mogelijke paden die een gebruiker door het systeem kan volgen en kan helpen bij het vinden en oplossen van bugs die verband houden met specifieke stromen. Het testen van statusovergangen is bijzonder nuttig voor het testen van systemen met complexe interacties, zoals financiële systemen, e-commercesystemen of systemen die fysieke apparaten besturen.

5. Paarsgewijs testen

Paarsgewijs testen is een black-box-testtechniek die wordt gebruikt om testcases te maken die alle mogelijke paren van combinaties van invoerwaarden voor een bepaalde reeks parameters afdekken. Het wordt gebruikt wanneer het aantal beschikbare invoerwaarden groot is, waardoor het uiterst moeilijk zou worden om alle mogelijke combinaties tussen alle invoerwaarden te testen.

Laten we zeggen dat we een app hebben met 3 velden: A, B en C. Elk veld kan 3 mogelijke waarden accepteren: 1, 2 of 3.

Bij traditionele testmethoden zouden we 27 (3^3) mogelijke combinaties van invoerwaarden afzonderlijk moeten testen om alle mogelijke combinaties te valideren. Dit zou uiterst tijdrovend en inefficiënt zijn.

Met paarsgewijs testen kun je gebruikssituaties identificeren die alle mogelijke unieke combinaties van invoerwaarden afdekken. Dit ziet er ongeveer als volgt uit:

Zoals je kunt zien, is het aantal tests drastisch verlaagd van 27 naar 9. De testdekking is niet veranderd; we zorgen er nog steeds voor dat alle mogelijke combinaties van waarden in aanmerking worden genomen.

Er zijn verschillende hulpmiddelen voor paarsgewijs testen beschikbaar. Hieronder noem ik enkele voorbeelden:

  • AllPairs: Een hulpmiddel voor het maken van paarsgewijze testgevallen op basis van door de gebruiker opgegeven parameterlijsten en beperkingen. Het is beschikbaar in zowel een opensource- als een commerciële versie.
  • PICT (Onafhankelijk paarsgewijs combinatorisch testen): Een hulpmiddel dat een genetisch algoritme gebruikt om paarsgewijze testgevallen te genereren. Het is beschikbaar als opensourcetool.
  • SmartBear TestComplete: Een commercieel hulpmiddel voor testautomatisering met ingebouwde ondersteuning voor paarsgewijs testen.
  • Generator voor paarsgewijze testgevallen: Een opensourcetool die beschikbaar is op GitHub en kan worden gebruikt om paarsgewijze testgevallen te genereren.
  • Paarsgewijs testen kan ook worden gegenereerd met Excel of OpenOffice Calc, waarbij macro's of plug-ins worden gebruikt om je testgevallen te genereren.

Dit zijn slechts enkele voorbeelden; er zijn mogelijk ook andere hulpmiddelen beschikbaar. Ik raad je aan de verschillende beschikbare opties te onderzoeken en te evalueren, en na te gaan welk hulpmiddel het beste aansluit bij jouw specifieke behoeften en vereisten.

Tot slot

Het gebruik van deze technieken is een geweldige manier om in elke fase van de levenscyclus van softwareontwikkeling een goede dekking te bereiken. Het kan nog beter worden als je andere typen aan je testproces kunt toevoegen, zoals verkennend testen, foutvoorspellend testen, compatibiliteitstesten, bruikbaarheidstesten enzovoort.

Als de resulterende testgevallen uiteindelijk in de regressietestsuite terechtkomen, moet je overwegen ze te automatiseren. Voor UI-tests kun je hulpmiddelen zoals Selenium, Cypress en Appium gebruiken. Voor API-tests kun je integratietests laten schrijven door het ontwikkelingsteam, of je kunt hulpmiddelen zoals Postman gebruiken. 

Als je dit artikel nuttig vond, raad ik je aan je te abonneren op de QA Lead-nieuwsbrief, waarin je alles te weten komt over alle nieuwe inhoud en handleidingen over kwaliteitsborging en testen.