Trendsz, Testautomatisering, Tooling

Time-to-market is een belangrijke factor voor software projecten. Organisaties willen steeds sneller en steeds meer functionaliteit bij de klant krijgen om zo in te kunnen spelen op wijzigende behoeftes. Door de toepassing van continuous integration (CI) en continuous delivery (CD) met behulp van delivery pipelines, kan software in een hoog tempo en geautomatiseerd opgeleverd worden. Maar wat betekent dit voor de tester? Het biedt testers de kans om uit hun comfortzone te treden! De transitie naar CI/CD maakt testwerk namelijk uitdagender. Het geeft jou als tester de kans om je eens te verdiepen in andere zaken. In deze blog leg ik uit waarom.

Veeleisender ten aanzien van software

De samenleving stelt steeds meer eisen ten aanzien van software. Waar we voorheen al blij waren met een app voor internetbankieren voor het doen van transacties, willen we tegenwoordig dat deze app op z’n minst beschikt over een functionaliteit als ‘tikkie’, een actueel saldo weergeeft en ons helpt om ons huishoudboekje in orde te krijgen. Wanneer er een nieuwe game op de markt komt, roepen de gebruikers al na drie dagen dat er updates doorgevoerd moeten worden. Hoe meer functionaliteit hoe beter, toch? We leven in een wereld waarin we selectief moeten zijn met waar we onze beperkte aandacht aan besteden. We zijn veeleisender geworden en willen steeds sneller en steeds meer.

Handmatig testen: foutgevoelig en tijdrovend

Zonder delivery pipelines verloopt het opleveren van software vaak via een ontwikkel-, test-, acceptatie- naar een productie omgeving. Hierbij wordt de software stap voor stap handmatig naar de volgende omgeving gebracht, waar dan weer testen specifiek voor die omgeving plaats vinden. Bij elke oplevering zijn dan handmatige handelingen nodig. Dit werkt fouten in de hand en is tijdrovend. Dat zorgt er dan ook voor dat meerdere keren opleveren en korte feedback cycles bemoeilijkt worden, omdat de kosten van het steeds opnieuw opleveren al snel op gaan lopen. Het toepassen van continuous integration (CI) en continuous delivery (CD) met behulp van delivery pipelines is hier een mogelijke oplossing voor. Opleveringen worden dan vergaand geautomatiseerd waardoor de belemmering wegvalt om steeds vaker, steeds kleinere wijzigingen naar productie te kunnen brengen.

"Met CI/CD automatiseer je het gehele build-, test-, deploy- en releaseproces waardoor een korte time-to-market gerealiseerd wordt."

Automatiseren met CI en CD

Door middel van CI worden veranderingen in software direct geïntegreerd en vindt direct een integratie test plaats, zodat de integratie bewezen is. Zo is de code altijd in de juiste staat om op te leveren en elk type wijziging kan snel en veilig naar productie gebracht worden. Op deze manier wordt ‘waste’ in de vorm van werkvoorraad geminimaliseerd. De wijzigingen in productie kunnen kleiner gehouden worden en hebben minder impact op de bestaande software. CD focust op het geautomatiseerd overbrengen van software naar omgevingen, waardoor het mogelijk is om met één druk op de knop software naar productie te brengen en met als doel: sneller, sneller, sneller. Met CI/CD automatiseer je het gehele build-, test-, deploy- en releaseproces waardoor een korte time-to-market gerealiseerd wordt. Logisch dat steeds meer organisaties gebruik willen maken van delivery pipelines.

De impact op testen

CI/CD, delivery pipelines, kleinere wijzigingen, minder impact, software in een hoog tempo en geautomatiseerd opleveren: dat klinkt veelbelovend. Maar wat betekent dit eigenlijk voor de tester? Hoe voorkom je dat de delivery pipeline een efficiënte manier wordt om fouten naar productie te brengen? Hoe zorg je ervoor dat je nog steeds de juiste risico’s afdekt? Hoe zorg je ervoor dat je je team en de omliggende organisatie meeneemt in de totstandkoming van de delivery pipeline? Hoe krijg je de gewenste feedback?

Exploration track CI/CD delivery pipeline

Om een antwoord te geven op al deze vragen hebben we binnen Bartosz een exploration track georganiseerd en in deze blog deel ik graag de bevindingen daaruit. Hoe kunnen wij als tester meedenken bij de totstandkoming van een delivery pipeline? Hebben wij tips, adviezen, aandachtspunten? Met een groep Bartoszians zijn we een aantal avonden bijeengekomen om over dit onderwerp te brainstormen. Wat weten we van delivery pipelines? Wanneer de klant aan ons vraagt om mee te helpen bij het inrichten van een CI/CD delivery pipeline, wat kunnen we dan betekenen? Bij onze opdrachtgevers hebben we inmiddels veel ervaring opgedaan met het opzetten, inregelen en onderhouden van CI/CD delivery pipelines. Met elkaar hebben we dit op procesmatige wijze in kaart gebracht. Zowel voor een simpele webapplicatie als voor een complex systeem. Bovendien zijn we zelf hands-on aan de slag gegaan met het ontwerpen en bouwen van een pipeline. Inclusief het technische gedeelte.

