15 juli 2021
Leestijd 8 min
Geautomatiseerd testen: help business en IT van elkaar houden
<span id="hs_cos_wrapper_name" class="hs_cos_wrapper hs_cos_wrapper_meta_field hs_cos_wrapper_type_text" style="" data-hs-cos-general-type="meta_field" data-hs-cos-type="text" >Geautomatiseerd testen: help business en IT van elkaar houden</span>
Share this via:

Geautomatiseerd testen, mits goed uitgevoerd, elimineert het verhoogde risico en de extra problemen die handmatig testen met zich meebrengt. In deze blogpost ontkrachten we het misplaatste geloof dat handmatig testen en bewijs verzamelen veel waarde toevoegt.

Bij ACA werken we volgens een agile methodologie. Daarom werken we nauw samen met onze klanten om oplossingen te leveren die hunechte bedrijfsproblemen oplossen. Bovendien streven we ernaar ze snel op te lossen. Deze aanpak heeft keer op keer zijn waarde bewezen, omdat er zo snel mogelijk zoveel mogelijk feedback wordt verzameld.

Sommige klanten dwingen van oudsher grondige handmatige gebruikersacceptatietests af vlak voordat een softwareverandering live kan gaan. De reden ligt voor de hand: hun bedrijf is sterk afhankelijk van deze software, dus alle risico's en financiële gevolgen moeten worden uitgesloten. Dus handmatig testen nadat alle ontwikkeling is voltooid is heel logisch, toch?

Of toch niet? Ons team is er vaak getuige van geweest dat handmatig testen indirectmeer risico's en problemen veroorzaakt, in plaats van minder! We zouden zelfs zo ver willen gaan om te zeggen dathet als een virus is. Een virus dat elk onderdeel van de organisatie infecteert, vaak volledig onopgemerkt! Hoe is dit mogelijk? Omdat handmatig testen niet alleen de eindcontrole is die het had moeten zijn. Het is eenproces. Een proces dat de manier stuurt waarop je change management uitvoert, de manier waarop je resources plant en de manier waarop je verantwoordelijkheid toewijst en verschuift.

Handmatig testen: hogere kosten en risico's

manual testing example

Volkomen duidelijk, toch?

what? gif

Misschien niet. Laat ik het samenvatten:

  1. Omdat handmatig testen tijdrovend is, resulteert het in te weinig en dus te grote releases. Dit veroorzaakt:
    • Risicovolle go-lives
    • Trage feedback
    • Lastige afhankelijkheden, complicerende hotfixes
  2. Door het extra vangnet verschuift de verantwoordelijkheid van het ontwikkelteam. Dit leidt onvermijdelijk tot ontbrekende geautomatiseerde testscenario's en controles, met als gevolg
    • Onvoldoende vertrouwen voor toekomstige go-lives
    • Verplichte (of ontbrekende) handmatige regressietests bij toekomstige wijzigingen
    • Bugs (na verloop van tijd)

Dit alles kost echt geld en brengt echte risico's met zich mee!

Geautomatiseerde tests in de bestuurdersstoel zetten

In plaats van elk probleem bij de bladeren aan te pakken, probeerden we een relatief kleine actie te ondernemen om het probleem bij de wortel aan te pakken. We probeerden het misplaatste geloof weg te nemen dat dit soort handmatig testen en handmatig bewijs verzamelen veel waarde toevoegt.

We hadden al een enorme hoeveelheid geautomatiseerde tests als onderdeel van onze levenscyclus van testgestuurde ontwikkeling. Dus hoe konden we deze gaan gebruiken? We begonnen met het uitleggen van onze huidige testgewoonten aan de zakelijke gebruikers. Daarna zijn we voor een concreet project samen scenario's gaan definiëren en tot slot hebben we ze continu inzicht gegeven in de resultaten.

types of testing explained

Stap 1: leer de business over geautomatiseerd testen

Welke soorten geautomatiseerde tests zijn er al? Welke garanties bieden ze? En welke garanties bieden zeniet?

De business houdt zich bezig met hun business. Ze kennen de applicatiearchitectuur niet, laat staan wat een geautomatiseerde test eigenlijkis. Je kunt ( de meeste) geautomatiseerde tests nietzien, dus hoe kun je ze ooit vertrouwen? Daarom gaat het bij het verminderen van de afhankelijkheid van handmatig testen niet om het veranderen van enkele werkwijzen en het toevoegen van enkele controles.In de kern gaat het omhet verschaffen van inzicht en het verdienen van vertrouwen.

