Close

De verschillende soorten softwaretests

Vergelijk verschillende soorten softwaretests, zoals unittests, integratietests, functionele tests, acceptatietests en meer!

Headshot van Sten Pittet
Sten Pittet

Mede-auteur


Er zijn talloze soorten softwaretesttechnieken die je kunt gebruiken om er zeker van te zijn dat wijzigingen in je code naar verwachting werken. Niet alle tests zijn echter gelijk, en we verkennen hoe sommige testpraktijken verschillen.

Handmatig vs. geautomatiseerd testen


Het is belangrijk om een onderscheid maken tussen handmatige en geautomatiseerde tests. Handmatige tests worden persoonlijk uitgevoerd, door in de toepassing te klikken of door te communiceren met de software en API's met de juiste tools. Dit is erg duur aangezien iemand daarvoor een omgeving moet opzetten en de tests zelf moet uitvoeren, en het kan gevoelig zijn voor menselijke fouten omdat de tester typfouten kan maken of stappen weg kan laten in het testscript.

Geautomatiseerde tests worden daarentegen uitgevoerd door een machine die een testscript uitvoert dat vooraf is geschreven. Deze tests kunnen variëren in complexiteit, van het testen van een enkele methode in een klas tot het controleren of het uitvoeren van een reeks complexe acties in de gebruikersinterface tot dezelfde resultaten leidt. Het is veel robuuster en betrouwbaarder dan handmatige tests, maar de kwaliteit van je geautomatiseerde tests hangt af van hoe goed je testscripts zijn geschreven. Als je net bent begonnen met testen, kun je onze handleiding voor continue integratie lezen om je te helpen met je eerste testsuite. Op zoek naar meer testtools? Bekijk deze DevOps-testhandleidingen.

Geautomatiseerd testen is een belangrijk component van continue integratie en continue levering en het is een geweldige manier om je QA-proces op te schalen door nieuwe functies aan je toepassing toe te voegen. Maar het is nog steeds waardevol om wat handmatige tests uit te voeren met zogenaamde verkennende tests, zoals we in deze handleiding zullen zien.

Oplossing bekijken

Software bouwen en gebruiken met Open DevOps

Gerelateerd materiaal

Geautomatiseerd testen in DevOps

De verschillende soorten tests


1. Unittests

De unittests zijn van zeer laag niveau en liggen dicht bij de bron van een toepassing. Ze bestaan uit het testen van individuele methoden en functies van de klassen, componenten of modules die in je software worden gebruikt. Unittests zijn over het algemeen vrij goedkoop te automatiseren en kunnen heel snel worden uitgevoerd door een server met continue integratie.

2. Integratietests

Integratietests bevestigen dat de verschillende modules of services die in je toepassing worden gebruikt, goed samenwerken. Het kan bijvoorbeeld gaan om de interactie met de database testen of om ervoor te zorgen dat microservices samenwerken zoals verwacht. Dit soort tests zijn duurder om uit te voeren omdat er meerdere onderdelen van de toepassing nodig zijn om operationeel te zijn.

3. Functionele tests

Functionele tests zijn gericht op de zakelijke vereisten van een toepassing. Ze verifiëren alleen de output van een actie en controleren niet de tussenliggende status van het systeem wanneer ze die actie uitvoeren.

Er bestaat soms verwarring tussen integratietests en functionele tests, omdat ze beide meerdere componenten vereisen om met elkaar te kunnen interageren. Het verschil is dat een integratietest simpelweg verifieert dat je de database kunt opvragen, terwijl een functionele test zou verwachten dat je een specifieke waarde uit de database haalt, zoals bepaald door de productvereisten.

4. End-to-end-tests

Bij end-to-end-tests wordt gebruikersgedrag met de software nagebootst in een complete toepassingsomgeving. Deze test verifieert dat verschillende gebruikersstromen naar verwachting werken en kan zo eenvoudig zijn als het laden van een webpagina of inloggen of veel complexere scenario's bevatten, het verifiëren van e-mailmeldingen, online betalingen, enz.

End-to-end-tests zijn erg nuttig, maar ze zijn duur om uit te voeren en kunnen moeilijk te onderhouden zijn als ze geautomatiseerd zijn. Het wordt aanbevolen om een paar belangrijke end-to-end-tests uit te voeren en meer te vertrouwen op tests op een lager niveau (unit- en integratietests) om snel belangrijke veranderingen te kunnen identificeren.

5. Acceptatietests

Acceptatietests zijn formele tests die verifiëren of een systeem voldoet aan zakelijke vereisten. Bij deze tests is het nodig dat de hele toepassing actief is tijdens het testen en zich richt op het nabootsen van gebruikersgedrag. Maar ze kunnen ook een stap verder gaan en de prestaties van het systeem meten en wijzigingen afwijzen als bepaalde doelen niet worden gehaald.

6. Prestatietests

