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.

Benodigde interesse(s)

  • Continuous Integration
  • Open Source
  • Automated testing

Wat krijg je

  • Een uitdagende afstudeeropdracht
  • € 1000 vergoeding, € 500 + leaseauto of € 600 + woonruimte
  • Professionele begeleiding
  • Trainingen gericht op jouw afstudeertraject
  • Sparren met andere afstudeerders en collega’s
  • Twee vakantiedagen per maand

Wat je gaat doen

  • 35% Afstudeeronderzoek
  • 40% Analyseren, ontwerpen, realiseren
  • 25% Documentatie

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.

Over Stryker

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.

Meld je aan voor deze opdracht

  • Geaccepteerde bestandstypen: docx, doc, txt, pdf.
  • Geaccepteerde bestandstypen: docx, doc, txt, pdf.

Sollicitatieprocedure

  1. 1
  2. Kennismakingsgesprek

    Bespreek (studie) loopbaan, interesses en ambities en introductie Info Support.

  1. 2
  2. Beoordelingen

    Assessment van professionele kennis en persoonlijkheid (capaciteit, competenties en motieven).

  1. 3
  2. Selectie interview

    Professionele kennis en persoonlijkheid verdiepen.

  1. 4
  2. De ondertekening van een contract

    Contractaanbieding en uitnodiging voor tekenmomenten.