Documenteer en test met Specflow

Technologie

Documenteer en test met Specflow

Functionele, geautomatiseerde testen gestuurd vanuit QA

In een softwareapplicatie is het belangrijk dat functionaliteit goed getest wordt. Dit kan je doen door handmatig een applicatie te testen, maar dat kost veel tijd en moet bij elke aanpassing herhaald worden. Aan de andere kant kan je hier ook integratietesten voor bouwen, maar meestal heeft een QA engineer hier weinig zicht op doordat deze in een programmeertaal geschreven is en begrip van de techniek nodig is. Om de brug te slaan tussen enerzijds een functionele testbeschrijving en de technische uitwerking daarvan gebruiken wij Specflow.

Specflow is een framework voor geautomatiseerd testen vanuit de behavior-driven design filosofie. Hierin schrijf je een 'Scenario' in het Nederlands of Engels, opgebouwd vanuit meerdere stappen in een Given-When-Then opzet. Vanuit dit scenario kan je dan per regel een ‘Step Definition’ genereren: een C# methode die de logica achter de stap daadwerkelijk uitvoert. Een stap heeft een enkele step definition, maar kan wel meerdere keren gebruikt worden tussen verschillende testen! Om Specflow effectief in te zetten is het van belang dat de QA engineer vanaf het begin  aansluit bij het bouwen van functionaliteit. Door vroegtijdig je functionaliteit op te schrijven in feature files bereik je overeenstemming over datgene dat gebouwd moet worden en welke scenario’s je daarbij afdekt met automatisering. Tijdens de implementatiefase kunnen de ontwikkelaars de step definitions invullen. De testen wordt pas groen wanneer de techniek goed geïmplementeerd is.

RL403421

Voorbeeld

We geven kort een voorbeeld van Specflow waarin we een auto met lege tank proberen te starten als we verschillende brandstoffen in de tank gooien. We beginnen met een succesvol scenario waarin de auto start als de juiste brandstof getankt wordt, in dit geval benzine. Achter elke zin zit een implementatie in code die de stap uitvoert.

 

Scenario: Een benzineauto start wanneer er benzine in de tank zit

Gegeven een benzineauto met een lege tank

Wanneer we de tank vullen met benzine

En we de auto proberen te starten

Dan start de auto

 

We willen nu een foutscenario schrijven waarin de auto niet start als we een verkeerde brandstof tanken, bijvoorbeeld diesel. In het scenario hieronder staat een uitwerking hiervan. Daarin kun je zien dat twee stappen die in het eerste scenario aanwezig zijn, ook terugkomen in het tweede scenario. Dit zijn namelijk de zinnen “Gegeven een benzineauto met een lege tank” en “En we de auto proberen te starten”. Omdat die in het eerste scenario al zijn geïmplementeerd hoeven we in het tweede scenario alleen de andere twee stappen te programmeren.

 

Scenario:   Een benzineauto start niet wanneer er diesel in de tank zit

Gegeven een benzineauto met een lege tank

Wanneer we de tank vullen met diesel

En we de auto proberen te starten

Dan start de auto niet

Voordelen

Er zitten voor ons veel voordelen aan het werken met Specflow. Om de belangrijkste punten even met je door te nemen:

  • Door onze functionele testen zo op te zetten hebben we een verdeling tussen de intentie van de test (de feature file) en de implementatie van de test (de step definition). In een integratietest die alleen uit code bestaat weet je niet of de implementatie en de intentie gelijk zijn.
  • Doorgaand op het bovenstaande: de geschreven feature files zijn tegelijkertijd documentatie van de functionaliteit op het project. Ook bij teamwissels kunnen nieuwe teamleden kijken welke functionaliteit het project moet leveren zonder zich eindeloos in user stories te verdiepen.
  • Wanneer een test faalt is het concreet in welke specifieke stap de test faalt, wat helpt bij het onderzoek naar de oorzaak.
  • De test suite wordt inzichtelijk voor QA waardoor zij meer vertrouwen krijgt in de automatische testen op een project. Door QA in een vroeg stadium mee te nemen doe je ook meteen aan shift-left testing (test often and early).
  • Het schrijven van nieuwe testen kan heel snel gaan, omdat alleen de nieuwe stappen geïmplementeerd moeten worden. Bij ons is het sneller om een nieuwe Specflow-test te schrijven dan een nieuwe integratietest.
  • Via Specflow en de LivingDoc plugin krijgen wij op Azure DevOps heel inzichtelijk welke testen we hebben en waar die fout gaan. Onder andere in pull requests is dit handig, want je weet meteen of er geen fouten zitten in de functionaliteit die je oplevert.

 

Nadelen

  • Het kan verleidelijk zijn om stappen in een scenario zo klein mogelijk te maken zodat je dezelfde code zoveel mogelijk kan hergebruiken. Daardoor kunnen je scenario’s heel lang, minder leesbaar en minder begrijpelijk worden.
  • Het Specflow framework kan een performance-impact hebben op de doorlooptijd van je automatische testen.
  • Er zit een leercurve aan Specflow. Het is handig om te leren van iemand die er al ervaring mee heeft.

 

Voor ons wegen de voordelen zwaarder dan de nadelen en zien wij een enorme verbetering in de algehele kwaliteit van het project waarop wij Specflow hebben ingezet.

Onze ervaring leert dat het schrijven van scenario’s die uit drie tot zes stappen bestaan de beste balans treffen tussen leesbaarheid en herbruikbaarheid van je stappencollectie. Als je hier scherp op blijft krijg je er een hele werkbare testsuite voor terug die integratietesten en documentatie combineert.

Roblipsiusxgaransys 0013 Patrick

Meer weten? Neem contact op.

Patrick Severijns

Business Unit Manager
06-51150885
p.severijns@garansys.nl