Wat zijn functioneel testen?
Functioneel testen is een vorm van softwaretesten die gericht is op het controleren of een softwaresysteem correct functioneert volgens de vastgestelde functionele vereisten of specificaties. Het doel van functioneel testen is te valideren dat elke functie van de software de verwachte output oplevert bij het ontvangen van de juiste input. Dit type testen richt zich uitsluitend op wat de software doet, en niet hoe goed of efficiënt het dat doet.
Functioneel testen speelt een cruciale rol in het waarborgen van de kwaliteit van een softwareapplicatie. De testcases zijn gebaseerd op de functionele vereisten, die voortkomen uit de specificatiefase van een project (Specifieren requirements). Deze tests worden uitgevoerd vanuit het perspectief van de gebruiker of zakelijke vereisten, zonder rekening te houden met de interne werking van de applicatie.
Voorbeelden van functionele tests zijn:
- Unittesten: Testen van individuele componenten of modules van de software.
- Smoke testen: Een snelle en brede validatie van de basisfunctionaliteit.
- Integratietesten: Testen van de interactie tussen verschillende modules of systemen.
- Gebruikersacceptatietesten: Eindgebruikers testen of de software voldoet aan de functionele vereisten.
- Regressietesten: Opnieuw uitvoeren van tests om te verifiëren dat nieuwe wijzigingen geen fouten hebben geïntroduceerd.
Functioneel testen onderscheidt zich van niet-functioneel testen, dat zich richt op aspecten zoals prestaties, schaalbaarheid en beveiliging. Voorbeelden van niet-functionele tests zijn performance testen, load testen, en beveiligingstests.
Hoe zit functioneel testen in elkaar?
Het maken van functionele testen is belangrijk aspect van het testproces. Binnen dit proces valt het voornamelijk in het Testontwerp, maar het is iets wat in bijna alle fases van de SSDLC naar voren komt. Voornamelijk omdat deze ook uitgevoerd en er op gerapporteerd moet worden.
Figuur 1: SSDLC met verschillende stappen in het testproces
Het ontwerpen van functionele testen kan worden opgesplitst in verschillende fasen:
1. Begrijpen requirements
Het testontwerp begint met het analyseren van de functionele specificaties en het identificeren van de functies die moeten worden getest. Bronnen zoals functionele specificaties, -=USECASE=- en -=USERSTORY=- (inclusief acceptatiecriteria) vormen de basis voor het testontwerp.
Het is dan belangrijk om te identificeren welke functies getest moeten worden. Het gaat voornamelijk om het onderscheid te creëren van wat wel en niet getest wordt. Zodra duidelijk is welke functies dit zijn, moet per functie de verwachte input en de bijbehorende output gedefinieerd worden. Dit maakt het mogelijk om gerichte tests uit te voeren en te verifiëren of de functies correct reageren op verschillende invoerwaarden.
2. Identificeren van testgebieden
De applicatie wordt gesegmenteerd in verschillende testgebieden, zodat elk gebied afzonderlijk getest kan worden. Denk hier aan bijvoorbeeld:
- Functionaliteiten: Invoervelden, knoppen, API-eindpunten.
- Gebruikersrollen: Authenticatie/Autorisatie.
- Workflows: Bv. een bestelproces van begin tot eind.
Geef prioriteit aan deze testgebieden op basis van risico’s en de impact van potentiële fouten.
3. Kiezen van ontwerptechnieken
Er moet gekozen worden welke testontwerptechnieken gebruikt worden om de huidige applicatie goed te kunnen testen. Een paar mogelijkheden hiervoor zijn:
- Equivalentieklassen: Invoerwaarden worden gegroepeerd in klassen waarbij alle waarden binnen dezelfde klasse als gelijkwaardig worden beschouwd.
- Grenswaardenanalyse: Het testen van waarden aan de grenzen van invoerbereiken (bijvoorbeeld net binnen en net buiten een toegestaan bereik).
- Waarheidstabbellen: Combinaties van invoerwaarden worden in tabellen vastgelegd om te bepalen welke combinaties geldig zijn.
4. Testcases specificeren
Voor elke geïdentificeerde functie wordt een reeks testcases opgesteld. Een testcase beschrijft de uitvoering van een specifieke test, inclusief de te gebruiken invoerwaarden en de verwachte uitkomst.
5. Testdata maken
Er moet een (verzameling) invoerwaarden gemaakt worden om de testcases uit te voeren. De data kan handmatig worden aangemaakt (statisch) of automatisch gegenereerd (dynamisch), afhankelijk van de aard van de test.
6. Testomgeving opzetten
Ten slotte is het belangrijk om de testomgeving op te zetten. Hier is het belangrijk om te bepalen wat toepasselijk is voor de opgestelde testcases. Mogelijkheden hiervoor zijn bijvoorbeeld een lokaal met testers, of het installeren van een testtool en de testdata beschikbaar stellen.
Na dit punt is het ontwerpen van de testen klaar, maar volgen de Testuitvoering, Testrapportage en Testevaluatie nog. Hier is het belangrijk dat er een testrapport wordt opgesteld. Hier kunnen de resultaten van de Testuitvoering in worden gezet en de mogelijk afwijkingen daarvan.
Casus
Stel je maakt een use case voor het inloggen, hiervoor maak je een bijhorende testcase voor het inloggen met de correcte gegevens. Hiervoor stel je dan een testgebied en een testscenario op en werk je de testcase verder uit. In figuur 2 is een voorbeeld van een testcase te zien. Hier is als Testgebied Authenticatie gesteld. Deze testcase zou dan gepaard gaan met andere testen op dit vlak. Verder wordt er duidelijk beschreven wat de test is, de stappen die afgelegd moeten worden, de voorwaarden en wat het verwachte resultaat is.
Hiervoor zou dan nog de uitvoering van de test geschreven moeten worden met de bijbehorende input.
Figuur 2: Voorbeeld testcase
Hoe gebruik je functioneel testen?
Functioneel testen wordt toegepast om te controleren of een applicatie correct functioneert volgens de vastgestelde functionele specificaties. Het gebruik ervan is vooral nuttig tijdens de ontwikkelingscyclus, bij wijzigingen in bestaande software en ter voorbereiding van acceptatietesten door eindgebruikers.
Hoewel functioneel testen zich richt op de functionaliteit van de applicatie, zijn er andere vormen van testen die zich richten op verschillende aspecten van de software:
- Niet-functioneel testen: Richt zich op prestaties, schaalbaarheid en beveiliging van de software.
- Exploratief testen: Hierbij testen testers zonder vooraf opgestelde testcases, wat kan helpen om onverwachte fouten te vinden.
- Automatisering van functionele testen: Door bepaalde repetitieve tests te automatiseren, kan tijd worden bespaard en de dekking van de testen worden vergroot.
Door functioneel testen te combineren met andere testmethoden, kan een completere teststrategie worden gecreëerd, die zorgt voor een hogere kwaliteit van de software.
Bronnen
Functioneel testen: https://www.guru99.com/nl/functional-testing.html