Colofon

©2022 Egbert Bouman, Valori

Uitgeverij kleine Uil, www.kleineuil.nl

ISBN: 9789493170896

E-book ISBN: 9789493170902

Boekproductie en ePub: LINE UP boek en media bv

Bureauredactie: Maartje Wienke

Vormgeving omslag: 247design, Bas Ekkers

Ontwerp en opmaak: Mirjam Kroondijk

Niets uit deze uitgave mag worden verveelvoudigd en/of openbaar gemaakt door middel van druk, fotokopie, microfilm of op welke andere wijze dan ook zonder de voorafgaande schriftelijke toestemming van de uitgever.

Alle rechten voorbehouden. Alle auteursrechten en databankrechten ten aanzien van deze uitgave worden uitdrukkelijk voorbehouden. Behoudens de in of krachtens de Auteurswet gestelde uitzonderingen, mag niets uit deze uitgave worden verveelvoudigd, opgeslagen in een geautomatiseerd gegevensbestand of openbaar gemaakt in enige vorm of op enige wijze, hetzij elektronisch, mechanisch, door fotokopieën, opnamen of enige andere manier, zonder voorafgaande schriftelijke toestemming van de uitgever.

Hoewel aan de totstandkoming van deze uitgave de uiterste zorg is besteed, kan voor de afwezigheid van eventuele (druk)fouten en onvolledigheden niet worden ingestaan en aanvaarden de auteur(s), redacteur(en) en uitgever deswege geen aansprakelijkheid voor de gevolgen van eventueel voorkomende fouten en onvolledigheden.

Kernboodschap

De kernboodschap van dit boek is tweeledig, namelijk dat met geautomatiseerd testen veel winst valt te behalen maar ook dat de ervaring heeft geleerd dat het complex is. Dus omarm geautomatiseerd testen, maar onderschat het niet.

Hieronder wat meer detail en onderbouwing bij deze tweeledige boodschap.

1. Geautomatiseerd testen is anno nu geen nice to have, maar een must have

De wereld is totaal afhankelijk van goed functionerende oftewel goed geteste IT-systemen. Geautomatiseerd testen is daarvoor een keiharde noodzaak, want:

1. We testen steeds meer, omdat de hoeveelheid software blijft groeien, in steeds meer omgevingen en met steeds meer devices
2. We testen steeds frequenter, dankzij de behoefte aan snelle time-to-market en korte oplevercycli

We moeten dus meer testen én vaker testen. Handmatig is dat niet meer te doen zonder ernstige consequenties voor de snelheid en wendbaarheid van IT-oplevering en voor de duurzaamheid, doorontwikkeling en onderhoudbaarheid op lange termijn.

Een derde driver komt door nieuwe vormen van softwareontwikkeling:

3. Agile en Scrum, met korte sprints, continuous integration, continuous delivery, continuous deployment, test driven development en DevOps. Met korte feedback loops en een 'automate all' ambitie.

Dit geheel brengt een nieuwe dynamiek in het hele voortbrengings- en testproces, met geautomatiseerd testen als een onmisbaar element in de opleverpijplijn.

2. Geautomatiseerd testen is complex en soms 'een softwareproject erbij'

Dat het onmisbaar is wil niet zeggen dat het makkelijk is, want een serieuze geautomatiseerde (regressie)testset is een complex geheel van scripts, data, parameters en tools. Het is spiegelbeeldig aan de software en alleen onderhoudbaar bij een goede architectuur en goed versie- en configuratiebeheer.

Dat gaat vaak goed als je geautomatiseerd testen vanaf het begin integraal meeneemt in de hierboven onder punt 3 geschetste manier van systeemontwikkeling en anticipeert op toekomstig onderhoud en beheer.

Veel organisaties hebben echter te maken met een 'legacy'-situatie en achterstand op dit gebied, zeker als je niet primair een softwarebedrijf bent. Het invoeren van geautomatiseerd testen is dan een inhaalslag met het karakter van 'een softwareproject erbij'.

Voorwoord

Doelgroep

Dit boek is geschreven voor iedereen die belang heeft bij goed en professioneel testen en daarom een gezonde interesse heeft in geautomatiseerd testen:

