NHG – Workshop UnitTesten

De vraag

Unittesten zijn een belangrijke basis voor de kwaliteit van je product. Vanuit Nationale Hypotheek Garantie (NHG) kwam de vraag of newspark kon helpen met een uitleg en introductie van de UnitTesting module van Mendix. Binnen NHG wordt al veel gedaan op gebied van (geautomatiseerd) testen en er werd gezocht naar manieren om de kwaliteit naar een nog hoger plan te tillen. Een van de Mendix ontwikkelaars van het team had al wat ervaring opgedaan met de UnitTesting module, en zo kwam het idee om dit onderwerp centraal met het team te bespreken en proberen.

Met zijn combinatie van testautomatiserings- en Mendix kennis is Wessel de aangewezen persoon om dit onderwerp op te pakken. Hij heeft een workshop opgezet waar verschillende onderwerpen aan bod zouden komen, maar met een grote nadruk op het zelf aan de slag gaan. Want door te doen, leren we!

De theorie

De workshop is hybride opgezet, wat betekent dat een deel van de NHG-deelnemers op kantoor aanwezig is, en een deel online. Het publiek bestaat uit een mengelmoes van testers, developers, een Product Owner, een Scrummaster en een analist. Na een korte introductie van ieders rol steekt Wessel van wal met de volgende vragen: “Waarom willen wij testen, en wie is verantwoordelijk voor de kwaliteit van jullie applicatie?”. Het is fijn om direct te merken dat iedereen wat dit betreft wel op een lijn zit binnen het NHG team; testen doen we om inzicht te krijgen in de kwaliteit van de applicatie, en kwaliteit is iets waar het hele team verantwoordelijk voor is.

Hierop volgt een praktijkvoorbeeld in verband met testlagen. Stel, je test de login functionaliteit van een website vanaf de front-end. Je krijgt vervolgens een foutmelding als “Er is iets misgegaan”. Wellicht dat deze front-end test binnen 5 milliseconden draait, dat klinkt als een heel snelle en waardevolle test. Maar wat is er nou precies misgegaan? Het kan liggen aan een onbekend mailadres, een incorrect wachtwoord, een fout in de configuratie van permissies… En het kan uren duren voordat we dit issue hebben gevonden, als we alleen op die gefaalde front-end test af gaan!

Daarom is het belangrijk om je bewust te zijn van verschillende lagen (waaronder unit, integatie en UI) en te weten wat je waar moet testen. Als een integratietest al aangeeft dat de service een incorrecte response teruggeeft, weet je eigenlijk al dat je op de front-end ook een fout kunt verwachten. Maar door de integratietesten goed op te stellen kom je veel sneller bij je root cause. Als je daaronder nog een robuuste laag met unittesten hebt staan die bij elke wijziging worden getriggerd, dan heb je ook een heel goede basis voor een kwalitatief hoogwaardige applicatie.

Demonstratie

Nadat we het allemaal eens zijn over het nut van unittests, geeft Wessel een demonstratie van de UnitTesting module binnen Mendix en geeft hij tips en tricks die hij uit zijn eigen ervaring wil delen. Zo kun je bijvoorbeeld ReportSteps aan je unittesten toevoegen zodat je bij een foutmelding duidelijk kan aangeven wat er fout ging. Dit werkt ook met errorhandling. Wat de deelnemers gelijk doorhebben is dat je door het maken van unittests ook anders naar je applicatie gaat kijken. Het kan namelijk zijn dat je je microflows in meerdere (herbruikbare) subflows gaat omzetten omdat je de subflows dan gemakkelijker geïsoleerd kan unittesten. Dit is een keuze die je als team zou kunnen maken, maar belangrijk is dat je erover nadenkt en bewust een keuze maakt.

Aan de slag!

Nu we het nut weten van de verschillende lagen van de applicatie en een demo hebben gehad van de Mendix module, nemen we een korte koffiepauze. Hierna gaan we door met het praktijkgedeelte: zelf aan de slag met de UnitTesting module van Mendix. De deelnemers starten in kleine groepjes, en beslissen per groepje eerst welk stuk logica we willen unittesten in de applicatie. Hierbij moet de te testen logica voldoen aan een aantal eisen:

– Het moet een zo klein mogelijk component zijn
– Het moet geisoleerd en onafhankelijk zijn
– De output moet te voorspellen zijn aan de hand van de input

Nadat de keuze is gevallen op een aantal te testen stukken logica, gaan we aan de slag. De deelnemers krijgen instructies om de benodigde modules in Mendix te installeren en configureren, en de tip om dit in een separate branch te doen om ander werk niet in de weg te zitten. Zodra iedereen het UnitTesting overzichtsscherm ziet mogen ze bezig met het maken van hun eigen unittest. Ze krijgen hier een halfuur voor, waarna we de unittesten die gemaakt zijn met elkaar bespreken om van elkaar te leren.

unittesten

Discussie

Wat opvalt is dat er tijdens het bouwen van de unittests interessante discussies op gang komen. Zo is er een team dat twijfelt over het testen van een hoofdflow, of de 3 daar onder liggende subflows. Schijnbaar zijn er per subflow 3 mogelijke uitkomsten. Dat betekent dat wanneer je de hoofdflow test, je rekening moet houden met 3^3=27 testgevallen. Als je bij alledrie de subflows 3 mogelijkheden unittest, dan heb je 3*3=9 testgevallen en dan dek je iedere subflow volledig. Dit betekent dat het goed kan zijn om in dit geval te kiezen voor het unittesten van je subflows.

Show & Tell

Na een halfuur laat ieder groepje zijn unittest zien en geven we hier feedback op. Ieder groepje krijgt een aantal tips & tops mee, zoals het gebruik maken van de ReportStep subflow om de stappen in de test te benoemen. Daarnaast blijft het belangrijk om in een korte annotatie te beschrijven wat je test en waarom, zodat iemand die de test bekijkt weet wat de test inhoudt in het geval dat de test in de toekomst faalt.

Terugblik

Al met al was het een heel leuke, interactieve middag met mensen die geinteresseerd en enthousiast waren over het onderwerp. We hebben leuke, interessante discussies gehad en er werden goede kritische vragen gesteld over het onderwerp en de tooling. Wij hopen dat NHG meer inzicht heeft gekregen in wat unittesten voor de Mendix applicaties kan betekenen, en dat zij hier hun voordeel mee kunnen doen. Belangrijkste punt blijft hier dat er kennis is zodat er een bewuste keuze kan worden gemaakt met betrekking tot dit onderwerp. Er is geen goed of fout, zolang het onderbouwd is met een strategie in het achterhoofd. Mensen van NHG, hartelijk dank voor de inzet en interesse, en in het vertrouwen in Newspark om jullie op dit vlak nog wijzer te maken!

Over Wessel
Wessel is een enthousiaste professional met een passie voor software en kwaliteit. Hij is breed geinteresseerd en past zich daardoor snel aan aan nieuwe omgevingen en nieuwe materie. Zijn doel is om waarde toe te voegen aan ieder project, zowel op persoonlijk als professioneel vlak. Meer weten over (het nut van) unittesten binnen je Mendix applicatie? Stuur Wessel dan gerust een bericht op wb@newspark.nl.