Meer specifiek hebben we het volgende uitgelegd:

  • We werken test-driven: er wordt geen enkele feature geïmplementeerd voordat er een test is. Deze test moet ook mislukken voordat de functie wordt geïmplementeerd, om er zeker van te zijn dat het juiste wordt getest.
  • Het is onmogelijk om een wijziging op te leveren zonderdat alle tests geslaagd zijn ( wat wij ontwikkelaars een succesvolle 'build' noemen). Niet alleen nieuwe tests voor een nieuwe story, maar ook de tests van alle eerdere stories.
  • Onze applicaties zijn gelaagd en elke laag biedt zijn eigen garanties. Voor de technische lezer: we gebruiken een variant op hexagonale architectuur waarvan de ontkoppeling van technologie perfect bleek aan te sluiten bij het bieden van zakelijke garanties.

Onze bedrijfsdomeinlaag is volledig onbewust van technologie of infrastructuur, dus die dingen kunnen onmogelijk de garanties doorbreken die door de tests op deze laag worden gegeven.

a business domain layer example

Onze use-case laag vertrouwt alleen op infrastructuur in high-level business termen, bijvoorbeeld op iets dat dingen kan 'opslaan' of 'vinden'. De tests garanderen correcte resultaten voor de acties en queries in deze laag,gegeven de correcte infrastructuur.

a business domain layer example