Managers: test- en IT-managers, business managers

Scrum masters en product owners

Ontwikkelaars (developers), testers en beheerders

Andere stakeholders en betrokkenen

Van de lezer wordt basiskennis van IT, kwaliteit en testen verwacht. Diepgaande technische expertise is geen vereiste en Google en Stack Overflow zijn je beste vriend. Alles lezen hoeft natuurlijk niet, pik eruit wat je interesseert: eet de vis en laat de graten liggen.

Wijntester Nicolaas Klei zei het al: 'Goede wijn smaakt bij alles, slechte wijn bij niks.' Iets te kort door de bocht volgens mij, maar als schrijver neem ik zijn punt graag over: 'Een goede tekst is begrijpelijk voor bijna iedereen, een slechte tekst voor niemand.'

SmarTEST, podcast

Dit nieuwe boek is een geactualiseerde en uitgebreide versie van het hoofdstuk 'Geautomatiseerd Testen' uit SmarTEST, het boek bij Valori's testaanpak. Daarnaast is er een podcast, te vinden via Spotify, iTunes, SoundCloud, Stitcher of gewoon door te zoeken op 'geautomatiseerd testen' via jouw favoriete podcastapp.

Dank!

Het was een voorrecht om de expertise van Valori, onze relaties én de nationale en internationale test community in kaart te brengen en nieuwe inzichten toe te voegen. Hieronder een, ongetwijfeld incomplete, opsomming van de collegaprofessionals die content hebben aangeleverd, mee hebben gediscussieerd en vooral heel veel hebben gereviewed: Jan van Moll en Johan Mulders (Philips), Vincent Pijpe (Achmea), Rien Krol (Rabobank), Jaap Bouman (CLEVR), Henk Folkersma en Renso Elzinga (DICTU RijksZaak), Benny van Wijngaarden (Smaragd IT Services), Frank Pellens (Truston), Hilbert Battjes (Triodos Bank), René Ceelen (TestMonitor), Jan Hoepel (VitalHealth, Philips), Carla Link, Pieter Snijder en Robin Esman (De Nederlandsche Bank), Meindert Munnik (Univé), Teun van Horssen (Waterschap Hollandse Delta), Ed Brandt (Refis) en Derk-Jan de Grood (Squerist).

En alle Valoricollega's die direct of indirect hebben bijgedragen, voor wie een eervolle vermelding op zijn plaats is voor Mark Schut, Guido Dulos, Jaap Merkus, Rob Kuijt, Joost Jongman, Maarten Metselaar, Andy Meijer, Jan-Wouter Lok, Patrick Schilder, Rob Verheul, Jeordie Penders, Wouter Tichelaar, Ashwin Hogeweg, Curd Claassen, Henk Broers, Bob van Zeist en Brian van den Brink.

Heel veel dank allemaal en veel succes met nog slimmer testen!

Egbert Bouman, Valori, juni 2022

Inhoud

Omslag

Colofon

Kernboodschap

Voorwoord

1 Softwareontwikkeling en het belang van testen

1.1 De context

1.2 Continu, snel en kortcyclisch

1.3 Automatiseer zoveel mogelijk

1.4 Testen hoort erbij, op elk niveau

1.5 Built-in quality

1.6 Progressie- en regressietesten

2 Geautomatiseerd testen: wat is het en waarom is het van belang?

2.1 Definitie en scope

2.2 Waarom is het nodig?

2.3 De voor- en nadelen van geautomatiseerd testen

2.4 Wanneer (niet) geautomatiseerd testen?

3 Kies je niveau: de testpiramide

3.1 De testautomatiseringspiramide

3.2 Automatiseren op GUI-, API- of unitniveau?

3.3 Toekomstvast automatiseren

3.4 Zero touch testing, continuous delivery en operationele monitoring

3.5 Virtualisatie, containerisatie, Docker

4 Stabiele testscripts, hoe maak je die?

4.1 Hoe 'praat' een testtool met de applicatie?

4.2 De vier manieren van interactie technisch vergeleken

4.3 Combinaties van interactietechnieken

4.4 De vier manieren om testscripts te maken

