Afstudeeropdracht in Software Development: Stryker.NET hot reload mutating and testing
Branche | Zie onder |
Dienstverband | Zie onder |
Uren | Zie onder |
Locatie | Veenendaal |
Salarisindicaties | 0-5.000 |
Opleidingsniveau | Zie onder |
Organisatie | Info Support |
Contactpersoon |
Info Support Nederland 0318552020 |
Informatie
Omschrijving
Functie eisen
Stryker is het mutation test framework voor .NET, JS/TS en de JVM. Bugs, of mutanten, worden automatisch gegenereerd in jouw source code. Vervolgens worden per mutatie alle unit tests uitgevoerd. Wanneer minimaal één test faalt, markeren we de mutatie als killed. Als de tests slagen, markeren we de mutatie als survived. Hoe meer killed mutaties, hoe effectiever jouw unit tests. Dit geeft een beter beeld dan code coverage omdat daadwerkelijk bewezen wordt dat de tests effectief zijn.
De huidige workflow in Stryker is als volgt:
- De gebruiker installeert Stryker en roept deze aan via command line
- Stryker plaatst mutaties in de sourcecode door ze in conditional statements te zetten
- Door het switchen van een globale variabele kunnen deze mutaties geactiveerd worden
- Stryker zoekt uit welke mutaties tegelijk gedraaid kunnen worden, oftewel welke mutaties geen conflicterende code paden hebben
- Stryker start per mutatie batch een test sessie op en zet bepaalde mutaties aan
- Stryker bekijkt de test resultaten om te bepalen of een mutatie killed of survived is.
Het veelvuldig compileren en testen van mutaties kost veel tijd. Om dit te beperken plaatst Stryker de mutaties met behulp van conditional statements in de sourcecode. Hierdoor is meestal maar één compilatie nodig, ongeacht het aantal mutaties. Het plaatsen van mutaties in conditional statements kan echter complex en foutgevoelig zijn.
Een alternatieve en in theorie veiligere methode is het plaatsen van mutaties één voor één. Het nadeel aan deze methode is dat elke aanpassing aan de broncode een nieuwe compilatie vereist.
Tijdens een recent overleg met Microsoft-ontwikkelaars kwam het onderwerp ‘hot reload' voorbij. Door middel van hot reload kan de C#-compiler ontdekken welke codepaden zijn aangepast en zal de compiler alleen de noodzakelijke delen hercompileren. Deze techniek is ook toepasbaar op unit tests waardoor we potentieel alle niet relevante unit tests uit de broncode kunnen verwijderen. We weten echter nog niet hoe we hot reload programmatisch aan kunnen roepen en in hoeverre dit de bestaande conditional statements techniek kan ondersteunen of vervangen.