Starten met het uitwerken van tests in plaats van met het schrijven van code. Het beschrijft in één zin de werking van test-driven development, kortweg TDD genoemd. Het voornaamste doel van unit tests, de testen die gebruikt worden bij TDD, is het verifiëren van de wensen en verwachtingen van een opdrachtgever. Het vooraf identificeren ervan komt maatwerk software ontwikkeling ten goede. In dit artikel vertel ik je meer over de wijze waarop Scrumble TDD toepast bij de realisatie van maatwerk software voor onze opdrachtgevers.
Werkwijze bij het gebruik van TDD voor maatwerk software
Het volgens de principes van test-driven development laten ontwikkelen van maatwerk software hoeft niet ingewikkeld te zijn. Bij een project wordt volgens een vast stappenplan gewerkt, bestaande uit vijf losse stappen.
Stap 1: uitwerken van een unit test
De eerste stap bij het ontwikkelen van een software oplossing is het uitwerken van een user story. Dit is een korte beschrijving van hetgeen de opdrachtgever wenst te bereiken met een functie binnen de software. Op basis van deze user story wordt een unit test uitgewerkt, die precies beschrijft hoe de requirements horend bij de user story geverifieerd kunnen worden.
Het gaat hierbij niet uitsluitend om de happy paths, ofwel het verwachte gedrag van een component uit de software. Minstens zo belangrijk is het meenemen van de unhappy paths in deze tests. Wat zijn de potentieel onverwachte issues die op kunnen treden? Welke scenario’s zijn te onderscheiden, in het geval de component niet volgens de user story functioneert?
Stap 2: voer de unit test uit
Tijd om de gecreëerde unit test uit te voeren. Het klopt, de unit test slaagt niet! Immers, bij TDD wordt gestart met het uitwerken van de unit test om deze vervolgens om te zetten naar bruikbare code. Zou een test slagen, dan is deze niet correct uitgewerkt.
Stap 3: zet de unit test om naar bruikbare code
De volgende stap is gericht op het daadwerkelijk omzetten van de unit test naar bruikbare code, als onderdeel van de maatwerk software waaraan gewerkt wordt. Creëer alleen de code die er straks voor zal zorgen dat de unit test slaagt; voeg geen extra code toe. Dit komt later, bij een volgende user story en unit test.
Stap 4: tijd om de unit test nogmaals te draaien
Nu de code geschreven is, zou de unit test moeten slagen. Gebeurt dat onverhoopt nog niet? In dat geval worden de ontwikkelaars opnieuw aan het werk gezet om de code te verbeteren en eventuele fouten te herstellen.
Stap 5: optimaliseer de uitgewerkte code
Bij het realiseren van maatwerk software gebruikt men soms meer code dan noodzakelijk is. Er kan sprake zijn van dubbele code, bijvoorbeeld om twee uitwerkingen van een component te kunnen testen. In deze laatste stap worden dergelijke stukken code verwijderd.
Voordelen van deze manier van ontwikkelen
Op deze wijze maatwerk software laten ontwikkelen biedt verschillende voordelen ten opzichte van een traditionele aanpak bij projecten. Het is een heel nauwkeurige vorm van het realiseren van maatwerk software, daar iedere component en functie uitgebreid getest en gedocumenteerd wordt. Nadien handmatig testen uitvoeren, waarbij je op voorhand niet weet of het testplan compleet is, wordt hiermee verleden tijd.
Nieuwe software die aansluit op de wensen van de eindgebruiker
Daarbij levert dit het voordeel op dat de gecreëerde software perfect aansluit op de wensen van de eindgebruiker. De unit tests zijn immers gebaseerd op de user stories die met de eindgebruiker zijn opgesteld vooraf. Bij het uitvoeren van deze tests, stap 3 uit het voorgaande stappenplan, kun je de uitkomsten van de tests laten accepteren door de eindgebruiker.
Afhankelijkheden zijn in beeld bij de software ontwikkeling
Het uitwerken van unit tests voor alle functionaliteiten van de op maat gemaakte software, zorgt ervoor dat afhankelijkheden tussen verschillende functies voortdurend in beeld zijn. Dit maakt de ontwikkeling van maatwerk software schaalbaar en verkleint de kans op een onnodige regressie bij het ontwikkelen ervan.
Regressie betekent dat wanneer een component of specifieke functie niet goed werkt, teruggegrepen wordt naar externe factoren binnen de code die hierop van invloed kunnen zijn. Het zoeken naar die factoren kan veel tijd in beslag nemen. Iets waarvan bij TDD geen sprake is; uit de bestaande unit tests leidt je af welke functionaliteiten afhankelijkheden hebben.
Ontwikkeling van een op maat gemaakt klantportaal
Een voorbeeld van een project waarbij we gekozen hebben voor TDD, is dat voor The Medical Export Group (MEG). Voor deze partij was het gebruik van standaard software uit de markt niet mogelijk, daar men afhankelijk is van een hoge mate van aanpasbaarheid en complexiteit. Een vraag kan vanaf de andere kant van de wereld komen, waarbij een levering met hoge spoed moet worden uitgevoerd.
Op basis van de wensen van MEG werd al snel gekozen voor de ontwikkeling van een maatwerk klantportaal. Door verschillende functionaliteiten aan dit klantportaal toe te voegen, hebben klanten de mogelijkheid om zelf medische kits samen te stellen, inzicht te krijgen in shelf life, bestellingen te volgen, enzovoorts. Een grote wens van zowel onze opdrachtgever, als diens afnemers.
Werken met praktische prototypes
Een belangrijke voorwaarde bij het ontwikkelen van deze maatwerk software was een hoge mate van gebruiksvriendelijkheid. Niet alleen voor de eindgebruiker, maar ook voor medewerkers van MEG. Om hierin zo goed mogelijk te kunnen voorzien is gekozen voor het werken met een prototype. Een ontwerp dat ontwikkeld is, nog zonder dat er een regel code geschreven is door de ontwikkelaars.
Voordeel hiervan was het snelle schakelen met de opdrachtgever en de mogelijkheid om ideeën te verifiëren, voordat de volgende stappen werden gezet in het project. Deze werkwijze, waarbij toevoegingen steeds geverifieerd werden aan de hand van het prototype, maakte dat het eindproduct naadloos aansluit bij de initiële verwachtingen van de opdrachtgever.
Gebruik van unit tests bij de ontwikkeling
Na een uitgebreid en valide onderzoek vooraf, werd gestart met de daadwerkelijke realisatie van de maatwerk software. Het grote belang van een werkend IT-landschap voor een partij als MEG maakt TDD tot de ideale methode voor de realisatie van een dergelijk klantportaal. Het helpt het omvallen van applicaties tegen te gaan bij de implementatie van nieuwe oplossingen.
Aan de slag met jouw software product
Ben je benieuwd wat de toepassing van TDD jouw organisatie oplevert bij de productie van maatwerk software? Wil je grove fouten in de code voorkomen door software voortdurend uitgebreid te testen bij het toevoegen van nieuwe functionaliteit? Op zoek naar een methode die applicaties schaalbaar maakt?
Ik vertel je graag meer over de mogelijkheden en voordelen van test-driven development. Laten we samen een kop koffie drinken om hier vrijblijvend over door te praten.