what is mutation testing
In deze zelfstudie wordt uitgelegd wat mutatietesten zijn, hoe u het uitvoert en typen mutatietesten met voorbeelden:
Wat is mutatietesten?
Mutatietesten is een op fouten gebaseerde testtechniek waarbij variaties van een softwareprogramma worden onderworpen aan de testdataset. Dit wordt gedaan om de effectiviteit van de testset te bepalen bij het isoleren van de afwijkingen.
Het klinkt een beetje ingewikkeld, nietwaar?
Wat je leert:
Mutatietesten
Mutatietesten (MT) gaan ver, terug naar de jaren 70, waar het voor het eerst werd voorgesteld als een schoolproject. Het werd afgeschreven omdat het zeer arbeidsintensief was. Naarmate mensen echter geavanceerdere computers bleven ontwikkelen, maakte het langzaam een comeback en is het nu een van de meest populaire testtechnieken.
Definitie van mutatietesten
MT is ook bekend als foutgebaseerd testen, programmamutatie, foutgebaseerd testen, of mutatie-analyse
Zoals de naam al doet vermoeden, is mutatietest een softwaretesttype dat is gebaseerd op veranderingen of mutaties. Er worden minuscule wijzigingen aangebracht in de broncode om te controleren of de gedefinieerde testgevallen fouten in de code kunnen detecteren.
Het ideale geval is dat geen van de testgevallen mag slagen. Als de test slaagt, betekent dit dat er een fout in de code zit. We zeggen dat de mutant (de gewijzigde versie van onze code) leefde. Als de test mislukt, zit er geen fout in de code en is de mutant gedood. Ons doel is om alle mutanten te doden.
Mutatietesten helpen ook om de kwaliteit van de gedefinieerde testcases of de testsuites te testen met een bod om effectievere testcases te schrijven. Hoe meer mutanten we kunnen doden, hoe hoger de kwaliteit van onze tests.
Mutatietestconcepten
Voordat we het testen van mutaties verder bespreken, willen we eerst enkele concepten onderzoeken die we zullen tegenkomen.
# 1) Mutanten: Het is gewoon de gemuteerde versie van de broncode. Het is de code die minieme wijzigingen bevat. Wanneer de testgegevens door de mutant worden geleid, zou dit ons idealiter andere resultaten moeten geven dan de originele broncode. Mutanten worden ook wel genoemd mutante programma's
Er zijn verschillende soorten mutanten. Dit zijn de volgende:
- Overleefde mutanten: Zoals we al zeiden, zijn dit de mutanten die nog in leven zijn na het uitvoeren van testgegevens door de originele en gemuteerde varianten van de broncode. Deze moeten worden gedood. Ze staan ook bekend als levende mutanten.
- Gedode mutanten: Dit zijn mutanten die worden gedood na mutatietesten. We krijgen deze als we verschillende resultaten krijgen van de originele en gemuteerde versies van de broncode.
- Equivalente mutanten: Deze zijn nauw verwant aan levende mutanten, in die zin dat ze ‘levend’ zijn, zelfs nadat ze testgegevens hebben doorlopen. Wat hen van anderen onderscheidt, is dat ze dezelfde betekenis hebben als de originele broncode, ook al hebben ze mogelijk een andere syntaxis.
# 2) Mutatoren / mutatie-operators: Dit zijn wat mutaties mogelijk maakt, ze zitten op de ‘bestuurdersstoel’. Ze definiëren in feite het soort wijziging of wijziging die moet worden aangebracht in de broncode om een gemuteerde versie te hebben. Ze kunnen worden aangeduid als fouten of mutatieregels
# 3) Mutatiescore: Dit is een score op basis van het aantal mutanten.
Het wordt berekend met behulp van de onderstaande formule:
Let daar op, equivalente mutanten worden niet in aanmerking genomen bij het berekenen van de mutatiescore. Mutatiescore is ook bekend als mutatie adequaatheid Ons doel zou moeten zijn om een hoge mutatiescore te behalen.
Hoe mutatietesten te doen
Stap 1: Laten we onze Jasmine-eenheidstest schrijven.
Test Suite (Jasmine)
Stap 2: Schrijf de originele code.
Originele code (Javascript)
Stap 3: We voeren de test vervolgens uit met de originele code om er zeker van te zijn dat we vanaf het begin geen mislukte tests hebben gehad. We zouden wat output moeten hebben die aangeeft dat we inderdaad een test hebben geschreven zonder fouten.
Bijvoorbeeld:
afgewerkt in 0.019s 1 specificatie, 0 mislukkingen, gerandomiseerd met zaad 31435
Het resultaat van de originele code:
Stap 4: Introduceer de mutant. In dit geval veranderen we de groter dan operator (moeder_leeftijd> dochter_leeftijd) naar een minder dan operator (moeder_leeftijd Mutantcode (Javascript) Stap # 5: Vervolgens voeren we de test uit via de mutantcode. Hier zijn de testresultaten: afgewerkt in 0.017s 1 specificatie, 0 mislukkingen, gerandomiseerd met zaad 89555 Het resultaat van de mutantcode: Stap # 6: Vergelijk de resultaten van de originele versie en de gemuteerde versie. In dit geval zijn ze verschillend, zelfs als dezelfde testsuite werd gebruikt. We hebben daarom onze mutant gedood. Onze testsuite is dus klaar om te gaan. Er zijn verschillende soorten mutaties. Deze worden hieronder toegelicht. Hier introduceren we een mutatie door de parameter en / of constante waarden te wijzigen, meestal met +/- 1. Voorbeeld: originele code (Javascript) Als de bovenstaande code bedoeld was om de even getallen waar te vermenigvuldigen ik<4 , dan zou waardemutatie betekenen dat de initialisatie wordt gewijzigd in laat ik = 1 Voorbeeld: mutantcode (Javascript) Hier verwijderen of dupliceren we een instructie in een codeblok. We kunnen instructies ook herschikken in een codeblok. In een if-else-blok kunnen we bijvoorbeeld het else-gedeelte of zelfs het hele if-else-blok verwijderen. Voorbeeld: originele code (Javascript) Voorbeeld: mutantcode (Javascript) Het doel is hier de code die beslissingen neemt, bijvoorbeeld, waarde vergelijkingen. We kunnen veranderen > naar< zoals in ons voorbeeld van het moeder-dochterprogramma. Andere operators die we kunnen wisselen, zijn onder meer: Voordelen van Mutation Testing (MT) zijn onder meer: Nadelen van mutatietesten (MT) zijn onder meer: Hulpmiddelen zijn handig om het proces van het genereren van mutanten te versnellen. Hier zijn enkele tools die we in MT kunnen gebruiken: Stryker, Jumble, PIT en Insure ++. Laten we van een voorbeeld leren Stel dat er een ziekenhuissite is waar nieuwe gebruikers zich kunnen registreren. Het leest de geboortedatum of leeftijd van de patiënt. Als het groter is dan 14, wijst een huisarts toe als hun hoofdarts. Om dit te doen, roept het de ‘huisarts’ functie op die de beschikbare arts vindt. Nu is er misschien nog andere functionaliteit. Misschien worden patiënten onder de 13 toegewezen aan een kinderarts, enzovoort. Maar we nemen alleen de zaak ouder dan 14 jaar. Dit is hoe de code eruit zou kunnen zien: 1) Lees Leeftijd Houd er rekening mee dat de bovenstaande coderegels niet specifiek zijn voor een programmeertaal en niet kunnen worden uitgevoerd. Het is slechts hypothetisch. Als tester, als mijn dataset 14, 15, 0, 13 is - enkele willekeurige getallen. Het doel is om te controleren of de dataset van de 4 waarden (14, 15, 0 en 3) voldoende is om alle mogelijke problemen met deze code te identificeren. Lees ook => Tips om testgegevens te ontwerpen voordat u uw testcases uitvoert Hoe bereikt Mutation Testing dit? Eerst en vooral creëer je mutantvariaties van het programma. Een mutant is niets anders dan een programma dat als deviatie is geschreven. Het bevat een zelfgezaaide fout. Voorbeelden zijn: Deze vervangingen worden ook wel genoemd ‘Mutatie-operators.’ Ik zal u voorbeelden laten zien: Mutant # 1: relationele operatorvervanging 1) Lees Leeftijd Mutant # 2: 1) Lees Leeftijd Mutant # 3: 1) Lees Leeftijd Mutant # 4: 1) Lees Leeftijd Mutant # 5: Statement Removal 1) Lees Leeftijd Mutant # 6: absolute waarde-invoeging 1) Lees Leeftijd Mutant # 7: onjuiste syntaxis 1) Lees Leeftijd Mutant # 8: doet hetzelfde als de originele test 1) Lees Leeftijd Eens zijn alle mutanten gemaakt. Ze worden onderworpen aan de testdataset. Onze set is 14, 15, 0 en 13. Welke van deze mutanten zal onze dataset vinden? Ontdek het in de onderstaande tabel: (Klik op afbeelding voor een vergrote weergave) Zoals je kunt zien, vindt onze datawaarde 14 fouten wanneer het tegen Mutant 2, 3 en 4 loopt. Of 14 doodt mutanten 2, 3 en 4. Maar het is niet effectief tegen, 1, 6 en 8. Als uw dataset alle mutanten doodt, is deze effectief. Neem anders meer of betere testgegevens op. Het is niet nodig dat elke waarde in de dataset alle mutanten doodt. Maar samen zouden ze alles moeten doden.Bijvoorbeeld:14 doodt 2, 3 en 4. 15 doodt 1, 2 en 4. Enzovoort. Hoe zit het met 5, 7 en 8? Mutant # 5 - is het programma-exemplaar dat zal mislukken, ongeacht de gegevenswaarde die u opgeeft. Dit komt omdat het niet zal programmeren voor zowel geldige als ongeldige waarden. Mutant # 7 zal een compileerfout zijn. Of in het geval van een scripttaal een fout die uitvoering verhindert. Mutant # 8 is hetzelfde als het hoofdprogramma. Zoals je kunt zien, zijn de bovenstaande mutanten helemaal niet bruikbaar. Daarom zijn te vermijden mutanten: Denk je, als het zoveel moeite kost, wat gaat er dan gebeuren als ik grote voorbeelden van code moet testen? Mutatietesten zijn gebaseerd op twee dingen: Zo, het concentreert zich op de kleinste code-eenheid en vertrouwt op de vaardigheid van de programmeur om mutatietesten op te schalen naar grotere programma's. Deze tutorial behandelde de definitie, typen en stappen van mutatietests om deze tests in detail uit te voeren met voorbeelden. We hopen dat je met plezier hebt gelezen en hebt geleerd over deze interessante testtechniek: mutatietesten. Over de auteur: Dit artikel is geschreven door STH-teamlid Swati S. Deel uw opmerkingen, vragen en gedachten hieronder. Mutatietesttypes
# 1) Waardemutatie
# 2) Mutatie van verklaringen
# 3) Beslissingsmutatie
Oorspronkelijke operator Mutant-operator 1 <= twee 3 4 en of 5
Mutatie testtools
Meer over mutatietesten
twee) Als de leeftijd> 14
3) Doctor = huisarts ()
4) Stop als
2) Als leeftijd met<’
3) Arts = huisarts ()
4) Einde als
2) Als leeftijd = 14 ‘De> wijzigen met =’
3) Arts = huisarts ()
4) Einde als
2) Als leeftijd> = 14 ‘Verander de> met> =’
3) Arts = huisarts ()
4) Einde als
2) Als leeftijd met<=’
3) Arts = huisarts ()
4) Einde als
2) Als leeftijd = 14
3) ‘verwijder de doktersopdrachtverklaring’
4) Einde als
2) Indien leeftijd> 14
3) Dokter = meneer X (absolute waarde invoegen - laten we zeggen dat X een kinderarts is)
4) Einde als
2) Als leeftijd %% 14 (onjuiste syntaxis)
3) Arts = huisarts ()
4) Einde als
2) Als leeftijd> 14 en leeftijd> 14 ‘hetzelfde betekent als leeftijd> 14’
3) Arts = huisarts ()
4) Einde als
Punten om op te merken
spionage-app voor iPhone en Android
Gevolgtrekking
Aanbevolen literatuur