Testing software is het evalueren en verifiëren van een software product of applicatie. Dit is om na te gaan of het doet wat het moet doen. De voordelen van testen zijn, het voorkomen van bugs, het verminderen van de ontwikkelingskosten en het verbeteren van de algehele prestatie.
Maar wat voor soorten software testen zijn er dan?
Er zijn veel verschillende soorten types, elk met een specifiek doel en strategie. Een aantal types zijn:
- Acceptance testing: Verifiëren of het gehele systeem werkt zoals het hoort te werken.
- Integration testing: Verifiëren dat de software onderdelen en functies in harmonie werken.
- Functional testing: Ook wel black-box testen genoemd, is het evalueren van functies door bedrijfs scenario’s na te bootsen op basis van vereisten.
- Unit testing: Een unit (het kleinste component wat te testen valt) testen of het presteert zoals verwacht. Ook wel white-box testen genoemd.
- Performance testing: Testen hoe de software presteert onder verschillende werkdrukken.
- Regression testing: Testen of nieuwe features de functionaliteit breken.
- Stress testing: Testen hoeveel belasting het systeem kan hebben voordat het faalt.
- Usability testing: Valideren hoe de ervaring van een gebruiker is.
Elk geval van testen heeft zijn eigen kritische beoordelingsaspecten. Het is dan ook belangrijk dat een tester of testteam helpt om moeilijk te voorspellen scenario’s en situaties te ontdekken, die tot software fouten kunnen leiden. Zelfs de eenvoudigste software kan gebruik maken van veel verschillende soorten system testing. De effectiviteit van testen wordt geoptimaliseerd door zo min mogelijk testen uit te voeren, maar wel het grootste aantal defecten te vinden.
Wilt u weten waarom Software testen steeds belangrijker word? Lees het hier!
Acceptance testing
Het basisidee van user acceptance testing is dat je een aantal tests hebt die de werkelijke eisen of verwachtingen van de klant testen, en andere tests die tegen het systeem als geheel worden uitgevoerd. Soms wordt het gebruikersacceptatietesten genoemd. Dit soort testen kan het testen van de functionaliteit van het systeem of het testen van de bruikbaarheid of beide zijn.
Het idee is dat bij acceptatietesten er wordt getest wat er wordt verwacht en wat er dus daadwerkelijk gebeurd.
Voordelen van deze test zijn, het ontdekken en maken van gebruiksvriendelijkheid fouten in vroege fases, feedback kan in een vroege fase geïmplementeerd worden en het weergeven van de bruikbaarheid van je systeem.
Nadelen hiervan zijn, je hebt een goed gedefinieerd test publiek nodig, het moet getest worden in een andere omgeving dan de standaard test omgeving en het kost veel tijd om het op te zetten.
Integration testing
Integratie testen in een notendop is een test waarbij individuele componenten worden gecombineerd en vervolgens worden getest als groep. Het doel van deze test is om fouten tussen de samenwerkende componenten bloot te stellen.
Het is van groot belang dat alle componenten in harmonie samenwerken. Zodra één onderdeel niet mee werkt zoals het hoort mee te werken, dan zorgt dat voor grote problemen. Deze problemen zorgen weer voor onnodige kosten. De test wordt opgesteld met een testplan – deze bestaat uit het voorbereiden, controleren, feedback implementeren en een baseline beslissen. Daarna worden er test scripts geschreven en wordt het opnieuw uitgevoerd.
Voordelen van deze test zijn, fouten ontdekken in het samenwerken van de componenten voordat je het bos niet meer ziet door de bomen, je software kogelwerend maken en het weergeven van de algehele bruikbaarheid.
Nadelen van deze test zijn, elk component moet in detail zijn gedefinieerd, je moet elk component hebben getest voordat je de integratie test kan doen en je moet zorgen dat je een robuust Software Configuration Management system klaar hebt staan, anders zal het lastig worden om de componenten te vinden die niet werken naar behoren.
Functional testing (Black-box testing)
Black-box testen is simpelweg testen alsof de software zelf een zwarte doos is. Het is een van de meest voorkomende vormen van testen – en eigenlijk een manier om een hele categorie testen te beschrijven.
Wanneer je functionaliteit tests doet, wordt er gefocust op de inputs en outputs. Het maakt niet uit hoe de outputs worden behaald, als ze maar worden behaald. In de testwereld wordt de term gebruikt om te verwijzen naar testactiviteiten waarbij de feitelijke functionaliteit van het systeem wordt getest.
Functioneel testen is dus het soort testen waarbij je echt bezig bent met wat het systeem doet en wat het moet doen, vanuit een functioneel perspectief. Als ik deze invoer, input en op deze knop druk, krijg ik dan de verwachte output? Het maakt je als het ware niet uit hoe lang het duurt, of je scherm vel blauw knippert en de computer begint te roken. Het enige wat uitmaakt is – krijg ik mijn resultaat? Je weet bij deze test in principe niks van de software af, alleen dat voor een bepaalde set inputs in de software, een bepaalde set outputs moet worden geproduceerd.
De meeste van dit soort testen worden op deze manier uitgevoerd omdat het op deze manier voor een groot deel onbevooroordeeld is. Het werkt of het werkt niet.
Voordelen van deze test zijn, je simplificeert het testen door alleen naar de inputs en outputs te kijken, de tester kan een persoon zijn die geen technologie kennis heeft en je test vanuit een gebruikersperspectief.
Nadelen van deze type test zijn, de redenen voor een fout zijn niet zichtbaar, het is lastig om een test clausule op te stellen en de tester heeft gelimiteerde kennis over de applicatie.
Unit testing (White-box testing)
White-box testen is wanneer je een deel van de interne componenten van het systeem begrijpt en misschien toegang hebt tot de daadwerkelijke broncode. Deze gebruik je om je testen te informeren en om je doel te bepalen. White-box testen is dan ook vrijwel het tegenovergestelde van black-box testen. Met white- box testen heb je in ieder geval een idee van wat er in de software gebeurd namelijk.
Vaak wordt unit-testen, white-box testen genoemd.
Voordelen van deze test zijn, het ontdekken van verstopte bugs efficiënter, de software code kan worden geoptimaliseerd en makkelijk en snel problemen vinden.
Nadelen van deze test zijn, de tester heeft kennis van software en coderen nodig, je hebt toegang nodig tot de code en het wordt gefocust op bestaande software, je komt er dus niet achter of je iets mist.
Performance testing
Prestatietests zijn een soort software tests die ervoor zorgen dat softwaretoepassingen goed presteren onder de verwachte werkbelasting. Het is een testtechniek die wordt uitgevoerd om de systeemprestaties te bepalen in termen van gevoeligheid, reactiviteit en stabiliteit onder een bepaalde werkbelasting.
Prestatie testen is het proces van het analyseren van de kwaliteit en het vermogen van een product. Het is een testmethode die wordt uitgevoerd om de systeemprestaties te bepalen in termen van snelheid, betrouwbaarheid en stabiliteit onder variërende werkbelasting. Er worden situaties nagebootst die in het echte leven voor kunnen komen. Daarna wordt er dan gekeken of er niet tegen mankementen wordt aangelopen.
Elke situatie heeft zijn eigen focus, een aantal van deze situaties zijn:
- Spike testing – Hier wordt onverwachte toename en afname van vele gebruikers gesimuleerd, om te kijken wat er met het systeem gebeurd. Het doel is om vast te stellen of de prestatie naar beneden zal gaan, of het hele systeem zal stilvallen of dat het de dramatische verandering kan hebben.
- Soak testing – Hier wordt bepaalt of het systeem de continu verwachte belasting aankan.
Tijdens soak tests wordt het geheugengebruik gecontroleerd om mogelijke lekken te detecteren. Ook belangrijk, maar vaak over het hoofd gezien, is prestatievermindering, d.w.z. om ervoor te zorgen dat de doorvoer- en/of responstijden na een lange periode van aanhoudende activiteit zo goed of beter zijn dan aan het begin van de test. Het houdt eigenlijk in dat een systeem gedurende een langere, significante periode aanzienlijk wordt belast. Het doel is om te ontdekken hoe het systeem zich gedraagt bij langdurig gebruik. - Breakpoint testing – Breekpunt testen is vergelijkbaar met stresstesten. Er wordt in de loop van de tijd een incrementele belasting toegepast terwijl het systeem wordt gecontroleerd op vooraf bepaalde storing condities. Breakpoint-testen wordt ook wel capaciteitstesten genoemd, omdat hiermee kan worden bepaald onder welke maximale capaciteit het systeem zal presteren volgens de vereiste specificaties van Service Level Agreements. De resultaten van een breekpunt analyse worden toegepast op een vaste omgeving en kunnen worden gebruikt om de optimale schaal strategie te bepalen in termen van vereiste hardware of voorwaarden die inschaling gebeurtenissen in een cloudomgeving zouden moeten activeren.
- Isolation testing – Isolatietesten zijn niet uniek voor prestatietests, maar omvatten het herhalen van een testuitvoering die resulteerde in een systeemprobleem. Dergelijke tests kunnen vaak het foute domein isoleren en bevestigen.
- Configuration testing – In plaats van te testen op prestaties vanuit een belasting perspectief, worden tests gemaakt om de effecten van configuratiewijzigingen aan de systeemcomponenten te bepalen. Een veelvoorkomend voorbeeld is het experimenteren met verschillende methoden voor taakverdeling.
Regression testing
Regressietesten is in feite testen om te controleren of het systeem nog steeds werkt zoals het voorheen deed. Het doel van regressietesten is om ervoor te zorgen dat de software niet achteruitgaat qua functionaliteit. Dit is uiterst belangrijk bij Agile-ontwikkeling methodologieën waarbij software stapsgewijs wordt ontwikkeld en er een constante mogelijkheid is dat door het toevoegen van nieuwe features, bestaande features niet meer werken.
De meeste geautomatiseerde testen zijn ook regressietesten. Je zou zelfs kunnen stellen dat alle geautomatiseerde tests regressietests zijn, aangezien het hele doel van het automatiseren van een test is dat deze meerdere keren kan worden uitgevoerd.
Voordelen van deze test zijn, het behouden van klanten door een blijvend goed werkend systeem te hebben en constante updates kunnen toevoegen.
Een nadeel van deze test is, het maken van een geautomatiseerde test.
Stress testing
Bij softwaretests verwijst een systeemstresstest naar tests die meer nadruk leggen op robuustheid, beschikbaarheid en foutafhandeling onder zware belasting, in plaats van op wat onder normale omstandigheden als correct gedrag zou worden beschouwd. Het doel van dergelijke tests kan met name zijn om ervoor te zorgen dat de software niet crasht bij onvoldoende rekenkracht (zoals geheugen of schijfruimte), ongebruikelijk hoge gelijktijdigheid of denial-of-service-aanvallen.
Voorbeelden hiervan zijn:
Een webserver kan op stress worden getest met behulp van scripts, bots en verschillende denial of service-tools om de prestaties van een website tijdens piekbelastingen te observeren. Deze aanvallen duren over het algemeen minder dan een uur, of totdat een limiet is gevonden in de hoeveelheid gegevens die de webserver kan verdragen. Stresstesten kunnen worden gecontrasteerd met belastingstesten:
Load testing onderzoekt de hele omgeving en database, en op hetzelfde moment wordt de responstijd gemeten, terwijl de stresstests zich richten op geïdentificeerde transacties, die druk zetten tot een niveau dat transacties of systemen breekt.
Als tijdens stresstests transacties selectief worden benadrukt, wordt de database mogelijk niet veel belast, maar worden de transacties zwaar belast. Aan de andere kant wordt de database tijdens het testen van de belasting zwaar belast, terwijl sommige transacties mogelijk niet worden benadrukt.
System Stress Test, ook wel stresstesten genoemd, belasten de gelijktijdige gebruikers tot boven het niveau dat het systeem aankan, dus het breekt bij de zwakste schakel binnen het hele systeem.
Usability testing
Bruikbaarheidstesten is een kritieke techniek voor het testen van software, die vaak wordt gebruikt in gebruikersgericht interactieontwerp om de bruikbaarheid of het gebruiksgemak van een softwareproduct te valideren. Uitgevoerd vanuit het perspectief van de echte gebruikers, bepaalt usability testing hoe gebruiksvriendelijk de interface van een app of een product is.
Het helpt bij het oplossen van verschillende bruikbaarheid problemen in een bepaalde website of app, terwijl de kwaliteit en functionaliteit ervan wordt gewaarborgd. Van het valideren van het gemak van het navigeren op een website, tot het verifiëren van de stroom en de inhoud, usability-tests zorgen ervoor dat alle cruciale aspecten van een product een optimale gebruikerservaring bieden.
Voordelen van deze test zijn, het helpt het ontdekken van bruikbaarheid fouten voor dat het product is geadverteerd, het helpt met het verbeteren van de gebruikers ervaring, het maakt het systeem erg efficiënt en effectief en het helpt met echte feedback te verkrijgen van je doelgroep.
Eén groot nadeel is de kosten van usability testing. Het neemt namelijk veel in beslag om een test lab op te zetten.
Heeft u interesse om Software Tester tester te worden? Lees hier wat dit inhoud!