what is mutation testing
Ovaj vodič objašnjava što je testiranje mutacije, kako to izvesti i vrste testiranja mutacije s primjerima:
Što je ispitivanje mutacija?
Ispitivanje mutacija tehnika je ispitivanja zasnovana na greškama gdje se varijacije softverskog programa podvrgavaju skupu podataka za ispitivanje. To se radi kako bi se utvrdila učinkovitost ispitnog skupa u izoliranju odstupanja.
Zvuči malo komplicirano, zar ne?
Što ćete naučiti:
Ispitivanje mutacija
Ispitivanje mutacija (MT) ide dug put, sve do 70-ih, gdje je prvi put predloženo kao školski projekt. Otpisan je jer je zahtijevao mnogo resursa. Međutim, kako su ljudi nastavili razvijati naprednija računala, polako se vratio i sada je jedna od najpopularnijih tehnika ispitivanja.
Definicija ispitivanja mutacija
MT je također poznat kao ispitivanje na temelju kvara, mutacija programa, testiranje na temelju pogrešaka, ili analiza mutacija .
Kao što i samo ime govori, testiranje mutacija vrsta je softverskog testiranja koja se temelji na promjenama ili mutacijama. Neznatne promjene uvode se u izvorni kod kako bi se provjerilo mogu li definirani testni slučajevi otkriti pogreške u kodu.
Idealan je slučaj da niti jedan testni slučaj ne smije proći. Ako test prođe, to znači da postoji pogreška u kodu. Kažemo da je mutant (modificirana verzija našeg koda) živio. Ako test ne uspije, tada nema pogreške u kodu, a mutant je ubijen. Cilj nam je ubiti sve mutante.
Mutacijsko testiranje također pomaže u testiranju kvalitete definiranih testnih slučajeva ili testnih kompleta s ciljem pisanja učinkovitijih testnih slučajeva. Što više mutanata možemo ubiti, to je veća kvaliteta naših testova.
Koncepti ispitivanja mutacija
Prije nego što dalje razgovaramo o ispitivanju mutacija, istražimo neke koncepte na koje ćemo naići.
# 1) Mutanti: To je jednostavno mutirana verzija izvornog koda. To je kod koji sadrži minute promjene. Kada se testni podaci provode kroz mutanta, u idealnom slučaju trebali bi nam dati različite rezultate od izvornog izvornog koda. Zovu se i mutanti programi mutanata .
Postoje različite vrste mutanata. To su kako slijedi:
- Preživjeli mutanti: Kao što smo spomenuli, to su mutanti koji su još uvijek živi nakon pokretanja test podataka kroz izvornu i mutiranu inačicu izvornog koda. Ovi moraju biti ubijeni. Poznati su i kao živi mutanti.
- Ubijeni mutanti: To su mutanti koji se ubijaju nakon testiranja mutacija. Dobivamo ih kad dobijemo različite rezultate od izvorne i mutirane verzije izvornog koda.
- Ekvivalentni mutanti: Oni su usko povezani sa živim mutantima, jer su oni 'živi' čak i nakon prolaska podataka o testovima kroz njih. Ono što ih razlikuje od ostalih jest to što imaju isto značenje kao i izvorni izvorni kod, iako mogu imati različitu sintaksu.
# 2) Mutatori / operateri mutacije: To su ono što omogućava mutacije, one su na ‘vozačkom mjestu’. Oni u osnovi definiraju vrstu promjene ili promjene radi unosa izvornog koda u mutant verziju. Njih se može označiti kao greške ili pravila mutacije .
# 3) Ocjena mutacije: Ovo je rezultat na temelju broja mutanata.
Izračunava se prema donjoj formuli:
Imajte na umu da, ekvivalentni mutanti se ne uzimaju u obzir pri izračunavanju rezultata mutacije. Rezultat mutacije poznat je i kao adekvatnost mutacije . Naš bi cilj trebao biti postizanje visokog broja mutacija.
Kako se vrši testiranje mutacija
Korak 1: Napišimo naš Jasminov jedinični test.
Probni paket (jasmin)
describe('User', function() { it('should compare the two numbers from user input', function(){ expect(20).toBeGreaterThan(5); }) });
Korak 2: Napišite izvorni kod.
Izvorni kod (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: Zatim ćemo test pokrenuti kroz izvorni kôd kako bismo osigurali da od početka nemamo neuspjelih testova. Morali bismo imati neki izlaz koji govori da smo doista napisali test s nula kvarova.
Na primjer:
završeno za 0,019s 1 specifikacija, 0 neuspjeha, randomizirano sa sjemenom 31435
Rezultat izvornog koda:
Daughter's age is 5. Mother's age is 20. Welcome to the Mother-Daughter program
Korak # 4: Predstavite mutanta. U ovom slučaju mijenjamo veće-od operator (majka_starost> kći_starost) u a manje od operator (majka_starost Mutant kôd (Javascript) Korak # 5: Zatim provodimo test kroz mutantni kod. Evo rezultata ispitivanja: završeno za 0,017s 1 specifikacija, 0 neuspjeha, randomizirano sa sjemenom 89555 Rezultat mutant koda: Korak # 6: Usporedite rezultate s izvorne verzije i mutirane verzije. U ovom su slučaju različiti, čak i ako je korišten isti testni paket. Stoga smo ubili svog mutanta. Naš je testni paket stoga spreman za upotrebu. Postoji nekoliko vrsta mutacija. Oni su objašnjeni u nastavku. Ovdje uvodimo mutaciju promjenom parametra i / ili konstantnih vrijednosti, obično za +/- 1. Primjer: izvorni kod (Javascript) Ako je gornji kod trebao umnožiti parne brojeve gdje ja<4 , tada bi mutacija vrijednosti značila promjenu inicijalizacije u neka je i = 1 . Primjer: Mutant kod (Javascript) Ovdje brišemo ili dupliciramo izjavu u bloku koda. Također bismo mogli preurediti izjave u blok koda. Na primjer, u bloku if-else mogli bismo izbrisati dio else ili čak cijeli if-else blok. Primjer: izvorni kod (Javascript) Primjer: Mutant kod (Javascript) Ovdje je cilj kod koji donosi odluke, na primjer, usporedbe vrijednosti. Možemo se promijeniti > do< kao u našem primjeru programa Majka-kći. Ostali operateri koje možemo zamijeniti uključuju sljedeće: Prednosti ispitivanja mutacija (MT) uključuju: Nedostaci ispitivanja mutacija (MT) uključuju: Alati su korisni za ubrzavanje procesa stvaranja mutanata. Evo nekoliko alata koje možemo koristiti u MT-u: Stryker, Jumble, PIT i Insure ++. Učimo na primjeru: Recimo, postoji bolničko mjesto koje novim korisnicima omogućuje registraciju. Očitava Datum rođenja ili dob pacijenta. Ako je veća od 14, glavnim liječnikom određuje liječnika opće prakse. Da bi to učinio, poziva funkciju 'općeg liječnika' koja pronalazi dostupnog liječnika. Sada bi mogla postojati druga funkcionalnost. Možda se pacijenti mlađi od 13 godina raspoređuju kod pedijatra i tako dalje. Ali mi ćemo uzeti samo slučaj starije od 14 godina. Ovo bi mogao izgledati kod: 1) Čitaj doba Napominjemo da gornji retci koda nisu specifični za bilo koji programski jezik i neće se izvoditi. To je samo hipotetski. Kao tester, ako je moj skup podataka 14, 15, 0, 13 - neki slučajni brojevi. Cilj je provjeriti je li skup podataka od 4 vrijednosti (14, 15, 0 i 3) adekvatan za identificiranje svih mogućih problema s ovim kodom. Također pročitajte => Savjeti za dizajn testnih podataka prije izvršavanja testnih slučajeva Kako to postiže mutiranje? Prvo i najvažnije, stvarate mutante - varijacije programa. Mutant nije ništa drugo doli program koji je napisan kao odstupanje. Sadrži samoisijajući kvar. Primjeri su: Te se zamjene također nazivaju 'Operatori mutacije.' Dopustite mi da vam pokažem primjere: Mutant # 1: Relacijski operatorzamjena 1) Čitana dob Mutant # 2: 1) Čitana dob Mutant # 3: 1) Čitana dob Mutant # 4: 1) Čitana dob Mutant # 5: Uklanjanje izjave 1) Čitana dob Mutant # 6: Apsolutno umetanje vrijednosti 1) Čitana dob Mutant # 7: Pogrešna sintaksa 1) Čitana dob Mutant # 8: Radi isto što i originalni test 1) Čitana dob Jednom su stvoreni svi mutanti. Podvrgavaju se testnom skupu podataka. Naš skup je 14, 15, 0 i 13. Koje će od ovih mutanata pronaći naš skup podataka? Saznajte u donjoj tablici: (Kliknite na sliku za uvećani prikaz) Kao što možete vidjeti, naša vrijednost podataka 14 pronalazi neuspjehe kada se pokrene protiv, Mutanta 2, 3 i 4. Ili, 14 ubija mutante 2, 3 i 4. Ali, neučinkovita je protiv, 1, 6 i 8. Ako vaš skup podataka ubije sve mutante, to je učinkovito. Inače, uključite više ili bolje podatke o ispitivanju. Nije potrebno da svaka vrijednost u skupu podataka ubije sve mutante. Ali zajedno bi trebali pobiti sve.Na primjer:14 ubija 2, 3 i 4. 15 ubija 1, 2 i 4. I tako dalje. Što je s 5, 7 i 8? Mutant # 5 - je instanca programa koja neće uspjeti bez obzira na vrijednost podataka koju date. To je zato što neće raditi programiranje za valjane i nevaljane vrijednosti. Mutant # 7 - bit će pogreška kompajliranja. Ili u slučaju skriptnog jezika pogreška koja će spriječiti izvršenje. Mutant # 8 - je ista stvar kao i glavni program. Kao što vidite, gore navedeni mutanti uopće nisu korisni. Stoga su mutanti koje treba izbjegavati: Razmišljate li, ako treba toliko napora, što će se dogoditi kad moram testirati velike uzorke koda? Ispitivanje mutacija oslanja se na dvije stvari: Tako, fokusira se na najmanju jedinicu koda i polaže svoju vjeru u vještinu programera da testiranje mutacije prilagodi većim programima. Ovaj je vodič detaljno objasnio definiciju, vrste i korake testiranja mutacije s primjerima. Nadamo se da ste uživali čitati i učiti o ovoj zanimljivoj tehnici testiranja - testiranju mutacija. O autoru: Ovaj članak napisao je član STH tima Swati S. Molimo podijelite svoje komentare, pitanja i razmišljanja u nastavku. 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 ispitivanja mutacija
# 1) Vrijednost mutacije
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 odluke
Izvorni operator Operator mutanta 1 <= > = dva > = == 3 === == 4 i ili 5 || &&
Alati za ispitivanje mutacija
Više o ispitivanju mutacija
dva) Ako je dob> 14
3) Liječnik = opći liječnik ()
4) Završi ako
2) Ako dob sa<’
3) Liječnik = opći liječnik ()
4) Završi ako
2) Ako je dob = 14 'Promjena> sa ='
3) Liječnik = opći liječnik ()
4) Završi ako
2) Ako je dob> = 14 'Mijenjanje> sa> ='
3) Liječnik = opći liječnik ()
4) Završi ako
2) Ako dob sa<=’
3) Liječnik = opći liječnik ()
4) Završi ako
2) Ako je dob = 14
3) 'ukloniti izjavu o rasporedu liječnika'
4) Završi ako
2) Ako je dob> 14
3) Liječnik = Mr.X (Apsolutno umetanje vrijednosti - recimo da je X pedijatar)
4) Završi ako
2) Ako je dob %% 14 (netočna sintaksa)
3) Liječnik = opći liječnik ()
4) Završi ako
2) Ako dob> 14 & dob> 14 'znači isto što i dob> 14'
3) Liječnik = opći liječnik ()
4) Završi ako
Bodovi koje treba zabilježiti
najbolji DVD ripping softver za Mac
Zaključak
Preporučena literatura