Agile programmeren dankzij automatische tests.
Agile is meer dan een manier van werken, het is ook een manier van programmeren. Je wil dat de code snel en efficiënt aanpasbaar is. Een website groeit en evolueert namelijk doorheen de tijd. Zo kan geprogrammeerd worden zodat alles werkt, maar waarbij het moeilijk is om elementen achteraf aan te passen. Daarom lijkt het ons interessant om op een agile manier te programmeren. Wanneer we op zo’n manier te werk gaan, wordt een andere mindset bij de programmeur vereist. Code moet gestructureerd zijn, zodat er op een eenvoudige en flexibele manier elementen aangepast kunnen worden.
Stel je een fictieve ticketverkoop voor. Het begint heel eenvoudig, maar al snel neemt de complexiteit toe.
‘1 volwassen ticket kost €10 en 1 kinder ticket kost €6’
Wanneer we deze stelling programmeren, is het niet onbelangrijk om te gaan testen. Zo selecteren we 2 volwassenen en 1 kind. Hier berekenen we eerst wat het te verwachten resultaat zou moeten zijn en voeren we de nodige controles uit, zodat alles optimaal werkt.
Wat met promotie?
Maar wat als je als bedrijf af en toe promoties wenst toe te voegen? Het kan bijvoorbeeld zijn dat iemand 2 tickets voor volwassenen en 2 tickets voor kinderen aankoopt en dat dit slechts €30 kost in plaats van €32. Van zodra er rekening gehouden wordt met de stelling promotie, kan de bestaande code opnieuw aangepast en getest worden.
Kinderen zonder vergezeld te worden door ouders?
Het kan zijn dat kinderen vergezeld dienen te worden door minstens 1 volwassen persoon. Hier zal de code ook naar aangepast moeten worden.
Door rekening te moeten houden met diverse stellingen, is het belangrijk om voldoende te testen. En in het uitvoeren van deze testen kruipt veel tijd. Maar bedenk nu eens dat de code van je website veel meer bevat dan enkel een ticketverkoop? Een website hoeft niet altijd groot te zijn om veel coderegels te bevatten. Zo kan de code bij een standaard enterprise applicatie al snel oplopen tot 50.000 regels aan code. Als je bovendien weet dat je elke IF-statement minstens tweemaal moet testen, besef je pas dat je met manueel testen al snel enkele uren kan bezig zijn. Alsook kan je niet garanderen dat je website ‘bug-free’ zal zijn. Integendeel!
Om de kans op bugs te verkleinen en aldus over een website te beschikken die weldegelijk ‘bug-free’ is, kunnen automatische tests helpen. Dit zijn stukjes code die andere stukjes code gaan testen. Deze bevatten geen logica of lussen, maar valideren de waarden die je in functie gestoken hebt tegen de waarde die er uit komt.
Wanneer je met databases en externe API's begint te werken, wordt het allemaal iets complexer, maar de essentie blijft hetzelfde.
Om automatische tests te kunnen schrijven, is het belangrijk dat de code 'loosely coupled' is, zodat elk stukje code afzonderlijk verwerkt wordt en afzonderlijk van elkaar getest kan worden.
Verder zijn er nog andere elementen waar er bij het berekenen van de ticketprijs nog geen rekening mee is gehouden. Denk bijvoorbeeld aan de dienst na verkoop, het wegschrijven van het aantal verkochte tickets naar een databank en ga zo maar door. Deze voorbeelden hebben echter ook hun eigen tests. Het duurt vaak slechts enkele minuten om dergelijke tests uit te schrijven. Dat is een fractie van wat je uitspaart met het manueel controleren.
Bij elke aanpassing in de code kan je de volledige website of ander online platform volledig automatisch laten testen. Zo ben je zeker dat aanpassingen niets anders schijnbaar ongerelateerd hebben stuk gemaakt.
Het mooiste van allemaal aan zo'n automatische tests is dat het de programmeur verplicht om de code op te splitsen. Als de code moeilijk of zelfs helemaal niet te testen valt, dan is dat een teken dat het niet voldoende ‘loosely coupled’ geschreven is en dus ook niet agile genoeg is.