Kwaliteitsborging wordt steeds populairder. Experts schatten dat het aantal banen in softwaretests alleen al in de VS de komende tien jaar met 25% zal toenemen. Als dat je interesseert, vraag je je misschien af waar je moet beginnen met leren over softwaretests.
In dit artikel beantwoord ik vragen om je op weg te helpen met softwaretests. Ik bespreek wat softwaretests zijn, de belangrijkste testconcepten en enkele softwaretesttools die je kunt overwegen.
Softwaretests uitgelegd
Het proces dat bestaat uit alle levenscyclusactiviteiten, zowel statische als dynamische, die betrekking hebben op de planning, voorbereiding en evaluatie van een component of systeem en de bijbehorende werkproducten, om vast te stellen dat deze voldoen aan gespecificeerde vereisten, aan te tonen dat ze geschikt zijn voor het beoogde doel en defecten op te sporen.
de woordenlijst van ISTQB
Softwaretests spelen een belangrijke rol in het softwareontwikkelingsproces, waarbij wordt gevalideerd of de softwareapplicatie functioneert zoals bedoeld en voldoet aan de vereisten en verwachtingen van de eindgebruikers.
Het doel is om defecten, fouten en inconsistenties in de softwareapplicatie te identificeren voordat deze aan het publiek wordt vrijgegeven. Bij testen wordt de software onder verschillende omstandigheden, configuraties en scenario's uitgevoerd om te garanderen dat deze correct en efficiënt werkt.
Als je benieuwd bent hoe je kunt beginnen in het vakgebied van softwaretests, vind je hier een lijst met veelgestelde QA-sollicitatievragen (en antwoorden!).
Levenscyclus van softwaretests
De levenscyclus van softwaretests (STLC) is het proces dat wordt gevolgd door softwaretesters om ervoor te zorgen dat de applicatie die wordt getest voldoet aan de vastgestelde kwaliteitsnormen en vereisten. De STLC bestaat doorgaans uit verschillende fasen die ervoor zorgen dat de softwareapplicatie grondig wordt getest en het gewenste kwaliteitsniveau bereikt voordat deze aan eindgebruikers wordt vrijgegeven. Dit zijn de fasen van de levenscyclus van softwaretests:

