BDD vs TDD en Unit Tests

BDD vs TDD vs Unit Tests

Hoe verhoudt BDD zich met TDD en unittests van webapplicaties nu we dit steeds meer gebruiken voor het automatisch testen van onze webapplicaties? Is het zinvol of juist dubbelop?

Wat is BDD, TDD en Unittesten?

BDD (Behaviour Driven Development) wordt gebruikt in teams om acceptatie-criteria voor gebruikersscenario’s te specificeren.

TDD (Test Driven Development) is een methode om eerst een falende test te schrijven, dan precies genoeg code om de test te laten slagen en tenslotte de code te refactoren naar betere kwaliteit.

Een Unit Test is een stuk code waarmee je als ontwikkelaar je productiecode test. Langdurig foutzoeken naar bugs voorkom je hiermee. TDD + unittesten samen zijn een krachtige combi om snel, gefocust en met kwaliteit te ontwikkelen.

 

Overlap?

Er lijkt een overlap te zijn tussen de testen die je maakt voor BDD en de unittesten. Doen we niet dingen dubbel?

Neem bijvoorbeeld de User Story die een wachtwoord-vergeten functionaliteit beschrijft:

“Als gebruiker wil ik mijn wachtwoord kunnen wijzigen waarbij ik feedback krijg over de sterkte zodat mijn account goed beschermd is tegen hacking.”

De acceptatietesten hiervan beschrijven stuk voor stuk de feedback die op het scherm verschijnt bij een te kort wachtwoord, en wachtwoord zonder cijfers, een wachtwoord zonder vreemde tekens, etc.

Als ik deze testen in Cucumber opneem dan is er inderdaad een bijna 1-op-1 overlap met mijn unittesten die ik zou schrijven met TDD.

 

BDD is TDD made easy

Die 1-op-1 overlap klopt ook. Dan North ontwikkelde BDD toen hij mensen keer op keer zag worstelen met het bedenken van goede functionele testen voor TDD. Hij kwam met BDD waarin ontwikkelaars samen met Product Owner, tester of analist de acceptatiecriteria zo opschrijven dat deze makkelijk om te zetten zijn in een automatische test.
Dit gaat met de Gherkin notatie van Given… When… Then…. (meer info op Introducing BDD)

 

Werk outside-in

Hoe combineer je nu BDD met unittesten? Een best-practise is Double Loop TDD:

Double Loop TDD

Bron: Emily Bache

 

BDD helpt TDD

Samengevat: BDD helpt om goede specificaties voor je unittesten te verkrijgen van Product Owner, tester of analist. Deze zet je volgens de Double Loop TDD werkwijze om in werkende code. BDD is kortom een handig hulpmiddel om Test Driven te coderen.