Reguliere expressies muteren met Stryker Mutator

Veel programmeertalen kennen zogenaamde ‘reguliere expressies’. Deze worden gebruikt om vrije tekst input te valideren of om informatie te ontlenen uit vrije tekst. Tijdens deze afstudeeropdracht onderzoek je wat goede mutaties zijn die we kunnen toepassen op reguliere expressies binnen een mutation testing framework. Zo draag jij bij aan effectief testen van code en het verbeteren van codekwaliteit.

Neem contact op met

Meer informatie

Info Support is de maintainer van Stryker Mutator, of simpelweg ‘Stryker’. Stryker maakt kleine wijzigingen in je productiecode. 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.

In de inleiding spraken we al over ‘reguliere expressies’. Het volgende stukje JavaScript als voorbeeld van een postcodevalidatie:
/* 1 */ function validatePostcode(postcode) {
/* 2 */     const postcodeRegex = /(\d{4}) ?([A-Z]{2})/;
/* 3 */     console.log(`”${postcode}” is ${postcode.match(postcodeRegex) ? ‘een’ : ‘geen’} postcode`);
/* 4 */ }
/* 5 */
/* 6 */ validatePostcode(‘1234 AB’);
/* 7 */ validatePostcode(‘1234AB’);
/* 8 */ validatePostcode(‘1234’);

De output van dit programma is:

“1234 AB” is een postcode, “1234AB” is een postcode, “1234” is geen postcode.

Op regel 2 wordt een reguliere expressie gedefinieerd. Als een mutation testing framework deze code muteert, wordt er geen mutant aangemaakt voor de reguliere expressie zelf. Toch zijn er wel degelijk goede mutaties te bedenken. Enkele voorbeelden:

/* 2a */ /(\d{4})([A-Z]{2})/;

/* 2b */ /(\d{4}) ([A-Z]{2})/;

Om mutant 2a te killen moet er een test zijn voor een postcode met een spatie. Om mutant 2b te killen moet er een test zijn voor een postcode zonder spatie.

De opdracht

Tijdens je afstudeeropdracht onderzoek je wat goede mutaties zijn die we kunnen toepassen op reguliere expressies. Dit onderzoek moet onafhankelijk zijn van een specifieke taal of implementatie. Je implementeert vervolgens de reguliere expressie mutaties in één van de Stryker frameworks (Stryker, Stryker.NET of Stryker4s).

Benodigde technieken en/of kennis

  • Testen
  • Stryker
  • Mutation testing
afbeelding Organiseer het!

Organiseer het!

afbeelding Start je carrière

Start je carrière

afbeelding Get Smarter Magazine

Get Smarter Magazine

afbeelding Info Support Open Source

Info Support Open Source