Analyse van vereisten
In deze fase analyseren de softwaretesters de vereisten en specificaties. Ze identificeren de functionele en niet-functionele vereisten, begrijpen het doel van de softwareapplicatie en de doelgroep en ontwikkelen overeenkomstig testgevallen en scenario's.
Testplanning
In deze fase bepaalt het testteam de reikwijdte van de tests, de testaanpak en de middelen die voor het testen nodig zijn. Het testplan identificeert ook de risico's en beperkingen die verband houden met het testproces en beschrijft de testplanning.
Testontwerp
In deze fase ontwerpt het testteam de testgevallen en scenario's op basis van de vereisten en specificaties. Ze identificeren ook de testgegevens die nodig zijn voor het testen en ontwikkelen testscripts die het testproces automatiseren.
Testuitvoering
De testers voeren de testgevallen en scenario's uit die in de vorige fase zijn ontworpen. De testresultaten worden gedocumenteerd en eventuele defecten of fouten die in de softwareapplicatie worden aangetroffen, worden gemeld.
Testrapportage
In deze fase stelt het testteam een rapport op met de testresultaten en de defecten die tijdens het testen zijn geïdentificeerd. Het rapport kan aanbevelingen bevatten voor het oplossen van de defecten en het verbeteren van de algehele kwaliteit van de softwareapplicatie.
Afsluiting van de testfase
Dit is de laatste fase, waarin het testteam het testproces evalueert en verbeterpunten identificeert. Ze stellen ook een rapport over de afsluiting van de testfase op, waarin het testproces en de testresultaten worden samengevat.
De levenscyclus van softwaretests is een continu proces dat samenwerking tussen het testteam en het ontwikkelingsteam vereist om ervoor te zorgen dat de softwareapplicatie het gewenste kwaliteits- en functionaliteitsniveau bereikt.
Soorten softwaretests
Er zijn verschillende soorten softwaretests die door QA-teams worden gebruikt, afhankelijk van de context en vereisten van het project.
We kunnen onderscheid maken tussen handmatig testen en geautomatiseerd testen, afhankelijk van hoe de tests worden uitgevoerd. Op basis van wat er wordt getest, kunnen we onderscheid maken tussen functioneel en niet-functioneel testen. Afhankelijk van de gebruikte methoden hebben we statisch en dynamisch testen. Op basis van de aanpak kunnen we de typen white-box- en black-box-testen onderscheiden. We hebben ook verkennend testen, smoke- en sanitytesten en regressietesten. Al deze testtypen kunnen elkaar overlappen, afhankelijk van hoe ze worden gebruikt.
Handmatig testen
Bij handmatig testen worden de tests persoonlijk uitgevoerd, zonder gebruik te maken van geautomatiseerde tools of scripts. Het is doorgaans foutgevoeliger en duurt meestal langer.
Geautomatiseerd testen
Geautomatiseerd testen wordt uitgevoerd door een machine die vooraf geschreven scripts uitvoert. Het vereist meer technische expertise, bijvoorbeeld kennis van een programmeertaal en automatiseringstools zoals Selenium. Het kan duurder zijn dan handmatig testen en bepaalde aspecten van het testproces kunnen niet worden geautomatiseerd.
Functioneel testen
Functioneel testen betekent verifiëren wat de applicatie doet. Functioneel testen controleert de functies en mogelijkheden van de softwareapplicatie en zorgt ervoor dat deze aan de vereisten en specificaties voldoen.
Niet-functioneel testen
In tegenstelling tot functioneel testen richten niet-functionele tests zich op hoe de app zich gedraagt. Er zijn meerdere subtypen van niet-functioneel testen, afhankelijk van het hoofddoel van de tests. In dit artikel behandel ik slechts enkele daarvan.
Prestatietesten: Meet de reactietijd, verwerkingscapaciteit en schaalbaarheid van de softwareapplicatie onder verschillende belastingsomstandigheden. Het controleert of de softwareapplicatie meerdere gebruikers en transacties gelijktijdig kan verwerken en of deze efficiënt functioneert onder piekbelasting.
Belastingtesten: Simuleert realistische gebruikersbelastingen en wordt uitgevoerd om het gedrag van een systeem onder normale omstandigheden en piekbelasting te bepalen. Het wordt gebruikt om vast te stellen of de infrastructuur voor het hosten van de applicatie toereikend is en geeft aan hoeveel gelijktijdige gebruikers de applicatie aankan en welke schaal van de applicatie vereist is wat betreft hardware, netwerkcapaciteit enzovoort, zodat meer gebruikers toegang tot de applicatie kunnen krijgen.
Stresstesten: Omvat het testen boven de normale capaciteit, vaak tot een breekpunt, om de resultaten te observeren. Het doel is ervoor te zorgen dat de software niet crasht bij onvoldoende rekenhulpmiddelen, zoals geheugen, schijfruimte, netwerkaanvragen enzovoort.
Beveiligingstesten: Zorgt ervoor dat de softwareapplicatie veilig is en beschermd wordt tegen ongeautoriseerde toegang. Beveiligingstesten controleren op kwetsbaarheden en zwakke punten in de beveiligingsprotocollen van de softwareapplicatie en identificeren mogelijke beveiligingsrisico's.
Gebruiksvriendelijkheidstesten: Worden gebruikt om te beoordelen of de applicatie gebruiksvriendelijk is. Er wordt gecontroleerd hoe gemakkelijk gebruikers door de softwareapplicatie kunnen navigeren en de beoogde functies efficiënt kunnen uitvoeren.
Toegankelijkheidstesten: Toegankelijkheidstesten worden beschouwd als een subset van gebruiksvriendelijkheidstesten en worden uitgevoerd om ervoor te zorgen dat de geteste applicatie bruikbaar is voor mensen met een beperking.
Lokalisatietesten: Een type softwaretest waarbij het gedrag van software wordt getest voor een specifieke regio, landinstelling of cultuur. Enkele kenmerken waarmee tijdens lokalisatietesten rekening moet worden gehouden: correct vertaalde tekst, valuta, maateenheden, toegestane speciale tekens en indelingen van telefoonnummers
Compatibiliteitstesten: Testen of de applicatie goed genoeg werkt in verschillende browsers, databases, hardwareomgevingen, besturingssystemen, mobiele apparaten en netwerken
Statisch en dynamisch testen
Statisch testen berust op handmatige controle van werkproducten (d.w.z. beoordelingen) of op toolgestuurde evaluatie van de code (denk aan codebeoordelingen) of andere werkproducten (d.w.z. statische analyse). Het kan worden uitgevoerd op, maar is niet beperkt tot, specificaties, bedrijfsvereisten, acceptatiecriteria, broncode, testplannen, testgevallen, testscripts en gebruikershandleidingen.
Dynamisch testen is de daadwerkelijke uitvoering van de software die wordt getest. Het kan handmatig of geautomatiseerd zijn, of
White-box-testen en black-box-testen
White-box-testen zijn een type test waarbij de tester kennis heeft van de interne structuur van de code van de applicatie, terwijl black-box-testen worden uitgevoerd zonder dat de broncode hoeft te worden begrepen. Elk van deze testtypen maakt gebruik van verschillende testtechnieken, zoals equivalentiepartitionering, grenswaardenanalyse en beslissingstabellen voor black-box-testen, en instructiedekking plus beslissingsdekking voor white-box-testen.
Verkennend testen
Verkennend testen is een type ervaringsgericht testen. Het omvat minimale planning en maximale testuitvoering.
De activiteiten voor het ontwerpen en uitvoeren van tests worden parallel uitgevoerd, meestal zonder de testvoorwaarden, testgevallen of testscripts formeel te documenteren.
Het is een nuttige aanpak wanneer er geen of slechte specificaties zijn en de tijd ernstig beperkt is, of het werkt uitstekend als aanvulling op geautomatiseerd testen.
Rooktesten
Rooktesten, soms ook “buildverificatietesten” of “vertrouwenstesten” genoemd, zijn een softwaretestproces waarbij testers controleren of de geïmplementeerde build stabiel is. Rooktesten vormen een validatie dat we kunnen doorgaan met verdere softwaretests. Ze bestaan uit een minimaal aantal tests die bij elke build worden uitgevoerd om kritieke softwarefunctionaliteiten te testen.
Sanitytesten
Sanitytesten zijn een type softwaretest dat wordt uitgevoerd na de oplevering van een softwarebuild met kleine code- of functiewijzigingen, om te bevestigen dat de bugs zijn opgelost en dat er door deze wijzigingen geen nieuwe problemen zijn geïntroduceerd. Het doel is te bevestigen dat de voorgestelde functie ongeveer werkt zoals verwacht.
Regressietesten
Regressietesten zijn een type softwaretest waarbij bestaande functionaliteiten opnieuw worden getest om te valideren dat ze na wijzigingen of updates aan de softwareapplicatie nog steeds correct werken. Regressietesten zorgen ervoor dat de nieuwe wijzigingen of updates geen invloed hebben gehad op de bestaande functionaliteit van de softwareapplicatie.
Compatibiliteitstesten
Compatibiliteitstesten worden gebruikt om ervoor te zorgen dat de softwareapplicatie correct werkt op verschillende platforms, apparaten en browsers. Hierbij wordt gecontroleerd of de softwareapplicatie compatibel is met verschillende hardware- en softwareconfiguraties

