Testen in productie wordt steeds meer als het nieuwe normaal gezien. In dit tweeluik gaan de auteurs dieper in op de toepassing van testen in productie. Ze behandelen onder meer de redenen om testen in productie toe te passen, potentiële toepassingsgebieden, risico’s, impact op de QA- aanpak en de voor- en nadelen. In deel 1 gaan ze in op de redenen voor testen in productie, de definitie van testen in productie en mogelijke toepassingsgebieden.
De grenzen tussen ontwikkeling en productie vervagen steeds meer. Tot een aantal jaren geleden was het not done om software van welke aard dan ook in productie te testen. Alle kwaliteitsmaatregelen moesten voor livegang zijn uitgevoerd en eventuele bugs opgelost zijn voordat we live mochten gaan.
Wie goed om zich heen kijkt ontdekt dat het testen niet meer stopt bij het in productie nemen van een nieuw of gewijzigd systeem. Dit is mede veroorzaakt door de opkomst van het devops werken. Daarbij werken we continu gezamenlijk aan het product als ontwikkelaars en beheerders.
Wel of niet testen in productie?
Er zijn goeroes die zelfs beweren dat testen tijdens de ontwikkeling niet meer nodig is en beperken zich tot het testen in productie. Hiermee lijkt het traditionele testen zijn beste tijd te hebben gehad. Uiteraard zijn er aan de andere kant goeroes die sterk vasthouden aan de klassieke insteek. Van beide standpunten is natuurlijk iets te vinden en beide invalshoeken bevatten sterke punten. Kortom, de waarheid zal in het midden liggen.
Onze mening zit hier tussen in. Het is niet het een of het ander. Er zijn sterke situaties aan te wijzen waarbij testen in productie de enige mogelijkheid is om de kwaliteit van het product te valideren. Aan de andere kant wil je het risico niet lopen om de eerste testen in productie uit te voeren. Het afbreukrisico kan gewoon te groot zijn.
Vandaar dat we onze inzichten verzameld hebben, verrijkt met de ervaringen vanuit diverse projecten, in dit artikel. Naar onze mening zeker een positieve ontwikkeling waarmee tot nu toe niet af te dekken risico’s worden weggenomen.
Om verder in kunnen gaan op het fenomeen testen in productie en hiervan een definitie te kunnen geven is het belangrijk om te achterhalen waarom testen in productie plaatsvindt.
Redenen om in productie te testen
Zoals in de aanleiding al aangegeven zijn er goede argumenten en omstandigheden aan te voeren om in productie te testen. Een aantal redenen kunnen zijn:
Time to market. Met name bedrijven, zoals webshops en banken, hebben te maken met een enorme concurrentie. Andere bedrijven vóór blijven is dan een absolute noodzaak om te kunnen overleven.
Complexiteit. De systemen worden steeds complexer en diverser. In veel gevallen is het vrijwel onmogelijk om een productielike testomgeving in te richten. Denk bijvoorbeeld aan webapplicaties die op verschillende devices (smartphones/tablets) en met verschillende browsers moeten kunnen werken. Indien de risico’s te beheersen zijn, kunnen dergelijke toepassingen in productie getest worden.
Kosten. Het organiseren en inrichten van een testomgeving kan relatief hoge kosten met zich meebrengen. Testen in productie is dan een goed alternatief, mits de risico’s te overzien en te beheersen zijn.
Geesten rijp maken voor een nieuw product. Middels een push strategie (A/B situaties; twee varianten van een website worden getest)) wordt gekeken welke variant het beste aanslaat bij het publiek.
Klantgedrag (koopgedrag) vaststellen. Om klantgedrag vast te kunnen stellen kan er gewerkt worden met proefopstellingen waarin potentiële klanten kennis kunnen maken met een alternatief/innovatief product. De leveranciers krijgen dan snelle feedback op het product.
Niet alles is te testen of vooraf te bedenken. Testers zijn creatieve mensen, die in staat zijn om vele situaties te bedenken. Echter, ook testers is niets menselijks vreemd. Door de combinatie van alle componenten en zeker als er een historie van applicaties is mee te nemen, is op voorhand niet alles te bedenken. Testen in productie kan dan een uitkomst zijn.
Niet altijd is de juiste situatie te creëren in een testomgeving. Afhankelijkheden van combinaties van data met daarbij bijvoorbeeld correcties naar het verleden of toekomstige mutaties in combinatie met import van externe bestanden, maakt het lastig om een goede uitgangssituatie te creëren.
Situaties waarbij het risicoprofiel niet al te groot is kunnen overwogen worden om in productie te valideren. Er zijn situaties te onderkennen, zoals in de ruimtevaart of de Formule1, waarbij het niet realistisch is om eerst testen uit te voeren. Op basis van intensieve monitoring worden instellingen online aangepast.
Uitgaande van de bovengenoemde beweegredenen zou je testen in productie als volgt kunnen definiëren.
Definitie
Testen in productie is een aanvullende test op de bestaande testsoorten van specifieke situaties in een productieomgeving, door het ontbreken van randvoorwaarden in het ontwikkelproces of het niet kunnen creëren van de juiste uitgangssituatie. Op basis van een goede risico afweging, gelimiteerd tot bepaalde branches c.q. toepassingen.
De definitie van testen in productie is door de auteurs van dit artikel zelf opgesteld. Een passende definitie was niet voorhanden (voor zover bekend). In de definitie komen drie belangrijke aspecten terug, te weten: niet alle randvoorwaarden zijn te creëren in een ontwikkelomgeving om de testen uit te voeren. Er moet een goed inzicht zijn om de risico’s te beheersen en als laatste moet er goed nagedacht worden voor welke domeinen je testen in productie wil toepassen.
Vanuit onze ervaring zie we de volgende toepassingsgebieden voor het testen in productie.
Toepassingsgebieden
Hoewel testen in productie steeds meer aan populariteit en aandeel wint in de testactiviteiten, kun je testen in productie niet zomaar overal inzetten. Er zijn situaties denkbaar waar het risico gewoon te groot is.
Voordat we op de situaties zelf ingaan een paar aandachtspunten vooraf:
- Voer altijd een risico analyse uit met alle relevante stakeholders om de effecten met elkaar vooraf te bepalen. Zo voorkom je ongewenste neven- of tsunami effecten, die wellicht niet meer te beheersen zijn. Belangrijk hierbij is om geen enkel signaal te negeren.
- Zorg altijd voor een plan B. Dat kan zijn een roll back naar de vorige situatie of het behoud van de huidige omgeving naast de nieuwe omgeving.
- Zorg altijd voor een fast feedback loop zodat je eventuele issues snel kunt analyseren en oplossen. Mogelijke downtime wordt dan geminimaliseerd. Eventuele (toe) leveranciers dienen stand-by te staan.
- Bepaal het moment dat je testen in productie gaat toepassen. Uiteraard kun je in het kader van een shift to the left invalshoek zeggen: ‘we testen alleen maar in productie’, maar dat is een minder realistisch punt. Het product zal enige mate van volwassenheid c.q. kwaliteit moeten bevatten alvorens je verantwoord testen breder kunt uitzetten.
In welke situaties is testen in productie goed toe te passen?
- In de autosport, denk aan de Formule1, wordt uiteraard in de fabriek uitgebreid getest. Gedurende de race wordt continu de performance van auto en coureur gemonitord. Daar waar nodig worden settings en/of instructies aangepast.
- Een ander interessant fenomeen dat zich voordoet zijn zogenaamde ‘test’ activiteiten in productie waarbij het klantgedrag wordt gevolgd om bijvoorbeeld productkeuzes te maken zoals met A/B-testing. Hierbij krijgen twee even grote klantgroepen elk hetzelfde scherm met een gering verschil te zien op basis waarvan kan worden vastgesteld waar de voorkeur van de klant naar uitgaat.
- Het leveren van een relatief “Af” product in de vorm van een betatest om zoveel mogelijk feedback op te halen vanuit diverse gebruikersgroepen en invalshoeken. Bekende voorbeelden zijn nieuwe versies van besturingssystemen als Android of IOS. Een ander voorbeeld is het beschikbaar stellen van de Covid-19 app in de regio Twente om feedback uit een representatieve bevolkingsgroep op te halen.
- In de automotive wereld kun je testen in productie gebruiken voor het inrichten en/of optimaliseren van verkeersstromen, testen van zelfrijdende voertuigen of bijvoorbeeld treinen.
- Het testen van werkplek configuratie in combinatie met regressietesten voor applicaties in een duale uitvoering. Hierbij behoudt je de oude situatie als back up mechanisme.
- Een ander toepassingsgebied staat een beetje los van een specifieke functionele situatie maar is gerelateerd aan de beschikbaarheid van de juiste testdata. Er zijn situaties te bedenken dat het opbouwen van de testdata zoveel inspanning en geld kost dat het efficiënter is om de testen met productiedata in productie uit te voeren.
In welke situaties is het niet verstandig om testen in productie toe te passen?
- Mission Critical Systems. Om dergelijke systemen alleen in productie te testen kan tot desastreuze situaties leiden. Voordat een productietest voor dergelijke situaties kan worden toegepast is het verstandig de traditionele testsoorten succesvol uit te voeren. Of het toepassen van simulatoren om op voorhand zoveel mogelijk risico’s uit te sluiten.
- Medische toepassingen. Daar wordt vanuit de FDA (Food and Drug Administration) al zware reguleringen op uitgevoerd voordat je toestemming krijgt om bijvoorbeeld veldtesten uit te voeren.
- Situaties die onomkeerbaar zijn waardoor onbeheersbare situaties gaan optreden. Je kunt hier bijvoorbeeld denken aan de stormvloedkering.
- Wellicht niet direct kwantitatief te maken maar denk ook bijvoorbeeld aan imagoschade. Als de situatie zich voordoet dat testen in productie wordt toegepast en het levert zoveel negatieve reclame op waardoor bijvoorbeeld een bedrijf failliet gaat, is het beter een meer traditionele aanpak te kiezen.
- Onvoldoende inzicht in de effecten in de keten. Op het moment dat je mogelijk gedrag niet kunt voorspellen in de keten of een reeks aan ketens wees dan uitermate voorzichtig in het toepassen van testen in productie.
Auteurs: Jos van Rooyen, Jurgen van Amerongen en Martijn van der Poel