what is mutation testing
Denne opplæringen forklarer hva som er mutasjonstesting, hvordan du utfører det og mutasjonstestingstyper med eksempler:
Hva er mutasjonstesting?
Mutasjonstesting er en feilbasert testteknikk der variasjoner av et programvare blir utsatt for testdatasettet. Dette gjøres for å bestemme effektiviteten av testsettet for å isolere avvikene.
Det høres litt komplisert ut, ikke sant?
Hva du vil lære:
Mutasjonstesting
Mutation Testing (MT) går langt, tilbake til 70-tallet hvor det først ble foreslått som et skoleprosjekt. Det ble avskrevet, da det var veldig ressurskrevende. Men mens mennesker fortsatte å utvikle mer avanserte datamaskiner, kom det sakte tilbake og er nå en av de mest populære testteknikkene.
Definisjon av mutasjonstesting
MT er også kjent som feilbasert testing, programmutasjon, feilbasert testing, eller mutasjonsanalyse .
Som navnet antyder, er mutasjonstesting en programvaretestingstype som er basert på endringer eller mutasjoner. Miniscule endringer blir introdusert i kildekoden for å sjekke om de definerte testtilfellene kan oppdage feil i koden.
Den ideelle saken er at ingen av testsakene skal bestå. Hvis testen består, betyr det at det er en feil i koden. Vi sier at mutanten (den modifiserte versjonen av koden vår) levde. Hvis testen mislykkes, er det ingen feil i koden, og mutanten ble drept. Målet vårt er å drepe alle mutanter.
Mutasjonstesting hjelper også til å teste kvaliteten på de definerte test tilfellene eller test suitene med et forsøk på å skrive mer effektive test tilfeller. Jo flere mutanter vi kan drepe, jo høyere er kvaliteten på testene våre.
Begreper for mutasjonstesting
Før vi diskuterer mutasjonstesting videre, la oss utforske noen konsepter som vi vil komme over.
# 1) Mutanter: Det er ganske enkelt den muterte versjonen av kildekoden. Det er koden som inneholder små endringer. Når testdataene kjøres gjennom mutanten, bør de ideelt sett gi oss forskjellige resultater fra den opprinnelige kildekoden. Mutanter kalles også mutantprogrammer .
Det finnes forskjellige typer mutanter. Disse er som følger:
- Overlevde mutanter: Som vi har nevnt, er dette mutantene som fremdeles lever etter å ha kjørt testdata gjennom de originale og muterte variantene av kildekoden. Disse må drepes. De er også kjent som levende mutanter.
- Drepte mutanter: Dette er mutanter som blir drept etter mutasjonstesting. Vi får disse når vi får forskjellige resultater fra de opprinnelige og muterte versjonene av kildekoden.
- Tilsvarende mutanter: Disse er nært knyttet til levende mutanter, i og med at de er 'levende' selv etter å ha kjørt testdata gjennom dem. Det som skiller dem fra andre er at de har samme betydning som den opprinnelige kildekoden, selv om de kan ha annen syntaks.
# 2) Mutatorer / mutasjonsoperatorer: Dette er det som muliggjør mutasjoner, de er på 'førersetet'. De definerer i utgangspunktet typen endring eller endring som skal gjøres i kildekoden for å ha en mutantversjon. De kan refereres til som feil eller mutasjonsregler .
# 3) Mutasjonspoeng: Dette er en poengsum basert på antall mutanter.
Den beregnes ved hjelp av formelen nedenfor:
Noter det, ekvivalente mutanter blir ikke vurdert når man beregner mutasjonspoeng. Mutasjonspoeng er også kjent som mutasjonsdekning . Målet vårt bør være å oppnå en høy mutasjonspoeng.
Hvordan gjøre mutasjonstesting
Trinn 1: La oss skrive vår Jasmine-enhetstest.
Test Suite (Jasmine)
describe('User', function() { it('should compare the two numbers from user input', function(){ expect(20).toBeGreaterThan(5); }) });
Steg 2: Skriv den originale koden.
Opprinnelig kode (Javascript)
const user_info = () => { mother_age = parseInt(prompt('Enter mother's age')) daughter_age = parseInt(prompt('Enter daughter's age')) if (mother_age > daughter_age) { alert(`Daughter's age is ${daughter_age}. Mother's age is ${mother_age}. Welcome to the Mother-Daughter program`) } else { alert(`Daughter's age: ${daughter_age}, is more than mother's age: ${mother_age}. Please enter correct ages`) } } user_info();
Trinn 3: Vi kjører deretter testen gjennom den opprinnelige koden for å sikre at vi ikke har mislykkede tester fra begynnelsen. Vi burde ha noe output som kommuniserer at vi faktisk har skrevet en test med null feil.
For eksempel:
ferdig i 0.019s 1 spesifikasjon, 0 feil, randomisert med frø 31435
Opprinnelig kodes resultat:
Daughter's age is 5. Mother's age is 20. Welcome to the Mother-Daughter program
Trinn 4: Innfør mutanten. I dette tilfellet endrer vi større enn operatør (mor_alder> datter_alder) til en mindre enn operatør (mor_alder Mutant kode (Javascript) Trinn 5: Vi kjører deretter testen gjennom mutantkoden. Her er testresultatene: ferdig i 0.017s 1 spesifikasjon, 0 feil, randomisert med frø 89555 Resultat av mutantkode: Trinn 6: Sammenlign resultatene fra originalversjonen og mutantversjonen. I dette tilfellet er de forskjellige, selv om den samme testserien ble brukt. Vi har derfor drept mutanten vår. Testpakken vår er derfor god å gå. Det er flere typer mutasjoner. Disse er forklart nedenfor. Her introduserer vi en mutasjon ved å endre parameter og / eller konstante verdier, vanligvis med +/- 1. Eksempel: Opprinnelig kode (Javascript) Hvis koden ovenfor var ment å multiplisere partallene der Jeg<4 , vil verdien mutasjon bety å endre initialiseringen til la jeg = 1 . Eksempel: Mutantkode (Javascript) Her sletter eller dupliserer vi en setning i en kodeblokk. Vi kan også omorganisere utsagn i en kodeblokk. I en if-else-blokk, for eksempel, kan vi slette den andre delen eller til og med hele if-else-blokken. Eksempel: Opprinnelig kode (Javascript) Eksempel: Mutantkode (Javascript) Målet her er koden som tar avgjørelser, for eksempel, verdisammenligninger. Vi kan endre oss > til< som i vårt eksempel på mor-datter-programmet. Andre operatører som vi kan bytte inkluderer følgende: Fordelene med mutasjonstesting (MT) inkluderer: Ulemper ved mutasjonstesting (MT) inkluderer: Verktøy er nyttige for å øke prosessen med generering av mutanter. Her er noen verktøy som vi kan bruke i MT: Stryker, Jumble, PIT og Insure ++. La oss lære av et eksempel: Si det er et sykehusnettsted som lar nye brukere registrere seg. Den leser pasientens fødselsdato eller alder. Hvis den er større enn 14, tildeles en allmennlege som hovedlege. For å gjøre dette påkaller den funksjonen ‘generell lege’ som finner den tilgjengelige legen. Nå kan det være annen funksjonalitet. Kanskje pasienter under 13 blir tildelt barnelege og så videre. Men vi tar bare saken over 14 år. Slik kan koden se ut: 1) Les Age Vær oppmerksom på at kodelinjene ovenfor ikke er spesifikke for noe programmeringsspråk og ikke kan kjøres. Det er bare hypotetisk. Som tester, hvis datasettet mitt er 14, 15, 0, 13 - noen tilfeldige tall. Målet er å sjekke om datasettet til de 4 verdiene (14, 15, 0 og 3) er tilstrekkelig til å identifisere alle mulige problemer med denne koden. Les også => Tips for å designe testdata før du utfører testsakene dine Hvordan oppnår Mutation Testing dette? Først og fremst lager du mutanter - varianter av programmet. En mutant er ingenting annet enn et program som er skrevet som et avvik. Den inneholder en selvsådd feil. Eksempler er: Disse erstatningene kalles også 'Mutasjonsoperatører.' La meg vise deg eksempler: Mutant nr. 1: Forholdsoperatørerstatning 1) Les Alder Mutant nr. 2: 1) Les Alder Mutant # 3: 1) Les Alder Mutant # 4: 1) Les Alder Mutant nr. 5: Fjerning av utsagn 1) Les Alder Mutant nr. 6: Absolutt verdiinnsetting 1) Les Alder Mutant nr. 7: Feil syntaks 1) Les Alder Mutant # 8: Gjør det samme som den opprinnelige testen 1) Les Alder En gang er alle mutantene opprettet. De blir utsatt for testdatasettet. Settet vårt er 14, 15, 0 og 13. Hvilke av disse mutantene vil datasettet vårt finne? Finn ut i tabellen nedenfor: (Klikk på bildet for forstørret visning) Som du kan se, finner dataverdien 14 feil når den løper mot, Mutant 2, 3 og 4. Eller, 14 dreper mutanter 2, 3 & 4. Men det er ineffektivt mot, 1, 6 og 8. Hvis datasettet ditt dreper alle mutanter, er det effektivt. Ellers inkluder flere eller bedre testdata. Det er ikke nødvendig at hver verdi i datasettet dreper alle mutanter. Men sammen skal de drepe alle.For eksempel:14 dreper 2, 3 og 4. 15 dreper 1, 2 og 4. Og så videre. Hva med 5, 7 og 8? Mutant # 5 - er programforekomsten som vil mislykkes uavhengig av hvilken dataverdi du gir. Dette er fordi det ikke vil gjøre noen programmering for både gyldige og ugyldige verdier. Mutant # 7 - vil være en kompileringsfeil. Eller i tilfelle et skriptspråk en feil som vil forhindre utførelse. Mutant # 8 - er det samme som hovedprogrammet. Som du kan se, er mutantene ovenfor ikke nyttige i det hele tatt. Derfor er mutanter som skal unngås: Tenker du, hvis det tar så mye krefter, hva kommer til å skje når jeg må teste store eksempler på kode? Mutasjonstesting er avhengig av to ting: Så, den fokuserer på den minste kodenheten og setter sin lit til programmererens dyktighet til å skalere mutasjonstesting til større programmer. Denne opplæringen dekket definisjon, typer og trinn for mutasjonstesting for å utføre denne testingen i detalj med eksempler. Vi håper du har likt å lese og lære om denne interessante testteknikken - Mutasjonstesting. Om forfatteren: Denne artikkelen er skrevet av STH-teammedlem Swati S. Del dine kommentarer, spørsmål og tanker nedenfor. const user_info = () =>{ mother_age = parseInt(prompt('Enter mother's age')) daughter_age = parseInt(prompt('Enter daughter's age')) if (mother_age
Daughter's age: 5, is more than mother's age: 20. Please enter correct ages
Mutasjonstestingstyper
# 1) Verdimutasjon
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=1; i
# 2) Uttalelsesmutasjon
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=0; i
# 3) Beslutningsmutasjon
Opprinnelig operatør Mutant operatør 1 <= > = to > = == 3 === == 4 og eller 5 || &&
Verktøy for mutasjonstesting
Mer om mutasjonstesting
to) Hvis alder> 14 år
3) Lege = Allmennlege ()
4) Slutt om
2) Hvis alder med<’
3) Lege = Allmennlege ()
4) Avslutt hvis
2) Hvis alder = 14 ‘Endrer du> med =’
3) Lege = Allmennlege ()
4) Avslutt hvis
2) Hvis alder> = 14 ‘Endrer du> med> =’
3) Lege = Allmennlege ()
4) Avslutt hvis
2) Hvis alder med<=’
3) Lege = Allmennlege ()
4) Avslutt hvis
2) Hvis alder = 14 år
3) ‘fjern legenes oppdragserklæring’
4) Avslutt hvis
2) Hvis alder> 14 år
3) Doctor = Mr.X (Absolutt verdiinnføring - la oss si at X er barnelege)
4) Avslutt hvis
2) Hvis alder %% 14 (feil syntaks)
3) Lege = Allmennlege ()
4) Avslutt hvis
2) Hvis alder> 14 og alder> 14 ‘betyr det samme som alder> 14’
3) Lege = Allmennlege ()
4) Avslutt hvis
Poeng å merke seg
hvordan starte karriere innen programvaretesting
Konklusjon
Anbefalt lesing