Behaviour Driven Development – lesson:1

Binnen DevOps is er een steeds toenemende rol voor testautomatisering ingeruimd. Dit is ook rand voorwaardelijk om sneller nieuwe functionaliteit te kunnen uitrollen. Want hoe je het ook wendt of keert het is niet meer van deze tijd om te wachten op een regressie test die meer dan week duurt. Het moet binnen DevOps mogelijk zijn om op ieder moment van de dag een release naar productie te brengen.

Testautomatisering kan hierbij een uitweg bieden, omdat je met testautomatisering in staat bent om op elk moment van de dag testen uit te voeren. Om test automatisering vorm te kunnen geven zijn er verschillende manieren om je testen vast te leggen. In deze update wil ik graag het fenomeen: Behaviour Driven Development. Acceptance Test Driven Development of Specification By Example nader uitleggen.

Veel van jullie hebben vast wel vaker een van de volgende termen gehoord:

Feature files, Step Definitions, Cucumber, SpecFlow, Fitnesse, Gehrkin.

Het zijn allemaal technische hulpmiddelen die het vastleggen van systeem gedrag (dus wat het systeem moet doen) bevorderen in plaats van vast te leggen waarmee het systeem wordt gerealiseerd. Pagina 6 van 7

Om even een voorbeeld te geven: Je staat bij een stand-up of je bent aanwezig bij een Refinement sessie.

De Product Owner legt uit dat hij of zij graag nieuwe functionaliteit gerealiseerd wil hebben en wat dit inhoud. Dit doet hij in de vorm van User Stories. Ogenblikkelijk zie je de ontwikkelaar denken in if…then…else statements, testers in testpaden en acceptatie criteria en analisten in requirements. Ieder denkt in zijn eigen taal en heeft zijn eigen interpretatie.

Behaviour Driven Development (BDD) helpt hierbij om te komen tot een gezamenlijke waarheid.

Door deze gemeenschappelijke waarheid vast te leggen in daarvoor geschikt medium, bijvoorbeeld een wiki, is iedereen instaat om bij te dragen aan de deze gemeenschappelijke waarheid.

Het proces

De PO heeft een User Story die gerealiseerd moet worden. Deze User Story wordt verduidelijkt aan de hand van Examples die worden uitgewerkt in Requirements en in Testen. De Testen verifiëren de juiste implementatie van de Requirments.

Maar hoe zit het dan met Step Definitions, Feature Files, Gherkin en met Cucumber, Fitnesse, SpecFlow. Om met de laatste drie te beginnen, dat zijn technische hulpmiddelen om er voor te zorgen dat de Examples worden vastgelegd en ontsloten op een wijze dat iedereen er mee kan werken. Cucumber is de test-engine voor een Java omgeving, SpecFlow is de testengine voor een DotNet omgeving en Fitnesse is een testengine waarbij de Examples op een wiki worden vastgelegd.

Gehrkin is een specifieke notatiewijze waarmee de Examples worden vast gelegd. Gehrkin bestaat uit de volgende constructie:

Given pre-conditie

When uitgevoerde actie

Then verwacht resultaat

Dit zijn de drie termen die de Gehrkin-syntax inhouden en deze kunnen nog uitgebreid worden met een AND om de Given, When en Then verder te specificeren. Examples leg je vast in Feature Files die je kunt verrijken met tabellen om de Gehrkin-syntax verder te voorzien van details en aansprekende voorbeelden. Binnen Feature files heb je twee soorten scenario’s die je kunt vast leggen:

1. Scenario’s:

2. Scenario Outlines:

Beiden werken met de Gehrkin-syntax en met tabellen die de testcases aangeven. Alleen bij de Scenario’s staan de tabellen in de syntax en bij Scenario Outlines staan deze apart gespecificeerd in de sectie: Examples onder het geformuleerde Example.

Wanneer je klaar bent met het uitwerken van de voorbeelden, dan kun je op basis van de Featurefiles de Stepdefinitions genereren welke de interface vormen tussen de FeatureFiles (wat je bron van de documentatie is) en de testtool die je gebruikt om het systeem onder test aan te sturen. Deze testtool kan eigenlijk elke testtool zijn die je maar wilt, nu wordt hier veel Selenium voor gebruikt, maar je zou hier ook net zo goed de testengine van Microsoft (Coded-UI) of HP-UFT voor kunnen gebruiken.

In een volgend Post wordt uitgelegd wat Featurefiles zijn, wat het verschil is tussen Scenario’s en Scenario Oultlines en wanneer je het beste voor het een of voor het ander kan kiezen.

Advertisements