Edward van der Wielen

Hoe veranderen de testwerkzaamheden?

1. Vroeger testen

Bij CI/CD wordt code meerdere malen per dag geïntegreerd, gebuild en getest. Dat zorgt ervoor dat je als tester in staat bent om nog vroeger in het ontwikkelproces meetpunten van kwaliteit in te bouwen. Je wacht immers niet meer tot de volledige functionaliteit opgeleverd wordt, maar kunt tussenproducten beoordelen, regressie in de gaten houden en bijsturen indien nodig. Door de juiste testen te selecteren in je build en integratie deel van de pipeline, krijg je vroeger een beeld van de kwaliteit van het op te leveren product.

2. Testautomatisering

CI/CD leidt tot het automatiseren van een groot deel van je testen. Maar welke testen ga je automatiseren en waar voer je die uit in je pipeline? Breng hiervoor je pipeline in beeld door met je team te bespreken wat de Definition of Done is. Bepaal vervolgens wat er in elke fase opgeleverd moet worden en ga deze activiteiten automatiseren. Uiteraard weten wij testers hoe en wat we willen testen, maar er is nu ruimte voor extra afwegingen. Het kritisch kijken naar overbodige en dubbele testen bijvoorbeeld en dus het reduceren van “waste”. Maar ook is het mogelijk om aan de hand van wijzigingen die gedaan worden te bepalen welke testen relevant zijn. Als je alle testen die je in je project uitvoert standaard automatiseert en in je pipeline stopt, zal je pipeline al snel verstopt raken. Je kunt intelligent de testen selecteren die je moet draaien, door bijvoorbeeld te kijken naar de inzet van AI. Wordt de pipeline gebruikt om de software ook volautomatisch naar productie te brengen, realiseer je dan dat er buiten je geautomatiseerde testen geen handmatige controles meer in je pipeline zitten en je geautomatiseerde tests dus de enige gatekeepers zijn om te voorkomen dat fouten naar productie gaan.

3. Test fasering

In de traditionele testfasering voer je sequentieel de testen in volgorde uit: unit tests, unit integration tests, system tests, acceptance tests. In een delivery pipeline is er geen enkele reden om testen die je veel inzicht geven, maar traditioneel later in het testproces zitten, niet eerder uit te kunnen voeren. Als er tijdens een project vaak blijkt dat een omgeving of database niet beschikbaar is, dan kan het waardevol zijn daar eerst een test voor uit te voeren om te voorkomen dat allerlei testen uitgevoerd worden maar falen omdat deze component niet beschikbaar is. Fail fast!
Niet alle testen hoeven of kunnen in de pipeline, dan raakt deze verstopt. Je kunt ook testen uitvoeren buiten de pipeline, zeker als er afhankelijkheden zijn met een ander project, of bij testen die erg lang duren. Toepassen van shift left (dichter tegen de ontwikkelaar aan) of shift right (testen in productie) behoort ook tot de mogelijkheden.

4. Tooling

Elk project kent zijn eigen platform, programmeertaal en voortbrengingstools. Het is aan te raden om met je test tools zoveel mogelijk aan te sluiten op de omgeving. Kies bijvoorbeeld voor complementaire tools als Karma die unit testen voor een javascript frontend kan uitvoeren, zonder dat daarvoor nog naar de user interface zelf hoeft worden gekeken. Programmeren de ontwikkelaars in Java? Kies dan voor een java based test tool als JUnit voor unit tests en Fitnesse of Robotframework voor acceptatie testen. Er is geen 1 tool te kiezen waarmee je alles test. Zoals Abraham Maslow’s law of instrument al zegt: “if all you have is a hammer, it is tempting to treat everything like a nail”. Er zijn veel verschillende testtools voor veel verschillende soorten tests; maak gebruik van de specifieke kracht van de diverse tools.

CI/CD maakt testwerk uitdagender

De transitie naar CI/CD maakt testwerk uitdagender. Het geeft jou als tester de kans om je eens te verdiepen in andere zaken. Treed buiten je comfortzone! Iedere pipeline is uniek en de situaties bij de klant is steeds weer anders. Jij als tester kunt meebewegen. Het is een lange reis naar een volledige CI/CD-pipeline die agile opgepakt kan worden en daar spelen testers een belangrijke rol in. Een goede CI/CD pipeline neemt veel repetitief werk bij de tester uit handen die daarop tijd vrij kan maken om aan exploration te doen; je kunt immers alleen automatiseren wat je weet en waarvan je het gedrag kunt voorspellen. Als tester is het extra interessant om te onderzoeken hoe de applicatie zich gedraagt in situaties die niet zijn voorzien of beschreven.

Schrijf je in voor
de nieuwsbrief

werkenbij overall

Werken bij Bartosz?

Vincent Verhelst

Geïnteresseerd in Bartosz? Dan ga ik graag met jou in gesprek. We kunnen elkaar ontmoeten met een kop koffie bij ons op kantoor. Of tijdens ontbijt, lunch, borrel of diner op een plek die jou het beste uitkomt. Jij mag het zeggen.

Mijn Paarsz