Test Driven Development (TDD)

Bij softwareontwikkeling is Test Driven development (TDD) tegenwoordig een veel gebruikte methode. TDD is een methode waarbij, in kleine incrementele stappen, unit tests worden gemaakt, en in dezelfde kleine incrementele stappen wordt de code gemaakt om aan die tests te voldoen.

Dit is het tegenovergestelde van een traditionele aanpak van softwareontwikkeling waarbij eerst de code wordt gemaakt en er vervolgens wordt getest.

In dit artikel wordt ingegaan op:

  • fundamentele componenten van TDD
  • basis stappen die worden gehanteerd
  • voor- en nadelen.

Wat is TDD?

De kern van TDD draait om vijf eenvoudige stappen, die tijdens de hele levenscyclus van de softwareontwikkeling herhaald worden. Het doel van deze stappen (en van TDD in het algemeen) is ervoor te zorgen dat de code eenvoudig en efficiënt is en tegelijkertijd aan alle functionele eisen voldoet.

De volgende stappen worden steeds opnieuw uitgevoerd door de ontwikkelaar:

  • schrijf een unit test die een aspect van het programma test
  • voer de test uit, deze moet mislukken omdat in het programma de functionaliteit nog ontbreekt
  • schrijf “net genoeg” code, zo eenvoudig mogelijk, om de test te laten slagen
  • voer de unit test opnieuw uit
  • als de test slaagt, ga dan verder met de volgende test, en anders herschrijf / wijzig de code om de test te laten slagen

Onderstaande flowchart is een visualisatie van deze 5 stappen:

Test driven development flowchart

Uitleg van de 5 stappen:

  1. Schrijf een unit test
    Bij TDD begint de ontwikkeling van elke nieuwe functie met het schrijven van een unit test. Deze unit test kan niet anders dan mislukken omdat deze is geschreven voordat de code voor de betreffende functie is geschreven. Wanneer de unit test onverhoopt toch slaagt, dan is of de gewenste functionaliteit al gebouwd of is de unit test niet goed.
  2. Voer unit test uit
    Het uitvoeren van de nieuwe unit test moet aantonen dat de test niet per ongeluk slaagt zonder dat er nieuwe code is geschreven. Kortom, de test moet falen.
  3. Schrijf code
    De volgende stap is het schrijven van een stukje code die ervoor zorgt dat de unit test slaagt. De nieuwe code hoeft in dit stadium nog niet perfect te zijn en kan de unit test bijvoorbeeld op een onelegante manier laten slagen. Dat is opzich geen probleem om dat in een latere stap de code kan worden verbeterd.
    Belangrijk uitgangspunt is, dat de geschreven code alleen is gemaakt om de unit test te laten slagen. Niet meer en niet minder.
  4. Voer unit test opnieuw uit
    Voer de unit test opnieuw uit en controleer of de unit test slaagt. Wanneer dat het geval is kan doorgegaan worden met de volgende stap, anders dient de code te worden aangepast om er voor te zorgen dat de unit test alsnog slaagt.
  5. Refactor
    Indien nodig kan de code nu worden opgeschoond. Hierbij speelt het verwijderen van dubbele code een essentiële rol. Na het opschonen worden alle beschikbare unit test opnieuw uitgevoerd om te controleren dat er door het schonen geen regressie is ontstaan.

Voordelen van TDD

  • Het kan leiden tot eenvoudige en modulaire code. Dit bevordert de onderhoudbaarheid van de code.
  • Het kan ontwikkelaars helpen om fouten eerder te vinden dan anders zou gebeuren. En zoals Boehm al in 1979 heeft aangetoond: hoe eerder fouten worden gevonden des te goedkoper het oplossen is.
  • De unit testen kunnen dienen als een soort documentatie waardoor de code makkelijk te begrijpen is.
  • Op de lange termijn kan het de ontwikkeltijd versnellen.
  • Het helpt ontwikkelaars om gefocused te blijven op het bieden van de eenvoudigste oplossingen voor een probleem.

Nadelen van TDD

  • TDD vergt in het begin van een project veel tijd en moeite waardoor het kan lijken dat de ontwikkeling langzamer gaat dan anders.
  • Het is moeilijk om goede unit test te schrijven die de essentie afdekt.
  • Wanneer de functionaliteit wijzigt dan moeten de unit tests ook worden aangepast. Dit kan leiden tot veel meer inspanning als er veel functionele wijzigingen zijn.

A

Ook interessant?

Test first - X-driven development

Test first – Introductie tot X-driven development

TDD, BDD en ATDD zijn termen die regelmatig terugkomen in een Agile omgeving. Ze zijn de afgelopen jaren steeds populairder ...
Behavior Driven Development

Behaviour Driven Development (BDD)

Regelmatig lees of hoor je dat IT-projecten falen, een langere doorlooptijd nodig hebben dan oorspronkelijk gepland en veel meer kosten ...
Testautomatisering Piramide (2)

Testautomatisering Piramide

Het effectief inzetten van geautomatiseerd testen vraagt om een weloverwogen strategie. Een van de grootste fouten die organisaties kunnen maken ...
Hybride Testautomatisering Framework

Testautomatisering Framework (TAF)

Voordat wordt ingegaan op wat een Testautomatisering Framework is, worden eerst de verschillende componenten die betrokken zijn bij testautomatisering op ...
Blijf op de hoogte van onze nieuwste ontwikkelingen, schrijf je hier in voor de nieuwsbrief!