what is mutation testing
Ta vadnica s primeri ponazarja, kaj je preskušanje mutacij, kako ga izvajati in vrste preskušanja mutacij:
Kaj je testiranje mutacij?
Preskušanje mutacij je tehnika preskušanja na podlagi napak, pri kateri so različice programske opreme podvržene testnemu naboru podatkov. To se naredi za določitev učinkovitosti preskusnega niza pri izolaciji odstopanj.
Sliši se nekoliko zapleteno, kajne?
Kaj se boste naučili:
Preskušanje mutacij
Mutacijsko testiranje (MT) seže daleč nazaj v sedemdeseta leta, ko je bilo prvič predlagano kot šolski projekt. Odpisan je bil, ker je bil zelo zahteven. Ker pa so ljudje še naprej razvijali naprednejše računalnike, se je počasi vrnil in je zdaj ena najbolj priljubljenih tehnik testiranja.
Opredelitev mutacijskega preskusa
MT je znan tudi kot testiranje na podlagi napak, mutacija programa, preskušanje na podlagi napak, ali analiza mutacij .
Kot že ime pove, je testiranje mutacij vrsta preskušanja programske opreme, ki temelji na spremembah ali mutacijah. V izvorno kodo se vnesejo majhne spremembe, da se preveri, ali lahko opredeljeni testni primeri zaznajo napake v kodi.
Idealen primer je, da noben testni primer ne opravi. Če test opravi, to pomeni, da je v kodi napaka. Pravimo, da je mutant (spremenjena različica naše kode) živel. Če test ne uspe, potem v kodi ni napake in mutant je bil ubit. Naš cilj je ubiti vse mutante.
Mutacijsko testiranje pomaga tudi pri preizkušanju kakovosti opredeljenih testnih primerov ali testnih paketov s poskusom pisanja učinkovitejših testnih primerov. Več kot mutantov lahko ubijemo, večja je kakovost naših testov.
Koncepti testiranja mutacij
Preden bomo nadalje razpravljali o testiranju mutacij, raziščimo nekaj konceptov, na katere bomo naleteli.
# 1) Mutanti: To je preprosto mutirana različica izvorne kode. Koda vsebuje minute spremembe. Ko preskusne podatke zaženemo skozi mutanta, bi nam v idealnem primeru morali dati drugačne rezultate od prvotne izvorne kode. Pokličejo se tudi mutanti mutant programi .
Obstajajo različne vrste mutantov. Ti so naslednji:
- Preživeli mutanti: Kot smo že omenili, so to mutanti, ki še živijo po zagonu testnih podatkov skozi izvirno in mutirano različico izvorne kode. Te je treba ubiti. Znani so tudi kot živi mutanti.
- Ubiti mutanti: To so mutanti, ki jih po testiranju mutacij usmrtijo. Te dobimo, ko dobimo drugačne rezultate izvirne in mutirane različice izvorne kode.
- Enakovredni mutanti: Ti so tesno povezani z živimi mutanti, saj so 'živi' tudi po tem, ko skozi njih prenašajo testne podatke. Loči jih od drugih, ker imajo enak pomen kot izvirna izvorna koda, čeprav imajo lahko različno sintakso.
# 2) Mutatorji / mutacijski operaterji: To so tisto, kar omogoča mutacije, so na 'voznikovem sedežu'. V bistvu določajo vrsto spremembe ali spremembe izvorne kode, tako da ima mutantno različico. Lahko jih imenujemo napake ali pravila mutacije .
# 3) Ocena mutacije: To je ocena, ki temelji na številu mutantov.
Izračuna se po spodnji formuli:
Upoštevajte, da, enakovredni mutanti pri izračunu mutacijskega rezultata niso upoštevani. Ocena mutacije je znana tudi kot ustreznost mutacije . Naš cilj bi moral biti doseči visok rezultat mutacije.
Kako narediti testiranje mutacij
Korak 1: Napišimo naš test enote Jasmine.
Testni apartma (jasmin)
describe('User', function() { it('should compare the two numbers from user input', function(){ expect(20).toBeGreaterThan(5); }) });
2. korak: Napišite originalno kodo.
Izvirna koda (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();
3. korak: Nato bomo preizkus izvedli skozi izvirno kodo, da zagotovimo, da od začetka ne bomo imeli neuspešnih testov. Morali bi imeti nekaj izhodnih podatkov, ki sporočajo, da smo res napisali test z nič napakami.
Na primer:
končano v 0,019s 1 spec, 0 napak, naključno s semenom 31435
Rezultat izvirne kode:
Daughter's age is 5. Mother's age is 20. Welcome to the Mother-Daughter program
4. korak: Predstavite mutanta. V tem primeru spremenimo večji kot operator (mother_age> daughter_age) v a manj kot operater (mother_age Koda mutanta (Javascript) 5. korak: Nato preizkus izvedemo skozi mutantno kodo. Tu so rezultati testa: končano v 0,017s 1 spec, 0 napak, randomizirano s semenom 89555 Rezultat mutantne kode: 6. korak: Primerjajte rezultate izvirne različice in različice mutanta. V tem primeru so različni, tudi če je bil uporabljen isti testni paket. Zato smo ubili našega mutanta. Naš testni paket je torej dober. Obstaja več vrst mutacij. Ti so pojasnjeni spodaj. Tu uvedemo mutacijo s spreminjanjem parametrov in / ali konstantnih vrednosti, običajno z +/- 1. Primer: izvirna koda (Javascript) Če naj bi bila zgornja koda pomnožena soda števila, kje jaz<4 , potem bi mutacija vrednosti pomenila spremembo inicializacije na naj bo i = 1 . Primer: Mutant koda (Javascript) Tu izpisek izbrišemo ali podvojimo v bloku kode. Izjave lahko preuredimo tudi v kodni blok. V bloku if-else bi lahko na primer izbrisali del else ali celo celoten blok if-else. Primer: izvirna koda (Javascript) Primer: Mutant koda (Javascript) Cilj tukaj je koda, ki sprejema odločitve, na primer, primerjave vrednosti. Lahko se spremenimo > do< kot v primeru programa Mati-hči. Drugi operaterji, ki jih lahko zamenjamo, vključujejo naslednje: Prednosti testiranja mutacij (MT) vključujejo: Slabosti mutacijskega testiranja (MT) vključujejo: Orodja so priročna za pospešitev procesa nastajanja mutantov. Tu je nekaj orodij, ki jih lahko uporabimo v MT: Stryker, Jumble, PIT in Insure ++. Učimo se na primeru: Recimo, obstaja spletno mesto bolnišnice, ki novim uporabnikom omogoča registracijo. Prikaže se datum rojstva ali starost pacienta. Če je ta večja od 14, za glavnega zdravnika dodeli splošnega zdravnika. V ta namen prikliče funkcijo 'splošnega zdravnika', ki najde razpoložljivega zdravnika. Zdaj lahko obstajajo druge funkcije. Mogoče paciente, mlajše od 13 let, dodelijo pediatru itd. Vzeli pa bomo samo primer, starejši od 14 let. Tako bi lahko izgledala koda: 1) Preberite starost Upoštevajte, da zgornje vrstice kode niso specifične za noben programski jezik in se ne bodo izvajale. To je samo hipotetično. Kot tester, če je moj nabor podatkov 14, 15, 0, 13 - nekaj naključnih števil. Cilj je preveriti, ali je nabor podatkov 4 vrednosti (14, 15, 0 in 3) ustrezen za prepoznavanje vseh možnih težav s to kodo. Preberite tudi => Nasveti za oblikovanje testnih podatkov pred izvajanjem testnih primerov Kako mutacijsko testiranje to doseže? V prvi vrsti ustvarite mutante - različice programa. Mutant ni nič drugega kot program, ki je zapisan kot odstopanje. Vsebuje napajalno napako. Primeri so: Te nadomestke imenujemo tudi „Operatorji mutacij.“ Naj vam pokažem primere: Mutant # 1: Relacijski operaterzamenjava 1) Preberite starost Mutant # 2: 1) Preberite starost Mutant # 3: 1) Preberite starost Mutant # 4: 1) Preberite starost Mutant # 5: Odstranjevanje izjave 1) Preberite starost Mutant # 6: Absolutno vstavljanje vrednosti 1) Preberite starost Mutant # 7: Napačna skladnja 1) Preberite starost Mutant # 8: Naredi isto kot prvotni test 1) Preberite starost Ko so enkrat ustvarjeni vsi mutanti. Na njih se opravi testni niz podatkov. Naš nabor je 14, 15, 0 in 13. Katerega od teh mutantov bo naš nabor podatkov našel? Poiščite v spodnji tabeli: (Kliknite sliko za povečavo) Kot lahko vidite, naša podatkovna vrednost 14 najde napake, ko se zažene proti Mutantu 2, 3 in 4. Ali pa 14 ubije mutante 2, 3 in 4. Toda proti 1, 6 in 8 ni učinkovita. Če vaš nabor podatkov ubije vse mutante, je učinkovit. V nasprotnem primeru vključite več ali boljše podatke o preskusu. Ni potrebno, da vsaka vrednost v naboru podatkov ubije vse mutante. Toda skupaj bi morali pobiti vse.Na primer:14 ubije 2, 3 in 4. 15 ubije 1, 2 in 4. In tako naprej. Kaj pa 5, 7 in 8? Mutant # 5 - je primerek programa, ki ne bo uspel ne glede na katero koli vrednost podatkov, ki jo navedete. To pa zato, ker ne bo programiral tako veljavnih kot neveljavnih vrednosti. Mutant # 7 - bo napaka pri prevajanju. Ali v primeru skriptnega jezika napaka, ki bo preprečila izvedbo. Mutant # 8 - je ista stvar kot glavni program. Kot lahko vidite, zgornji mutanti sploh niso uporabni. Zato so mutanti, ki se jim je treba izogniti: Ali razmišljate, če se bo treba toliko potruditi, kaj se bo zgodilo, ko bom moral preizkusiti velike vzorce kode? Preskušanje mutacij temelji na dveh stvareh: Torej, osredotoča se na najmanjšo enoto kode in zaupa v spretnost programerja, da testiranje mutacij prilagodi večjim programom. V tej vadnici so z primeri podrobno opisane definicije, vrste in koraki za testiranje mutacij. Upamo, da ste uživali v branju in učenju te zanimive tehnike testiranja - Mutacijsko testiranje. O avtorju: Ta članek je napisal član ekipe STH Swati S. Prosimo, delite svoje komentarje, vprašanja in razmišljanja spodaj. 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
Vrste preskušanja mutacij
# 1) Mutacija vrednosti
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=1; i
# 2) Mutacija izjave
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=0; i
# 3) Mutacija odločitve
Prvotni operater Mutantni operater 1. <= > = dva > = == 3. === == 4. in ali 5. || &&
Orodja za testiranje mutacij
Več o testiranju mutacij
dva) Če je starost> 14
3) Zdravnik = splošni zdravnik ()
4) Konec, če
2) Če starost z<’
3) zdravnik = splošni zdravnik ()
4) Konec, če
2) Če je starost = 14, 'Spreminjanje> z ='
3) zdravnik = splošni zdravnik ()
4) Konec, če
2) Če starost> = 14 'Spreminjanje> z> ='
3) zdravnik = splošni zdravnik ()
4) Konec, če
2) Če starost z<=’
3) zdravnik = splošni zdravnik ()
4) Konec, če
2) Če je starost = 14 let
3) „odstranite izjavo o dodelitvi zdravnika“
4) Konec, če
2) Če je starost> 14
3) Zdravnik = Mr.X (absolutna vstavitev vrednosti - recimo, da je X pediater)
4) Konec, če
2) Če starost %% 14 (napačna skladnja)
3) zdravnik = splošni zdravnik ()
4) Konec, če
2) Če starost> 14 in starost> 14 ‘pomenita enako kot starost> 14’
3) zdravnik = splošni zdravnik ()
4) Konec, če
Točke, ki jih je treba upoštevati
podpira vprašanja in odgovore na razgovore s tehnikom
Zaključek
Priporočeno branje