Prestatietests bekijken hoe een systeem presteert met een bepaalde werklast. Deze tests helpen om de betrouwbaarheid, snelheid, schaalbaarheid en responsiviteit van een toepassing te meten. Een prestatietest kan bijvoorbeeld de responstijden in acht nemen bij de uitvoering van een groot aantal aanvragen, of bepalen hoe een systeem zich gedraagt met een aanzienlijke hoeveelheid gegevens. De test kan bepalen of een toepassing voldoet aan de prestatievereisten, knelpunten opsporen, de stabiliteit meten tijdens piekuren en meer.

7. Smoke-tests

Smoke-tests zijn basistests die de basisfunctionaliteit van een toepassing controleren. Ze moeten snel uitvoerbaar zijn en hun doel is om je de zekerheid te geven dat de belangrijkste functies van je systeem naar verwachting werken.

Smoke-tests kunnen handig zijn direct nadat een nieuwe build is gemaakt om te beslissen of je al dan niet duurdere tests kunt uitvoeren, of direct na een implementatie om er zeker van te zijn dat de toepassing goed werkt in de net geïmplementeerde omgeving.

Je tests automatiseren


Om je tests te automatiseren, moet je ze eerst programmatisch schrijven met behulp van een testkader dat past bij je toepassing. PHPUnit, Mocha en RSpec zijn voorbeelden van testkaders die je kunt gebruiken voor respectievelijk PHP, JavaScript en Ruby. Er zijn veel opties beschikbaar voor elke taal, dus misschien moet je je daar eens in verdiepen en ontwikkelaarscommunity's vragen wat voor jou het beste kader is.

Als je tests via een script vanaf je terminal kunnen worden uitgevoerd, kun je ze automatisch laten uitvoeren door een server voor continue integratie zoals Bamboo of door een cloudservice zoals Bitbucket Pipelines te gebruiken. Deze tools houden je repository's in de gaten en voeren je testsuite uit wanneer er nieuwe wijzigingen worden doorgevoerd in de hoofdrepository.

Elke push naar de repository wordt geverifieerd dankzij Bitbucket Pipelines

Verkennende testen


Hoe meer functies en verbeteringen er in je code zitten, hoe meer je moet testen om er zeker van te zijn dat je hele systeem naar behoren werkt. En dan is het verstandig om voor elke bug die je oplost te controleren of ze niet terugkomen in nieuwere versies. Automatisering is essentieel om dit mogelijk te maken en het schrijven van tests wordt vroeg of laat onderdeel van je ontwikkelingsworkflow.

De vraag is dus: is het nog steeds de moeite waard om handmatige tests uit te voeren? Om kort te zijn: ja, en het is waarschijnlijk het beste om verkennende tests uit te voeren om niet voor de hand liggende fouten aan het licht te brengen.

Een verkennende testsessie duurt niet langer dan twee uur en moet een duidelijke scope hebben, zodat testers zich kunnen concentreren op een specifiek deel van de software. Zodra alle testers zijn ingelicht, moeten er verschillende acties worden ondernomen om te controleren hoe het systeem zich gedraagt.

Een opmerking over testen


Om deze handleiding af te maken, is het belangrijk om te praten over het doel van testen. Hoewel het belangrijk is om te testen of gebruikers daadwerkelijk een toepassing kunnen gebruiken (ze kunnen en een object opslaan), is het net zo belangrijk om te testen of een toepassing niet kapot gaat als er slechte gegevens of onverwachte acties worden uitgevoerd. Je moet anticiperen op wat er gebeurt als een gebruiker een typfout maakt, een onvolledig formulier probeert op te slaan of de verkeerde API gebruikt. Je moet controleren of iemand eenvoudig gegevens in gevaar kan brengen of toegang kan krijgen tot een bron waar diegene niet bij zou moeten kunnen. Een goede testsuite moet proberen om je app beter te maken en de grenzen ervan te begrijpen.

En tot slot, tests zijn ook code! Vergeet ze dus niet tijdens de codereview, want ze kunnen de laatste halte voor productie zijn.

Bovendien biedt Open DevOps van Atlassian een open toolchain-platform waarmee je een CD-gebaseerde ontwikkelingspipeline kunt bouwen met je favoriete tools. Ontdek hoe Atlassian en tools van derden testen kunnen integreren in je workflow met onze DevOps-testtutorials.

Sten Pittet
Sten Pittet

Ik zit nu 10 jaar in de softwarebusiness in verschillende rollen, van ontwikkeling tot productmanagement. Nadat ik de afgelopen 5 jaar in Atlassian heb gewerkt aan ontwikkelaartools, schrijf ik nu over het bouwen van software. Buiten het werk om ontwikkel ik mijn vader-vaardigheden met een geweldige peuter.


Deel dit artikel
Volgend onderwerp

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Toelichting DevOps

DevOps-community

Afbeelding van kaart

Gratis aan de slag

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up