4.5 De beste manier om scripts te maken?

5 De factor mens: competenties, taakverdeling en organisatie

5.1 It takes three to tango

5.2 Tips en succesfactoren

5.3 Software-DNA en de full stack tester

5.4 De test automation regisseur

6 De toptools anno nu

6.1 Tools voor ontwikkelaars en voor niet-ontwikkelaars

6.2 Populaire betaalde tools

6.3 Populaire opensourcetools

6.4 Tools voor API-testen

6.5 Tools voor mobile testing

6.6 Tools voor low-code testen

6.7 Geautomatiseerd performance-, load- en stresstesten

6.8 Tools voor securitytesten

6.9 Waar tools nog meer kunnen helpen

7 Toolselectie en implementatie

7.1 Hoe volwassen moet je zijn?

7.2 Voorkom 'shelfware': zo selecteer je de juiste tool

7.3 Toolrequirements: waar op letten?

7.4 De longlist en de shortlist

7.5 De PoC: Proof of Concept

7.6 Na de selectie: implementatie

7.7 Multitools? SALUTE!

8 Een softwareproject erbij?

8.1 Complex geheel van tooling, scripts, data en parameters

8.2 Wanneer wordt geautomatiseerd testen rendabel?

8.3 De simpele businesscase

8.4 De complete businesscase

9 Hoe maak ik een beleidsplan geautomatiseerd testen?

9.1 Basis op orde

9.2 Vrijheid én kaders

9.3 Checklist beleidsplan

10 De toekomst

11 Samenvattend

Referenties

Register

1
Softwareontwikkeling en het belang van testen

1.1 De context

Geautomatiseerd testen is onderdeel van het grotere geheel van het softwareontwikkelproces en applicatielifecyclemanagement. Dit hoofdstuk schetst enkele aspecten van die grotere context die relevant zijn voor geautomatiseerd testen. Uiteraard kent softwareontwikkeling anno nu veel meer interessante thema's. Denk aan cloud, AI, no code, microservices, loosely coupled components, feature driven development, et cetera. Maar we beperken ons tot enkele thema's die een directe relatie hebben met geautomatiseerd testen.

1.2 Continu, snel en kortcyclisch

Organisaties moeten wendbaarder zijn dan ooit, overleven is aanpassen. Dat geldt zéker voor de IT-systemen. In een snel veranderende omgeving overleef je alleen met continue feedback over kwaliteit en voortgang.

Dat klinkt eenvoudig maar is het niet, want de hoeveelheid software en het aantal coderegels verdubbelt wereldwijd elke paar jaar. Bovendien werken we met steeds meer devices, integreren we oplossingen in steeds complexere ketens en leveren we steeds vaker op.

Met Agile ontwikkelmethoden als Scrum en Kanban spelen we daarop in. We leveren frequent en kortcyclisch nieuwe functionaliteiten op en krijgen daarop de gewenste snelle feedback. Continuous Integration, Continuous Delivery en Continuous Deployment horen daarbij en met DevOps brengen we naast de Change (Development) ook de Run (Operations, gebruik en beheer) in de feedback loop. Hieronder een korte definitie van deze termen:

Continuous Integration (CI): elk stukje code wordt ingecheckt op de CI-server en daar continu of zeer frequent geïntegreerd en getest, technisch, maar liefst ook functioneel.

Continuous Delivery (CD): nieuwe software wordt in een continue stroom gebruiksklaar opgeleverd, 'ready for deployment'.

Continuous Deployment (ook CD): nieuwe software is niet alleen 'ready for deployment', maar wordt ook daadwerkelijk frequent naar productie doorgezet.

DevOps: DevOps past niet helemaal in het 'continuous'-rijtje en kan ook zonder CI/CD, maar is in zekere zin wel de volgende stap, want het team ontwikkelt niet alleen (Dev) maar doet ook operations (Ops: beheer, incidenten oplossen, et cetera).

Figuur 1 CI, CD, CD en DevOps

