Om te solliciteren op deze stage, moet je met je HvA-emailadres een account aanmaken.

account aanmaken

Bedrijfsinformatie

Info Support
Kruisboog 42
3905TG
Veenendaal
HR

Stryker Mutator voor Continuous Integration


De beste methode om mutation testing in Continuous Integration scenario’s te versnellen met behoud van kwaliteit. Dat is de uitdaging van deze opdracht. En je oplossing moet onafhankelijk van een specifiek mutation testing framework werken.

Vakmanschap is één van de kernwaarden van Info Support. We vinden goede codekwaliteit belangrijk. Hiervoor zorgen we dat onze code goed getest is. Dit doen o.a. door het schrijven en uitvoeren van unit tests. Maar hoe weet je nu of je unit tests effectief zijn?

Eén mogelijkheid is om de code coverage te meten. Met code coverage meet je welke code precies geraakt wordt door je tests. Helaas zegt code coverage niks over de effectiviteit van je unit tests. Het is perfect mogelijk om een test te schrijven die 100% van je code raakt, maar toch 0% van je code test. Dit is waarom wij liever mutation testing toepassen.

Een mutation testing framework maakt kleine wijzigingen in je productie code. Een `>` teken verandert bijvoorbeeld in een `>=` teken. Er ontstaat dan een mutant. Hierna voert het framework je tests uit. Als ten minste 1 test faalt, dan is de mutant killed. Slagen al je tests, dan is de mutant survived. Het percentage van killed mutants wordt de mutation score genoemd. Hoe hoger de mutation score, hoe effectiever je unit tests zijn. De mutation score zegt dus meer over de kwaliteit van je tests dan code coverage. Het is de enige manier om aan te tonen dat je tests effectief zijn.

Een nadeel van mutation testing is dat het lang kan duren. Doorgaans wordt voor iedere mutant (een deel van) je tests opnieuw uitgevoerd.  Afhankelijk van de grootte van je project kan het dus meerdere uren duren.

Stryker Mutator, of simpelweg ‘Stryker’, is een open source mutation testing framework waar Info Support de maintainer van is. Veel collega’s dragen hieraan bij, in vrije tijd en in Info Support tijd. Stryker bestaat uit 3 implementaties:

  • Stryker: Het mutation testing framework voor JavaScript en TypeScript
  • NET: Het mutation testing framework voor C#
  • Stryker4s: Het mutation testing framework voor Scala

Nadat Stryker klaar is wordt er een mutation score gerapporteerd. De verschillende frameworks stellen je ook in staat om het proces (en dus ook de build) te laten falen bij een té lage mutation score.

Voor meer informatie: zie https://stryker-mutator.io.

We maken bij Info Support graag gebruik van Continuous Integration (CI). Bij CI voer je de automatische tests en andere code checks uit bij iedere code wijziging op de master branch. Hierbij is het belangrijk dat de CI build niet te lang duurt. Graag zou je ook de effectiviteit van je tests willen valideren met mutation testing, maar door de lange duur is dit niet altijd mogelijk.

Bij het inzetten van Mutation Testing in een CI scenario zijn er wellicht mogelijkheden om het proces te versnellen. Bijvoorbeeld door enkel de bestanden die veranderd zijn (de “diff”) opnieuw te mutation testen. Hierdoor zou je veel sneller tot een resultaat kunnen komen.

De opdracht

Onderzoek wat de beste methode is om mutation testing in CI scenario’s te versnellen. Hierbij is het ook belangrijk dat er rekening wordt gehouden met de kwaliteit van het resultaat. Bij voorkeur is het uiteindelijke resultaat van een CI mutation test run niet anders dan wanneer je een volledige run had gedaan over alle code. De gekozen methode moet onafhankelijk van een specifiek mutation testing framework kunnen werken.

Bewijs dat je oplossing werkt door een Proof of Concept (PoC) te implementeren in een mutation testing framework naar keuze.

Ga voor deze en andere afstudeeropdrachten naar afstuderenbijinfosupport.com

Geschikt voor studenten
  • Software Engineering
  • Technische Informatica