Mutatietesten
Mutatietesten is een soort softwaretest waarbij bepaalde uitspraken van de broncode worden gewijzigd / gemuteerd om te controleren of de testgevallen fouten in de broncode kunnen vinden. Het doel van Mutation Testing is het waarborgen van de kwaliteit van testcases in termen van robuustheid, zodat deze niet voldoet aan de gemuteerde broncode.
De wijzigingen die in het mutantenprogramma worden aangebracht, moeten uiterst klein worden gehouden, zodat dit de algemene doelstelling van het programma niet beïnvloedt. Mutatietesten wordt ook wel foutgebaseerde teststrategie genoemd, omdat het gaat om het creëren van een fout in het programma en het is een soort White Box Testing die voornamelijk wordt gebruikt voor Unit Testing.
Mutatie werd oorspronkelijk voorgesteld in 1971, maar verloor ijver vanwege de hoge kosten die ermee gemoeid waren. Nu heeft het weer stoom gekozen en wordt het veel gebruikt voor talen zoals Java en XML.
In deze tutorial leer je-
- Wat is mutatietesten?
- Hoe voer ik een mutatietest uit?
- Hoe mutantprogramma's te maken?
- Wat moet u veranderen in een mutantprogramma?
- Soorten mutatietesten
- Mutatiescore:
- Voordelen van mutatietesten:
- Nadelen van mutatietesten:
Hoe voer ik een mutatietest uit?
Hieronder volgen de stappen om mutatietesten uit te voeren (mutatieanalyse):
Stap 1 : Fouten worden in de broncode van het programma geïntroduceerd door veel versies te maken die mutanten worden genoemd. Elke mutant zou een enkele fout moeten bevatten en het doel is om ervoor te zorgen dat de mutantversie mislukt, wat de effectiviteit van de testgevallen aantoont.
Stap 2 : Testgevallen worden toegepast op het oorspronkelijke programma en ook op het mutantenprogramma. Een testcase moet voldoende zijn en wordt aangepast om fouten in een programma te detecteren.
Stap 3 : Vergelijk de resultaten van een origineel en een gemuteerd programma.
Stap 4 : Als het originele programma en de mutantprogramma's de verschillende uitvoer genereren, wordt die mutant gedood door de testcase. Daarom is de testcase goed genoeg om de verandering tussen het originele en het mutante programma te detecteren.
Stap 5 : Als het originele programma en het mutante programma dezelfde output genereren, wordt Mutant in leven gehouden. In dergelijke gevallen moeten effectievere testcases worden gemaakt die alle mutanten doden.
Hoe mutantprogramma's te maken?
Een mutatie is niets anders dan een enkele syntactische wijziging die wordt aangebracht in de programma-instructie. Elk mutantprogramma moet door één mutatie verschillen van het oorspronkelijke programma.
Origineel programma | Mutant-programma |
---|---|
If (x> y) "Hallo" anders afdrukken "Hallo" afdrukken | If ( x anders afdrukken "Hallo" afdrukken |
Wat moet u veranderen in een mutantprogramma?
Er zijn verschillende technieken die kunnen worden gebruikt om mutante programma's te genereren. Laten we ze eens bekijken
Operand vervangende operators | Operatoren voor expressiemodificatie | Verklaring wijziging Operators |
---|---|---|
Vervang de operand door een andere operand (x door y of y door x) of door de constante waarde. | Vervang een operator of het invoegen van nieuwe operators in een programma-instructie. | Programmatische instructies worden gewijzigd om mutante programma's te maken. |
Voorbeeld - Als (x> y) x- en y-waarden vervangen If (5> y) x vervangen door constante 5 | Voorbeeld - If (x == y) We kunnen == in> = vervangen en een mutant programma hebben als If (x> = y) en ++ invoegen in de instructie If (x == ++ y) | Voorbeeld - Verwijder het else-gedeelte in een if-else-instructie Verwijder de volledige if-else-instructie om te controleren hoe een programma zich gedraagt Enkele van de voorbeeldmutatieoperatoren:
|
Automatisering van mutatietesten:
Mutatietesten zijn extreem tijdrovend en ingewikkeld om handmatig uit te voeren. Om het proces te versnellen is het aan te raden om voor automatiseringstools te gaan. Automatiseringstools verlagen ook de testkosten.
Lijst met beschikbare tools -
- Stryker
- PIT-testen
Soorten mutatietesten
In Software Engineering kunnen mutatietesten fundamenteel worden onderverdeeld in 3 typen: mutatie van verklaringen, mutatie van beslissingen en waardemutaties.
- Statement Mutation - ontwikkelaar knipt en plakt een deel van een code waarvan het resultaat mogelijk een verwijdering van enkele regels is
- Waardemutatie - waarden van primaire parameters worden gewijzigd
- Beslissingsmutatie - controleverklaringen moeten worden gewijzigd
Mutatiescore:
De mutatiescore wordt gedefinieerd als het percentage gedode mutanten met het totale aantal mutanten.
- Mutatiescore = (gedode mutanten / totaal aantal mutanten) * 100
Testgevallen zijn voldoende mutatie als de score 100% is. Experimentele resultaten hebben aangetoond dat mutatietesten een effectieve benadering zijn om de geschiktheid van de testgevallen te meten. Maar het belangrijkste nadeel is de hoge kosten voor het genereren van de mutanten en het uitvoeren van elke testcase tegen dat mutante programma.
Voordelen van mutatietesten:
Hieronder volgen de voordelen van mutatietesten:
- Het is een krachtige benadering om een hoge dekking van het bronprogramma te bereiken.
- Dit testen is in staat het mutante programma uitgebreid te testen.
- Mutatietesten bieden de softwareontwikkelaar een goed niveau van foutdetectie.
- Deze methode legt onduidelijkheden in de broncode bloot en heeft de capaciteit om alle fouten in het programma te detecteren.
- Klanten profiteren van deze tests door een zeer betrouwbaar en stabiel systeem te krijgen.
Nadelen van mutatietesten:
Aan de andere kant zijn de volgende nadelen van het testen van mutanten:
- Mutatietesten zijn buitengewoon kostbaar en tijdrovend, aangezien er veel mutantprogramma's moeten worden gegenereerd.
- Omdat het tijdrovend is, is het redelijk om te zeggen dat deze tests niet kunnen worden uitgevoerd zonder een automatiseringstool.
- Elke mutatie heeft hetzelfde aantal testgevallen als dat van het oorspronkelijke programma. Het is dus mogelijk dat een groot aantal mutante programma's moet worden getest met de originele testsuite.
- Aangezien deze methode wijzigingen in de broncode met zich meebrengt, is deze methode helemaal niet van toepassing op Black Box Testing.
Gevolgtrekking:
Wilt u uw applicatie grondig testen? Het antwoord is mutatietesten. Het is de meest uitgebreide techniek om een programma te testen. Dit is de methode die controleert op de effectiviteit en nauwkeurigheid van een testprogramma om de fouten of fouten in het systeem te detecteren.