20 oktober 2014
Een half jaar geleden grapte ik dat we maar een feestje moesten vieren als de duizendste unittest een feit zou zijn. Een collega herinnerde me hier fijntjes aan toen het zover was. Ons team heeft duizend tests geschreven in nog geen half jaar tijd. Een prestatie van formaat. Een feestje was wat overdreven, maar we hebben het wel even gevierd.
Test Driven Development is een term die pas een jaar geleden bij Gamebasics werd geïntroduceerd. Om eerlijk te zijn was ik sceptisch of het van toegevoegde waarde zou zijn. In theorie is het prachtig. Maar zou het in de praktijk niet teveel tijd kosten? Zou de tijd die nodig was om unit tests te schrijven niet beter gebruikt kunnen worden? Na bijna een jaar TDD gewerkt te hebben kan ik daarop ondubbelzinnig het antwoord geven. Ja, het is nuttig bestede tijd.
In de donkere dagen voordat TDD in ons leven kwam, was elke livegang van de website een beproeving. Elke keer was er wel wat mis. We kregen naarmate de tijd vorderde steeds meer last van bugs in ons systeem. Bij elke die we oplosten, leken er twee nieuwe te ontstaan. Het was tijd voor iets nieuws.
Twee specialisten van TNO kwamen langs om ons te adviseren. Zij wonden er geen doekjes om: geautomatiseerd testen was een must. Daar zijn we voortvarend aan begonnen. Na een periode van trial and error, een TDD-training (ook testjes moet je leren maken) en het inrichten van de testomgevingen, zijn we nu zover dat we tests schrijven bij elk nieuw stukje code dat toegevoegd wordt aan het project.
De unit tests zijn op veel momenten handig. In de eerste plaats bij het ontwikkelen zelf. Om de tests goed te laten werken, moet je nadenken over de structuur van je code. Geen magische ‘void’ functies meer. Alle paden, zowel de positieve als de negatieve, moeten uitgedacht worden. De werking van de functies waaraan je schrijft, kun je bovendien snel uitproberen via een unittest, zonder dat je de rest van de applicatie hoeft te starten. Nadat de code in productie is genomen, blijven de tests handig. Ze bewijzen dat de gebouwde functies werken. Mocht er iets aan veranderen en er faalt een test, dan kunnen we in actie komen voordat een gebruiker er last van heeft!
Hoewel 1000 unittests misschien veel lijkt, is maar een heel klein deel van onze applicatie ervan voorzien. Aangezien we nu de smaak goed te pakken hebben, verwacht ik dat de volgende duizend een stuk sneller zullen gaan. Met unittests alleen zijn we er bovendien nog niet. User Interface tests (UI tests) zijn eveneens van cruciaal belang.