Concrete technologie/infrastructuur keuzes zijn plugins aan de rand van onze applicaties, op dezelfde manier als een printer in een computer wordt geplugd: Excel kent het model van je printer niet, het weet alleen dat het kan afdrukken. Als de plugins ('printer') werken, zullen de use cases (acties en query's) ook werken.

business domain layer and use case example

We testen alle lagen ook samen met click-through-UI-tests. Omdat ze visueel kunnen worden weergegeven en alle onderdelen in de integratie omvatten, bieden deze tests veel vertrouwen voor de business.

Er zijn enkele hiaten in onze geautomatiseerde teststrategie. Sommige integraties met infrastructuur of externe services kunnen niet gemakkelijk op een geautomatiseerde manier worden geverifieerd. Hier moet de nadruk liggen op handmatig testen.

Het bedrijf moet zijn tijd niet verspillen door te controleren of er een bepaald bericht verschijnt wanneer je op een bepaalde knop klikt.

Het doel is niet om zakelijke gebruikers in ontwikkelaars te veranderen, maar om hen te laten zien waarom het vertrouwen van ontwikkelaars in deze tests vanzelfsprekend is. Dus in plaats van ze te overstelpen met technische details, vraag waar ze zich zorgen over maken en geef geduldig antwoord. Ze zullen zich niet alle details herinneren en dat hoeft ook niet. Maar het vertrouwen zal blijven. En pas als ze het vertrouwen hebben verdiend, zullen ze accepteren dat hun testgewoonten veranderen. Sterker nog, we hebben gemerkt dat ze er zelf om vragen!

Stap 2: Bepaal samen testscenario's

Welke scenario's zijn bedrijfskritisch? Welke controles zijn nodig om voldoende vertrouwen te geven om live te gaan? Dit zijn vragen die we nu behandelen tijdens het uitwerken van story's. Als gevolg daarvan zijn de resulterende geautomatiseerde tests nu een deliverable van elke story geworden.

Handmatige tests richten zich vaak op lange, end-to-end bedrijfsprocessen. Zelfs als bewezen is dat elk onderdeel van het proces op zichzelf perfect werkt en u bent degene die de schakelaar in productie omzet: zouu zich 100% zeker voelen ? Voor degenen die dapper genoeg zijn om ja te antwoorden: het is ofwel omdat je alles tot in detail weet, of je weet niet genoeg!

Daarom hebben we ons gericht op dezelfde end-to-end bedrijfsstromen, gesimuleerd door te klikken via de geïntegreerde applicatie (met uitzondering van slechts enkele kleine externe services).

Stap 3: Voor continu inzicht zorgen

De juiste geautomatiseerde testscenario's waren nu bepaald, maar hoe konden de zakelijke gebruikers weten dat deze correct waren geïmplementeerd? En hoe konden we ze het bewijs leveren dat ze moesten documenteren? Daarom introduceerden we als laatste stap een gedetailleerd testrapport met alle uitgevoerde stappen in de vormvan Gegeven-Wanneer-Dan.

detailed test report to show all steps in given-when-then form

Als je op een stap klikt, wordt een pop-up geopend met schermafbeeldingen en een logboek van alle uitgevoerde controles. Dit geeft onze zakelijke gebruikers bewijs en vertrouwen dat de juiste dingen zijn gecontroleerd.

screenshots of detailed steps detailed overview of the given-when-then form

Positieve effecten van de introductie van geautomatiseerd testen

We hebben deze nieuwe manier van samenwerken ongeveer 6 maanden geleden geïntroduceerd, voor meerdere ontwikkelingsgolven van een nieuwe applicatie. Tijdens dit project hebben we veel positieve effecten gemerkt:

  • Minder tijd verspild aan handmatig testen.
  • Meer vertrouwen: we schreven al veel tests, maar deze nieuwe aanpak leidt ons naar de juiste scenario's en controles: diegene die het belangrijkst zijn voor onze eindgebruikers. Omdat er geen mismatch meer is, hebben zowel de zakelijke gebruikers als de ontwikkelaars veel meer vertrouwen om live te gaan.
  • Wanneer we een verandering moeten doorvoeren (functioneel of technisch, bijv. upgrades), zijn de eerste vragen die altijd opkomen: "Wat is de impact? Kan dit iets kapot maken?" Nu kunnen we gewoon het testrapport raadplegen, dat alle belangrijke bedrijfsstromen bevat.
  • Eenvoudiger plannen: door een kleinere tijdsafhankelijkheid van de business kunnen we sommige veranderingen eerder doorvoeren of tijdschema's flexibeler verschuiven.
  • Blootgelegde blinde vlekken bij het testen. Omdat de ontwikkelaars nu meer verantwoordelijk zijn, voelen ze de gezonde druk om ervoor te zorgen dat er geen blinde vlekken meer zijn bij het testen. Als gevolg daarvan worden ze nu gedekt door extra geautomatiseerde tests en gezondheidscontroles. In uitzonderlijke gevallen kan er een kleine handmatige test gericht zijn op de testleemte in plaats van een volledig tijdrovend bedrijfsproces.
  • Verbeterde verhaalkwaliteit. De focus van de stories is verschoven naar werkende bedrijfsscenario's. Bijvoorbeeld, in plaats van dat een story voor een indieningsscherm al velden bevat om 'goedkeurders' te selecteren, worden deze velden nu alleen toegevoegd in de story die goedkeuringen implementeert. Op die manier is het moeilijker om in de val te trappen van het implementeren van 'features' die eigenlijk geenfunctionaliteit toevoegen.

⚠️ Valkuilen

Hoewel we ongelooflijk positief zijn over deze nieuwe manier van werken, zijn er nog enkele valkuilen waar we voor moeten oppassen.

  • Te veel end-to-end tests.De testpiramide promoot het schrijven van de meeste tests op unit niveau omdat unit tests sneller zijn, makkelijker te debuggen en minder vatbaar voor willekeurige fouten die niets te maken hebben met de applicatiecode. We hebben geprobeerd het aantal end-to-end scenario's te beperken door een risico-gebaseerde benadering te kiezen: als een kapotte functie geen risico vormt, zijn tests op de lagere niveaus (bijv. unit tests) voldoende. Als bijvoorbeeld een annuleerknop niet werkt, kan de gebruiker gewoon zijn browservenster sluiten.
  • Natuurlijke drang om terug te vallen op handmatig testen. Voor kleine wijzigingen kost handmatig testen en handmatig bewijs verzamelen immers niet zo veel tijd. Dergelijke tests zullen echter waarschijnlijk niet worden herhaald voor toekomstige wijzigingen. Daarom is het belangrijk om ze te behandelen als verkennende tests in plaats van een vangnet, zodat de verantwoordelijkheid bij het team en de afgesproken testscenario's blijft liggen.

➡️ Volgende stappen

We vinden deze nieuwe manier van werken een enorme verbetering, maar het is nog maar het begin. We zien de volgende volgende volgende stappen:

  • Verminder de focus op het end-to-end niveau.We willen graag inzicht geven in geselecteerde tests op lagere niveaus,waarbij we de focushouden op de goedkoopste tests die voldoende vertrouwen geven.
  • Maak er een gewoonte van om testscenario's en controles samen met de businesste bespreken, zodat het de standaard manier van werken wordt.
  • Ga door met de verschuiving naar links.Overeengekomen testscenario's moeten de enige voorwaarde worden voor livegang, ter vervanging van tijdrovende goedkeuringen van verschillende belanghebbenden. Dit zou onze time-to-production voor hotfixes en features drastisch moeten verkorten en uiteindelijk onze klant op weg moeten helpen naar continuous delivery.
  • Behandel software als een levend product. In plaats van veranderingen alleen te plannen en goed te keuren in grote "projecten", zou het een gewoonte moeten worden om applicaties voortdurend te laten evolueren en aan te passen aan veranderende bedrijfsbehoeften.

Wat vindt u ervan? Wat vind je (niet) goed aan onze aanpak? Laat het ons weten!


Stef Noten
Stef Noten
Solution Engineer, ACA Group
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas
Contact us

Want to dive deeper into this topic?

Get in touch with our experts today. They are happy to help!

ACA mug mok koffie tas