18 apr

Automated testing - Wat houdt het in?

Bij MaxServ draait alles om kwaliteit. Om deze kwaliteit te waarborgen hebben wij het testen hoog in het vaandel staan. Er gaat geen enkel stuk code “de deur uit” zonder dat dit door andere collega’s gecontroleerd is. Om dit naar een nog hoger niveau te tillen, doet MaxServ ook aan automated testing, maar wat is dit nu precies?

De term zegt het eigenlijk al: er worden automatische tests uitgevoerd. Nu zijn er verschillende soorten tests. Zo zijn er bijvoorbeeld tests op netheid en correctheid van sourcecode, de werking van de sourcecode, voldoen aan acceptatiecriteria, browser-compatibiliteit en performance. Al deze tests werden in het verleden bij MaxServ al handmatig uitgevoerd. Daarbij moesten er altijd 2 andere ontwikkelaars de code goedkeuren.  Met duidelijke procedures wordt er gezorgd dat de op te leveren website op al deze punten onderzocht wordt voordat het bij de klant terecht komt. Steeds meer tests zijn we gaan automatiseren en daar gaan we nog steeds verder mee.

Als een ontwikkelaar een nieuw stukje sourcecode schrijft en dit in ons versiebeheersysteem plaatst, wordt de code gecontroleerd op de netheid en correctheid van code. Voldoet de code niet aan de eisen, wordt dit teruggekoppeld aan de ontwikkelaar en kan de wijziging niet worden doorgezet naar het volgende stadium. Dit gebeurt al geruime tijd automatisch en zorgt er voor dat het gros van de fouten die je in websites ziet al wordt gedetecteerd in een zeer vroeg stadium. Deze controle zorgt vooral voor een goede leesbaarheid van de code zodat dit niet door slechts één ontwikkelaar te beheren is. Deze controles noemen ze linting. 

Testen van de werking van de source code

Sinds dit jaar zijn we ook gestart met het automatisch testen van de werking van de sourcecode. Een ontwikkelaar schrijft naast de daadwerkelijke code ook een aantal tests voor de code. Dit is onder verdeeld in 2 verschillende soorten tests: unit-test en functionele-tests. De unit-test is bedoeld om een klein stukje van de code (unit) te testen. Dit is vaak een enkele methode. Er wordt gekeken of met verschillende vormen van input het verwachte resultaat gehaald wordt. Hierbij is het belangrijk dat iedere invloed van “buitenaf” wordt vermeden. Alle informatie die uit een ander stuk code komt als de methode die getest wordt, wordt beïnvloed door de test zelf. Zo wordt gezorgd dat uitsluitend de betreffende methode getest wordt.

Bij functionele tests is het ook de bedoeling om te controleren of de uitkomst van de functie die wordt aangeroepen gelijk is aan hetgeen de ontwikkelaar verwacht dat de uitkomst zal zijn. Bij functionele tests is het echter juist wel de bedoeling dat de functies samenwerken zodat getest wordt of deze functies ook daadwerkelijk goed samen werken.

Deze unit- en functionele-tests kunnen door een ontwikkelaar op zijn eigen werkstation worden uitgevoerd, maar worden ook automatisch uitgevoerd zodra een ontwikkelaar zijn code aanbiedt aan het versiebeheersysteem. Ook hierbij geldt dat als de tests niet slagen, de taak niet doorgezet kan worden naar het volgende stadium.

Acceptatie-tests

Het derde onderdeel wat automatisch getest kan worden is een combinatie van het testen op acceptatiecriteria en de browser-compatibiliteit. Deze tests worden acceptatie-tests genoemd. Er kan een script geschreven worden die automatisch in een browser wordt uitgevoerd. Zo’n script kan bijvoorbeeld de opdracht geven om naar pagina x te surfen en vervolgens op knop y te klikken. Vervolgens kan het script controleren of hetgeen gebeurd wat de ontwikkelaar verwacht dat er gaat gebeuren. Een voorbeeld: er staat een formulier op de website en je wilt zeker weten dat als de bezoeker zijn e-mailadres vergeet in te vullen dat het formulier niet verzonden mag worden. In dat geval kan er een script geschreven worden die naar de betreffende pagina gaat, het veld e-mailadres niet invult en vervolgens op de verstuur knop klikt. Het script zal vervolgens controleren of het formulier niet verzonden wordt en of er op de verwachte plaats een foutmelding naar voren komt. Dit is een heel simpel voorbeeld, maar je kunt je voorstellen dat dit soort tests eenvoudig uit te breiden zijn naar grotere tests. Deze tests worden automatisch uitgevoerd zodra een ontwikkelaar zijn sourcecode opslaat in het versiebeheersysteem, maar ook na iedere release van de website. Wordt er een nieuwe versie van de website uitgerold op een van de omgevingen, dan worden deze tests direct uitgevoerd om te controleren of de website nog helemaal naar behoren werkt. Zo kunnen wij met een gerust gevoel een nieuwe versie van een website uitrollen. 

Naast bovenstaande tests voeren wij ook nog tests uit op performance, beveiligingsproblemen en “MaxServ-kwaliteit”. Deze tests zijn een combinatie van automatisch en handmatig en worden altijd uitgevoerd bij iedere release.

We hebben vandaag een inkijkje gegeven in wat automated testing is en hoe wij dit toepassen in ons dagelijks werkproces. Dit blog-bericht is onderdeel van een serie over automated testing. In het volgende bericht leggen wij uit waarom je deze tests in mijn ogen automatisch moet uitvoeren. Wil je op de hoogte blijven van onze blogs? Volg ons dan op Twitter of houdt onze website in de gaten.

Geschreven door:

  • Richard Haeser

    Development Lead / Certified TYPO3 specialist