Testniveaus
Softwaretesten kunnen worden ingedeeld in verschillende niveaus op basis van de reikwijdte en doelstellingen van de tests. Dit zijn de gebruikelijke niveaus van softwaretesten:
Unittesten
Unittesten vormen het eerste testniveau en richten zich op het afzonderlijk testen van individuele componenten of code-eenheden. Met unittesten wordt gecontroleerd of elke code-eenheid werkt zoals verwacht en aan de gespecificeerde vereisten voldoet.
Integratietesten
Integratietesten richten zich op het testen van de interacties tussen verschillende modules of componenten van de softwareapplicatie. Met integratietesten wordt gecontroleerd of de modules of componenten samenwerken zoals bedoeld en aan de gespecificeerde vereisten voldoen.
Systeemtesten
Systeemtesten vormen het testniveau waarop de volledige softwareapplicatie als één compleet systeem wordt getest. Met systeemtesten wordt gecontroleerd of de softwareapplicatie aan de gespecificeerde vereisten voldoet en in verschillende scenario's werkt zoals verwacht.
Gebruikersacceptatietesten
Acceptatietesten vormen het testniveau waarop de softwareapplicatie vanuit het perspectief van de eindgebruiker wordt getest. Met acceptatietesten wordt gecontroleerd of de softwareapplicatie aan de behoeften en vereisten van de eindgebruiker voldoet en in de gebruikersomgeving werkt zoals verwacht. Gebruikelijke typen gebruikersacceptatietesten zijn alfatesten en bètatesten.
Elk testniveau is belangrijk en dient een specifiek doel binnen het softwaretestproces. Op elk niveau moeten tests worden uitgevoerd om ervoor te zorgen dat de softwareapplicatie aan het gewenste kwaliteits- en functionaliteitsniveau voldoet en in verschillende scenario's werkt zoals verwacht.
Principes van softwaretesten
Er zijn zeven belangrijke testprincipes, zoals gedefinieerd door ISTQB:
- Testen toont de aanwezigheid van defecten aan, niet de afwezigheid ervan: Je kunt niet garanderen dat de applicatie defectvrij is alleen omdat deze is getest. Na het testen kan het vertrouwen in het product echter toenemen.
- Uitputtend testen is onmogelijk: De meeste apps zijn ongelooflijk complex, waardoor het onmogelijk is om elke mogelijke combinatie en variatie te testen, vooral omdat de testtijd en middelen ook beperkt zijn.
- Vroeg testen: Hoe eerder bugs en defecten tijdens de levenscyclus van softwareontwikkeling worden ontdekt, hoe gemakkelijker ze kunnen worden verholpen. Daar heeft Agile het bij het juiste eind, omdat testactiviteiten al heel vroeg beginnen.
- Defecten clusteren: Dit betekent dat gebieden waarin defecten zijn gevonden waarschijnlijk nog meer defecten bevatten. Volgens het Pareto-principe kan 80% van de defecten worden gevonden in 20% van de functionaliteiten.
- De pesticidenparadox: Het herhaaldelijk uitvoeren van dezelfde tests zonder deze bij te werken, zal waarschijnlijk geen nieuwe problemen aan het licht brengen.
- Testen is contextafhankelijk: Applicaties worden verschillend getest afhankelijk van hun context - je test bijvoorbeeld een API anders dan een gebruikersinterface, en je test webapplicaties anders dan mobiele of desktopapps.
- Drogreden van de afwezigheid van fouten: Kortom, het feit dat de defecten zijn gevonden en verholpen, betekent niet dat de software nuttig is voor de gebruikers.
Conclusie
Softwaretesten is een zeer complex domein en er kunnen veel soorten tests worden uitgevoerd. Het is belangrijk om je teststrategie aan te passen aan de context van het softwareproduct dat wordt getest. Er zijn eindeloos veel bronnen over softwaretesten, waaronder podcasts, boeken en meer.
Als je dit artikel interessant vond, abonneer je dan op de nieuwsbrief van de QA Lead en wees als eerste op de hoogte van nieuwe berichten over testen en kwaliteit.
