Mutaatiotestaus

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 21. elokuuta 2017 tarkistetusta versiosta . tarkastukset vaativat 7 muokkausta .

Mutaatiotestaus ( mutaatioanalyysi tai ohjelmamutaatio ) on ohjelmistotestausmenetelmä , joka sisältää pieniä muutoksia ohjelmakoodiin. [1] Jos testisarja ei havaitse tällaisia ​​muutoksia, sitä pidetään riittämättömänä. Näitä muutoksia kutsutaan mutaatioiksi , ja ne perustuvat mutaatiolausekkeisiin , jotka joko jäljittelevät yleisiä ohjelmointivirheitä (kuten väärän operaattorin tai muuttujan nimen käyttäminen) tai vaativat meitä luomaan hyödyllisiä testejä.

Historiallinen katsaus

Mutaatiotestausta ehdotti opiskelija Richard Lipton vuonna 1971 [2] , ja sen kehittivät ja julkaisivat ensimmäisenä DeMille, Lipton ja Seyward. Ensimmäisen mutaatiotestaustyökalun toteutuksen loi Yalen yliopiston Timothy Budd väitöskirjassaan (nimeltään "Mutational Analysis") vuonna 1980.

Mutaatiotestausmenetelmä on laskennallisesti kallis, eikä se ole ollut suosittu vasta viime aikoihin asti. Viime aikoina tämä menetelmä on kuitenkin jälleen herättänyt kiinnostusta tietotekniikan alan tutkijoissa.

Yleiskatsaus mutaatiotestaukseen

Mutaatiotestaus koostuu mutatoituvien operaattorien valinnasta ja soveltamisesta yksitellen jokaiseen ohjelman lähdekoodin osaan. Mutoiva operaattori on lähdekoodin muunnossääntö. Mutaatiooperaattorin yksittäisen sovelluksen tulosta kutsutaan mutantiksi . Jos testisarja pystyy havaitsemaan muutoksen (eli yksi testeistä epäonnistuu), mutantin sanotaan kuolleen . Harkitse esimerkiksi seuraavaa katkelmaa C++-ohjelmasta:

if ( a && b ) { c = 1 ; } muu { c = 0_ _ }

Ehtomutaatio-operaattori korvaa &&ja ||luo seuraavan mutantin:

if ( a || b ) { c = 1 ; } muu { c = 0_ _ }

Jotta testi tappaisi tämän mutantin, seuraavien ehtojen on täytyttävä:

  • Testin on saavutettava (Reach) mutatoitu lause .
  • Testin syötetietojen tulee johtaa mutanttiohjelman (Infect) ja alkuperäisen ohjelman eri tiloihin. Esimerkiksi testi a = 1ja kanssa b = 0johtaisi tähän.
  • Muuttujan arvon con vaikutettava (etenevä) ohjelman ulostuloon ja se on tarkistettava testillä.

Näitä ehtoja kutsutaan yhteisesti RIP - malliksi .

Heikko mutaatiotestaus (tai heikko mutaatiokattavuus ) edellyttää vain kahden ensimmäisen ehdon täyttymistä. Vahva mutaatiotestaus edellyttää kaikkien kolmen ehdon täyttymistä ja varmistaa, että testisarja voi todella havaita muutoksen. Heikkomutaatiotestaus liittyy läheisesti koodipeittotekniikoihin . Testin tarkistaminen heikon mutaation olosuhteita vastaan ​​vaatii paljon vähemmän laskentaa kuin vahvan mutaation olosuhteiden tarkistaminen.

Vastaavat mutantit

Monet mutaatiolausekkeet voivat johtaa vastaaviin ohjelmiin. Harkitse esimerkiksi seuraavaa ohjelman fragmenttia:

int indeksi = 0 ; kun ( ... ) { ; indeksi ++ ; if ( indeksi == 10 ) { tauko ; } }

Tilamutaatiooperaattori voidaan korvata ==seuraavalla >=mutantilla:

int indeksi = 0 ; kun ( ... ) { ; indeksi ++ ; if ( indeksi >= 10 ) { tauko ; } }

Ei kuitenkaan ole olemassa testiä, joka voisi tappaa tämän mutantin. Tuloksena oleva ohjelma vastaa alkuperäistä ohjelmaa. Tällaisia ​​mutantteja kutsutaan vastaaviksi mutantteiksi .

Vastaavien mutanttien tunnistaminen on yksi suurimmista esteistä mutaatiotestauksen käytölle käytännössä. Pyrkimys tarkistaa, onko mutantti ekvivalentti voi olla erittäin suuri jopa pienille ohjelmille. [3]

Mutaatiooperaattorit

Monenlaisia ​​mutaatiooperaattoreita on tutkittu. Esimerkiksi pakollisille kielille voidaan käyttää seuraavia operaattoreita:

  • Poista ohjelmalausunto.
  • Korvaa jokainen looginen lauseke loogisella vakiolla "tosi" tai "epätosi".
  • Korvaa jokainen aritmeettinen operaatio toisella. Esimerkiksi , tai . +_*-/
  • Korvaa jokainen looginen operaatio toisella. Esimerkiksi , tai . >_>===<=
  • Korvaa jokainen muuttuja toisella (samasta laajuudesta ). Muuttujien on oltava samantyyppisiä.

Lisäksi on operaattorit oliokielille, [4] operaattorit rinnakkaisohjelmointiin, [5] operaattorit tietorakenteille , kuten konteille [6] jne.

Muistiinpanot

  1. Käytännön järjestelmä mutaatiotestaukseen: Ohje yhteiselle ohjelmoijalle Arkistoitu 14. helmikuuta 2012 Wayback Machinessa , kirjoittanut A. Jefferson Offutt.
  2. Mutaatio 2000: Ortogonaalin yhdistäminen . Käyttöpäivä: 28. tammikuuta 2012. Arkistoitu alkuperäisestä 28. syyskuuta 2011.
  3. P.G. Frankl, S.N. Weiss ja C. Hu. Kaikki käyttötarkoitukset vs. mutaatiotestaus: Tehokkuuden kokeellinen vertailu. Journal of Systems and Software , 38:235-253, 1997.
  4. MuJava: An Automated Class Mutation System arkistoitu 11. maaliskuuta 2012 Wayback Machinessa Yu-Seung Ma, Jeff Offutt ja Yong Rae Kwo.
  5. Mutaatiooperaattorit samanaikaiselle Javalle (J2SE 5.0) Arkistoitu 5. helmikuuta 2012 Wayback Machinessa , kirjoittaneet Jeremy S. Bradbury, James R. Cordy ja Juergen Dingel.
  6. Mutation of Java Objects Arkistoitu 12. toukokuuta 2013 Wayback Machinessa , kirjoittaneet Roger T. Alexander, James M. Bieman, Sudipto Ghosh, Bixia Ji.