Moderne systeemontwikkeling werkt steeds meer met standaard bouwstenen en standaard services. Dat geldt zeker voor 'low-code' ontwikkeling.¹ Je bouwt snel en al experimenterend complexe functies en complete apps. Fouten maken is daarbij geen probleem, want je leert van je fouten en selecteert de beste oplossing. Ook dat is 'agility' en goede Scrumteams hebben dit tot topsport verheven. Failing forward noemen we dat. En dat is prima, mits gecombineerd met 'continuous attention to technical excellence' en codekwaliteit onder de motorkap.²

Moderne ontwikkelmethodieken kort uitgelegd

Moderne softwareontwikkelmethodieken zijn BDD, TDD en ATDD. Elk van die methodieken laat een samensmelting tussen development en testen zien. Het is wel goed om te beseffen dat dit primair ontwikkelmethodieken zijn en geen testmethodieken.

BDD (Behaviour Driven Development) staat voor specificaties, vaak user stories, in het Given-When-Then-formaat, ook wel het Gherkinformaat genoemd. BDD wordt bijna altijd ondersteund door een BDD-tool zoals Cucumber, SpecFlow (= Cucumber voor .NET), JBehave of FitNesse. Vervolgens kun je hiervan relatief snel geautomatiseerde testen maken met zelf geprogrammeerde 'step defintions' of met behulp van 'test runners' zoals JUnit, eventueel in combinatie met 'assertion checkers' zoals Chai en AssertJ.

TDD (Test Driven Development) is een ontwikkelaanpak waarbij je eerst testgevallen schrijft en vervolgens code. Die code test je (geautomatiseerd) met de testgevallen. Zodra dat slaagt is je code OK en kun je die eventueel verder uitbreiden door nieuwe testgevallen en nieuwe code te schrijven. De testgevallen zijn dus je specificaties. TDD kan goed werken op unittestniveau.

ATDD (Acceptance Test Driven Development) is meer een 'streven naar'. Terwijl je TDD technisch en functioneel echt kunt implementeren is ATDD meer een ideaal. De term ATDD suggereert dat we ook de acceptatietesten naar voren kunnen halen en al in de ontwikkelfase kunnen integreren en automatiseren. Dit is een loffelijk streven en past in de 'shift-left'-ambitie van zo vroeg mogelijk testen. Echter, in complexe landschappen kun je finale integratie- en acceptatietesten met aandacht voor data, proces en organisatie nooit 100% naar de voorkant brengen. Althans niet op de concrete manier waarop dat met unittesten en TDD wel kan. In de praktijk is ATDD daarom gewoon 'meer gebruikersparticipatie en vroegtijdige aandacht voor businessacceptatiecriteria en businessscenario's'.

1.3 Automatiseer zoveel mogelijk

'Automate all' is een gevleugelde uitdrukking geworden onder softwareontwikkelaars. Dat begint vaak al met automatische codegeneratie uit modellen. Na geautomatiseerde codeanalyse³ en, jawel, geautomatiseerd testen volgt geautomatiseerde deployment. Een geautomatiseerde overgang van de Changeomgeving naar de Runomgeving dus. In de Runomgeving zien we ten slotte steeds meer ingebouwde en geautomatiseerde monitoring en logging, met standaard dashboards. De tools hiervoor worden steeds volwassener en laten zich steeds beter aaneenrijgen tot wat wel een 'zero touch pipeline' wordt genoemd.

Bij deze ontwikkeling zien we ook de verschillende rollen naar elkaar toegroeien. Testers leren ontwikkelen en ontwikkelaars⁴ worden meer 'test aware'. Uit eigen beweging omarmen de ontwikkelaars concepten als Behaviour Driven Development (BDD) en Test Driven Development (TDD) en daarmee komen ze dichter bij de gebruikers én de testers te staan.

Gelukkig maar, want zonder een gedeelde ambitie tot automatisering van handmatig werk is een soepele, continue flow onmogelijk. Het motto is 'automatiseer alles, in alle fasen' en houd tijd over voor het intelligente en creatieve werk.

1.4 Testen hoort erbij, op elk niveau

Serieuze vooruitgang bestaat niet zonder grondig testen. Dat geldt voor alle sectoren en organisaties en voor elke serieuze softwareapplicatie. Als je de t van testen weglaat krijg je sofware en ben je gedoemd tot mislukken.