End-to-End testen
Iemand als ik die erg gehecht is aan een hoge softwarekwaliteit moet de cruciale verschillen van end-to-end testen en integratietesten kennen. Zij spelen namelijk een grote rol bij het waarborgen van de softwarekwaliteit. Met meer dan 40 jaar ervaring in softwareontwikkeling, heb ik regelmatig meegewerkt aan zowel end-to end (E2E) als integratietesten. Dit heeft me geleerd hoe belangrijk deze testpraktijken zijn bij het leveren van robuuste, betrouwbare en gebruiksvriendelijke applicaties. Aan het eind van dit artikel beschrijf ik tevens hoe E2E testen zich verhouden tot Acceptatietesten.
Met integratietesten kunnen we kritieke problemen vroeg in het ontwikkelingsproces ontdekken, waardoor we grotere problemen later in het project kunnen voorkomen.
End-to-end testen geven ons een breder perspectief op de applicatie als geheel. End-to-end-testen zijn bovendien belangrijk om volledige gebruikersworkflows en real-world scenario’s te valideren. Daarmee zorgen we ervoor dat de software niet alleen voldoet aan de technische vereisten, maar ook een naadloze gebruikerservaring biedt.
In onze projecten moeten we streven naar een evenwicht tussen beide testaanpakken. Integratietesten zijn cruciaal voor de stabiliteit op componentniveau, terwijl E2E-testen essentieel zijn om de algehele functionaliteit en het succes van de applicatie te garanderen.
End-to-end testen en integratietesten zijn verwante maar aparte testmethoden die we gebruiken in softwareontwikkeling. Hier is een overzicht van de verschillen:
E2E-testen bestrijkt de gehele applicatiestroom, van begin tot eind. Het simuleert real-world scenario’s door de applicatie in zijn geheel te testen, inclusief alle componenten, interfaces, databases en externe integraties. Het doel is om te valideren dat het hele systeem werkt zoals verwacht vanuit het perspectief van de gebruiker. Dit omvat het controleren van de functionaliteit, gegevensintegriteit en interactie tussen verschillende systemen of componenten in een productie-achtige omgeving. Voorbeeld van E2E testen is een webapplicatie testen door in te loggen, door verschillende pagina’s te navigeren, formulieren in te dienen en te controleren of de uiteindelijke uitvoer correct is.
Integratietesten richten zich op de interactie tussen verschillende modules of componenten binnen een systeem. Het test hoe individuele eenheden of services samenwerken nadat ze zijn gecombineerd. Het doel is om problemen te identificeren in de interacties tussen geïntegreerde componenten, zoals onjuiste gegevensoverdracht, communicatiefouten of incompatibele interfaces. Een voorbeeld is het testen van de interactie tussen een database en een back-endservice om ervoor te zorgen dat de module data correct ophaalt en verwerkt.
E2E-testen: test de volledige applicatie, inclusief alle afhankelijkheden en gebruikersworkflows. Integratietesten: test de interactie tussen specifieke modules of componenten binnen de applicatie.
E2E-testen: breed en uitgebreid, waarbij volledige gebruikersscenario’s worden bestreken.
Integratietesten: gerichter onderzoek naar de interactie tussen afzonderlijke onderdelen van het systeem.
E2E-testen: Wordt vaak uitgevoerd na integratietesten, omdat het vereist is dat het volledige systeem functioneel is.
Integratietesten: Deze voeren ontwikkelaars doorgaans uit na unit-testen, maar vóór E2E-testen. De nadruk ligt hierbij op het controleren van de interactie tussen units of modules.
End-to-end testen en integratietesten dienen verschillende doeleinden en kunnen we in verschillende fasen van het testproces gebruiken. Integratietesten zorgen ervoor dat de componenten goed samenwerken, terwijl end-to-end testen ervoor zorgt dat het hele systeem voldoet aan de vereisten en zich correct gedraagt vanuit het perspectief van de gebruiker.
End-to-end (E2E) testen is vooral handig in situaties waarin het cruciaal is om de volledige workflow van een applicatie te valideren, om ervoor te zorgen dat alle componenten samenwerken zoals verwacht. Hier zijn enkele scenario’s waarin E2E testen vooral belangrijk is:
Als onze applicatie complexe gebruikersworkflows heeft die meerdere stappen, integraties of services omvatten, kunt we met E2E-testen controleren of deze workflows van begin tot eind correct functioneren. Bijvoorbeeld een e-commercetoepassing waarbij een gebruiker naar een product zoekt, het aan de winkelwagen toevoegt, afrekent en een bevestigingsmail ontvangt.
Wanneer onze applicatie meerdere onderling verbonden componenten of services heeft en het belangrijk is om ervoor te zorgen dat deze naadloos samenwerken in een productieomgeving. Als voorbeeld is een microservicesarchitectuur te noemen waarbij verschillende services gebruikersauthenticatie, betalingsverwerking en voorraadbeheer afhandelen.
Na aanzienlijke codewijzigingen, zoals refactoring, het toevoegen van nieuwe functies of updates van afhankelijkheden, checken we met E2E-testen of dat het hele systeem nog steeds functioneert zoals verwacht. Na de migratie van een verouderd systeem naar een nieuwe technologiestack kunnen E2E-tests bijvoorbeeld bevestigen dat de functionaliteit voor gebruikers niet kapot is.
We gebruiken End-to-End testing om realistische gebruiksscenario’s te simuleren en ervoor te zorgen dat de applicatie goed presteert in een omgeving die veel lijkt op een productieomgeving. We testen onder meer hoe het systeem omgaat met gelijktijdige gebruikersaanmeldingen, gegevensverwerking en meldingen in een omgeving met veel verkeer.
Als onze applicatie afhankelijk is van services of API’s van derden (bijvoorbeeld betalingsgateways of Oauth logins van sociale media), kunnen we met E2E-testen controleren of deze integraties correct werken binnen de gehele workflow. Een betalingsproces testen dat is geïntegreerd met een externe betalingsgateway en een bevestiging naar ons systeem retourneert kan een van de testcases zijn.
Met behulp van E2E-testen stellen we vast dat alles functioneert zoals verwacht, met name bij bedrijfskritische processen waarbij storingen aanzienlijke financiële of operationele gevolgen kunnen hebben. Bijvoorbeeld het testen van een ERP-systeem (Enterprise Resource Planning) dat voorraadbeheer, facturering en orderbeheer afhandelt.
In full-stacktoepassingen waarbij de frontend, backend en database nauw met elkaar zijn verbonden, zorgt E2E-testen ervoor dat gegevens correct tussen lagen stromen. Een webapplicatie waarbij de invoer van de gebruiker op de frontend de logica van de backend beïnvloedt, die vervolgens de database bijwerkt en wijzigingen in de frontend activeert is hiervan een voorbeeld.
Wanneer we ervoor willen zorgen dat de applicatie niet alleen correct functioneert, maar ook een soepele en consistente gebruikerservaring biedt. Mobiele app testen om ervoor te zorgen dat de gebruikersinterface, animaties en overgangen goed werken op verschillende apparaten en besturingssystemen zijn een voorbeeld.
Wanneer we moeten vaststellen of de gehele applicatie voldoet aan de compliance eisen en beveiligingsprotocollen voor alle componenten. Het testen van een applicatie voor de gezondheidszorg moet voldoen aan de HIPAA-regelgeving, om ervoor te zorgen dat medewerkers patiëntgegevens veilig kunnen verwerken in de gehele workflow.
End-to-End testen is vooral belangrijk in complexe applicaties waar we gebruikersworkflows, integraties met derden en kritieke bedrijfsprocessen grondig moeten testen om betrouwbaarheid en een positieve gebruikerservaring te garanderen.
Integratietesten en end-to-end (E2E) testen zijn aparte testbenaderingen, maar ze zijn verwant en kunnen deel uitmaken van een bredere teststrategie. Integratietesten beschouwen we echter doorgaans niet als een directe subset van E2E testen. In plaats daarvan dienen ze verschillende doeleinden en worden ze in verschillende stadia in het softwaretestproces gebruikt. Dit is hoe ze zich tot elkaar verhouden:
De rollen die verantwoordelijk zijn voor het uitvoeren van integratietesten en end-to-end (E2E) testen kunnen variëren, afhankelijk van de organisatie, de structuur van het team en het specifieke project. Hier is echter een algemene uitsplitsing van wie deze typen testen doorgaans uitvoert:
End-to-End Testing worden voornamelijk uitgevoerd door QA-engineers, testers en automation engineers, met mogelijke input van ontwikkelaars, producteigenaren of businessanalisten. Het richt zich op het valideren van de gehele applicatiestroom vanuit het perspectief van een gebruiker.
Het zijn voornamelijk ontwikkelaars en soms QA-engineers of DevOps-engineers die Integratietesten uitvoeren. De nadruk ligt op het verifiëren van de interactie tussen componenten of modules.
Zowel integratie als E2E-testen vereisen samenwerking tussen verschillende rollen om een volledige dekking en afstemming op de algemene projectdoelen te garanderen.
De rapportagestructuur voor degenen die betrokken zijn bij integratietesten en end-to-end (E2E) testen kan variëren. Dit is met name afhankelijk van de grootte, structuur en processen van de organisatie. Hier is echter een algemeen overzicht van waar deze rollen doorgaans rapporteren:
Bij Integratietesten rapporteren ontwikkelaars aan technische leiders of engineeringmanagers, QA-engineers rapporteren aan QA-managers en DevOps-engineers rapporteren aan DevOps-managers of engineeringmanagers.
Voor End-to-end testen is het zo dat QA Engineers en testers aan QA Managers rapporteren, Automation Engineers rapporteren aan QA of Engineering Managers en Product Owners of Business Analisten rapporteren aan Product Managers of Product Heads.
In beide gevallen communiceert men de testresultaten echter doorgaans naar het bredere projectteam, dat kan bestaan uit belanghebbenden uit de ontwikkelingsafdeling, kwaliteitszorg, productmanagement en soms zelfs het hogere management, afhankelijk van de ernst van de vastgestelde problemen.
Zowel integratietesten als end-to-end (E2E) testen kunnen problemen aan het licht brengen die kunnen leiden tot een “showstopper”: een kritiek defect of probleem dat verdere ontwikkeling, testen of implementatie tegenhoudt totdat het is opgelost. De waarschijnlijkheid en impact van het vinden van een showstopper kan echter verschillen tussen de twee soorten testen:
Hoewel beide soorten testen kunnen leiden tot showstoppers, is het waarschijnlijker dat end-to-end testing problemen bloot legt die we als echte showstoppers beschouwen. Dat komt omdat we de volledige applicatie testen in real-world scenario’s. Integratietesten kunnen ook kritieke problemen blootleggen, maar deze zijn vaak meer technisch van aard en stoppen mogelijk niet onmiddellijk alle ontwikkelings- of implementatieprocessen, tenzij ze een aanzienlijke impact hebben op de algehele functionaliteit van het systeem.
Integratietesten is geen onderdeel van end-to-end testen, maar het is een essentiële stap in het algehele testproces dat voorafgaat aan en E2E-testen ondersteunt. Beide zijn cruciaal voor het waarborgen van softwarekwaliteit, maar ze werken op verschillende abstractieniveaus en dienen verschillende doelen binnen de testhiërarchie.
End-to-end testing is cruciaal wanneer we moet valideren dat het hele systeem, inclusief alle componenten, afhankelijkheden en integraties, samenwerkt zoals bedoeld in real-world scenario’s.
Tijdens het schrijven bedacht ik dat E2E op sommige onderdelen verdacht veel op acceptatietesten lijkt. In de praktijk volgt de acceptatietest op de E2E test. Het is ook een real-world test, waarbij gebruikers het feitelijk nog eens dunnetjes overdoen.
End-to-end (E2E) testing is dus soms te verwarren met acceptatietesten, omdat beide de gehele applicatie testen en ervoor zorgen dat deze aan bepaalde criteria voldoet. Ze dienen echter verschillende doelen en worden doorgaans uitgevoerd in verschillende stadia in de softwareontwikkelingscyclus. Dit is hoe ze verschillen en waarom men ze verward:
Hoewel end-to-end testen en acceptatietesten overeenkomsten vertonen, dienen ze verschillende doelen binnen de softwareontwikkelingscyclus. E2E-testen richten zich op de technische integriteit en het algehele systeemgedrag, terwijl acceptatietesten meer gericht zijn op zakelijke vereisten en het garanderen dat de software voldoet aan de verwachtingen van de gebruiker. Het is het sluitstuk van de hele testcyclus. Bovendien rapporteert de acceptatietester aan het management van de businessunit, die vaak ook de opdrachtgever van het project is. Het begrijpen van de verschillen tussen de twee kan helpen hun respectievelijke rollen te verduidelijken en verwarring te voorkomen.
Mogelijk is dit een vertaling van Google Translate en kan fouten bevatten. Klik hier om mee te helpen met het verbeteren van vertalingen.