a. Bestudeer de theorie over Behaviour Driven Development zodat je theorie achter de BDD leerdoelen van deze week haalt. De keuze is afhankelijk van of je Java of .NET hebt gekozen in je weekopdracht:
Edit 2024: De praktijk opdracht van BDD is in 2024 optioneel vanwege problemen overgang SpecFlow naar ReqNRoll en dat de 'Dare2Date' casus pas in week 4 volgt. De theorie van BDD moet je uiteraard wel kennen. Je zult de theorie dan in het Beroepsproduct van week 6&7 en het grote project moeten toepassen.
b. Opdrachten (maak tot en met opdracht 4, de rest in de les):
Pak uit de Opdracht voor de DevWorkshop de EuroCard service, maak hier (eigen keuze) een Java of .NET project voor aan, voeg BDD dependencies en tools toe (zie PluralSight) en voeg volgens BDD stijl Cucumber of Specflow tests toe en realiseer zo test-first de methoden.
Schrijf Gherkin code (given, when, then) voor 4 testgevallen credit cards nummers: 1, 2, 1023 en 208724
Schrijf glue code ('Step definitions')
Refactor de 4 tests naar één enkele Gherkin 'datatable'
Schrijf evt. ook dezelfde tests in TDD stijl (JUnit/XUnit).
Moet er nog een validatie en aparte melding bij voor credit card nummers met ongeldig format? (eigenlijk zouden ze zo moeten zijn: 6703 4444 4444 4449 (bron) en zou je ook een 'issuer check` kunnen doen).
Waarom wel, of waarom niet? En zo ja, hoe documenteer je dit? (want het staat niet in huidige spec)
Hier wat korte theorie over BDD uit verschillende bronnen, namelijk over de relatie met TDD en DDD uit de Wikipedia definitie, iets over de Three Amigo's (wie) en het 3-staps proces +1 (hoe). Tot slot iets over verschillende namen BDD, ATDD en SBE en quotes van Martin Fowler en Dave Farley.
We beginnen met de definitie van BDD op Wikipedia (2023):
"In software engineering, behavior-driven development (BDD) is a software development process that goes well with Agile software development process that encourages collaboration among developers, quality assurance experts, and customer representatives in a software project. It encourages teams to use conversation and concrete examples to formalize a shared understanding of how the application should behave.
[...] Behavior-driven development combines:
the general techniques and principles of TDD
with ideas from domain-driven design (DDD)
and object-oriented analysis and design
to provide software development and management teams with shared tools and a shared process to collaborate on software development."
Een belangrijk basisbegrip is 'self testing code'. Het is altijd goed het origine artikel van Martin Fowler hierover te lezen. Zijn onderstaande plaatje vat dit kort samen met beeld van code 'met een knop' die zichzelf kan testen. Maar dit kan een onervaren ICT'er onterecht het beeld geven dat je code kunt maken die op een of andere magische wijze zichzelf test (met een tool ofzo). En dat is natuurlijk niet het geval.