what is mutation testing
Aquest tutorial explica què són les proves de mutació, com es realitzen i els tipus de proves de mutació amb exemples:
Què és la prova de mutació?
La prova de mutació és una tècnica de prova basada en errors en què les variacions d’un programa de programari se sotmeten al conjunt de dades de prova. Això es fa per determinar l'eficàcia del conjunt de proves a aïllar les desviacions.
Sona una mica complicat, oi?
Què aprendreu:
Proves de mutació
Les proves de mutació (MT) recorren un llarg camí, fins als anys 70, on es va proposar per primera vegada com a projecte escolar. Es va cancel·lar, ja que requeria molts recursos. No obstant això, a mesura que els humans van continuar desenvolupant ordinadors més avançats, van tornar lentament i ara és una de les tècniques de proves més populars.
Definició de proves de mutació
MT també es coneix com proves basades en errors, mutació del programa, proves basades en errors, o bé anàlisi de mutacions .
Com el seu nom indica, les proves de mutació són un tipus de proves de programari basades en canvis o mutacions. S’introdueixen canvis minúsculs al codi font per comprovar si els casos de prova definits poden detectar errors al codi.
El cas ideal és que cap dels casos de prova no superi. Si la prova passa, significa que hi ha un error al codi. Diem que el mutant (la versió modificada del nostre codi) va viure. Si la prova falla, no hi ha cap error al codi i el mutant ha estat assassinat. El nostre objectiu és matar tots els mutants.
Les proves de mutació també ajuden a comprovar la qualitat dels casos de prova definits o de les sales de proves amb l’objectiu d’escriure casos de prova més eficaços. Com més mutants puguem matar, més alta serà la qualitat de les nostres proves.
Conceptes de proves de mutació
Abans de discutir més sobre les proves de mutació, explorem alguns conceptes que trobarem.
# 1) Mutants: És simplement la versió mutada del codi font. És el codi que conté canvis de minuts. Quan les dades de la prova s’executen a través del mutant, idealment ens hauria de donar resultats diferents del codi font original. També s’anomenen mutants programes mutants .
Hi ha diferents tipus de mutants. Aquestes són les següents:
- Mutants supervivents: Com hem esmentat, aquests són els mutants que encara estan vius després d’executar les dades de prova a través de les variants originals i mutades del codi font. Cal matar-los. També es coneixen com a mutants vius.
- Mutants assassinats: Es tracta de mutants que es maten després de fer proves de mutació. Els obtenim quan obtenim resultats diferents de les versions originals i mutades del codi font.
- Mutants equivalents: Aquests estan estretament relacionats amb els mutants vius, ja que són 'vius' fins i tot després d’executar-los dades de proves. El que els diferencia dels altres és que tenen el mateix significat que el codi font original, tot i que poden tenir una sintaxi diferent.
# 2) Mutadors / operadors de mutació: Això és el que fa possible les mutacions, es troben al «seient del conductor». Bàsicament defineixen el tipus d’alteració o canvi que cal fer al codi font per tenir una versió mutant. Es poden anomenar fallades o regles de mutació .
# 3) Puntuació de mutació: Es tracta d’una puntuació basada en el nombre de mutants.
Es calcula mitjançant la fórmula següent:
Tingues en compte que, no es consideren mutants equivalents quan es calcula la puntuació de la mutació. La puntuació de mutació també es coneix com adequació de la mutació . El nostre objectiu ha de ser aconseguir una puntuació alta de mutació.
Com fer proves de mutació
Pas 1: Escrivim la nostra prova unitària de Jasmine.
Suite de proves (gessamí)
describe('User', function() { it('should compare the two numbers from user input', function(){ expect(20).toBeGreaterThan(5); }) });
Pas 2: Escriviu el codi original.
Codi original (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();
Pas 3: A continuació, executarem la prova mitjançant el codi original per assegurar-nos que no hem fallat les proves des del primer moment. Hauríem de tenir una sortida que comuniqui que de fet hem escrit una prova amb zero fracassos.
Per exemple:
acabat en 0,019 segons 1 especificació, 0 fallades, aleatoritzades amb la llavor 31435
Resultat del codi original:
Daughter's age is 5. Mother's age is 20. Welcome to the Mother-Daughter program
Pas 4: Introduïu el mutant. En aquest cas, canviem el fitxer més gran que operador (edat_mama> edat_filla) a menor que operador (mare_edat Codi mutant (Javascript) Pas 5: A continuació, executem la prova mitjançant el codi mutant. Aquests són els resultats de les proves: acabat en 0,017 segons 1 especificació, 0 fallades, aleatoritzades amb la llavor 89555 Resultat del codi mutant: Pas 6: Compareu els resultats de la versió original i la versió mutant. En aquest cas, són diferents, fins i tot si es va utilitzar el mateix conjunt de proves. Per tant, hem matat el nostre mutant. Per tant, el nostre conjunt de proves és bo. Hi ha diversos tipus de mutacions. A continuació, s’expliquen. Aquí introduïm una mutació canviant els paràmetres i / o els valors constants, generalment per +/- 1. Exemple: codi original (Javascript) Si es volia que el codi anterior multipliqués els nombres parells on jo<4 , llavors la mutació del valor significaria canviar la inicialització a deixi que i = 1 . Exemple: codi mutant (Javascript) Aquí, suprimim o duplicem una declaració en un bloc de codi. També podríem reorganitzar les sentències en un bloc de codi. En un bloc if-else, per exemple, podríem suprimir la part else o fins i tot tot el bloc if-else. Exemple: codi original (Javascript) Exemple: codi mutant (Javascript) L’objectiu aquí és el codi que pren decisions, per exemple, comparacions de valors. Podem canviar > a< com a l'exemple del programa Mare-Filla. Altres operadors que podem canviar inclouen els següents: Els avantatges de les proves de mutació (MT) inclouen: Els desavantatges de les proves de mutació (MT) inclouen: Les eines són útils per accelerar el procés de generació de mutants. Aquí hi ha algunes eines que podem utilitzar a MT: Stryker, Jumble, PIT i Insure ++. Aprenem d’un exemple: Per exemple, hi ha un lloc hospitalari que permet registrar nous usuaris. Es llegeix la data de naixement o l’edat del pacient. Si és superior a 14, assigna un metge general com a metge principal. Per fer-ho, invoca la funció de 'metge general' que troba el metge disponible. Ara pot ser que hi hagi altres funcions. Potser, els pacients menors de 13 anys són assignats a un pediatre, etc. Però només agafarem el cas de majors de 14 anys. Aquest és el aspecte del codi: 1) Llegiu Edat Tingueu en compte que les línies de codi anteriors no són específiques de cap llenguatge de programació i no s’executaran. És simplement hipotètic. Com a provador, si el meu conjunt de dades és 14, 15, 0, 13, alguns números aleatoris. L'objectiu és comprovar si el conjunt de dades dels 4 valors (14, 15, 0 i 3) és adequat per identificar tots els possibles problemes amb aquest codi. Llegiu també => Consells per dissenyar dades de proves abans d'executar els casos de prova Com ho aconsegueix la prova de mutació? En primer lloc, creeu variacions mutants del programa. Un mutant no és res més que un programa que s’escriu com a desviació. Conté un defecte autoseminat. Alguns exemples són: També s’anomenen aquestes substitucions 'Operadors de mutació'. Deixeu-me mostrar exemples: Mutant # 1: operador relacionalsubstitució 1) Llegiu Edat Mutant # 2: 1) Llegiu Edat Mutant # 3: 1) Llegiu Edat Mutant # 4: 1) Llegiu Edat Mutant # 5: eliminació de la declaració 1) Llegiu Edat Mutant núm. 6: inserció de valor absolut 1) Llegiu Edat Mutant # 7: sintaxi incorrecta 1) Llegiu Edat Mutant # 8: fa el mateix que la prova original 1) Llegiu Edat Una vegada, es creen tots els mutants. Se sotmeten al conjunt de dades de la prova. El nostre conjunt és 14, 15, 0 i 13. Quins d'aquests mutants trobaran el nostre conjunt de dades? Esbrineu-ho a la taula següent: (Feu clic a la imatge per obtenir una vista ampliada) Com podeu veure, el nostre valor de dades 14 troba fallades quan s’executa en contra, Mutant 2, 3 i 4. O bé, 14 mata mutants 2, 3 i 4. Però és ineficaç contra, 1, 6 i 8. Si el vostre conjunt de dades mata tots els mutants, serà eficaç. En cas contrari, incloeu més o millors dades de proves. No és necessari que cada valor del conjunt de dades mori tots els mutants. Però junts haurien de matar a tots.Per exemple:14 mata 2, 3 i 4. 15 mata 1, 2 i 4. I així successivament. Què passa amb 5, 7 i 8? Mutant # 5 - és la instància del programa que fallarà independentment del valor de les dades que doneu. Això es deu al fet que no farà cap programació tant per als valors vàlids com per als no vàlids. Mutant # 7 - serà un error de compilació. O, en el cas d’un llenguatge de seqüències d’ordres, un error que impedirà l’execució. Mutant # 8 - és el mateix que el programa principal. Com podeu veure, els mutants anteriors no són gens útils. Per tant, els mutants que cal evitar són: Esteu pensant, si cal un gran esforç, què passarà quan hagi de provar grans mostres de codi? Les proves de mutació es basen en dues coses: Tan, se centra en la unitat de codi més petita i confia en l'habilitat del programador per escalar les proves de mutació a programes més grans. Aquest tutorial va tractar la definició, els tipus i els passos de les proves de mutació per realitzar aquesta prova en detall amb exemples. Esperem que us hagi agradat llegir i aprendre sobre aquesta interessant tècnica de proves: proves de mutació. Sobre l'autor: Aquest article està escrit per Swati S., membre de l'equip de STH. Comparteix els teus comentaris, preguntes i opinions a continuació. 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
Tipus de proves de mutació
# 1) Mutació del valor
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=1; i
# 2) Mutació de la declaració
let arr = (2,3,4,5) for(let i=0; i
let arr = (2,3,4,5) for(let i=0; i
# 3) Mutació per decisió
Operador original Operador mutant 1 <= > = 2 > = == 3 === == 4 i o bé 5 || &&
Eines de proves de mutació
Més informació sobre les proves de mutació
2) Si l'edat> 14 anys
3) Metge = Metge general ()
4) Finalitza si
2) Si l'edat amb<’
3) Metge = Metge general ()
4) Finalitza si
2) Si edat = 14 'Canviant el> amb ='
3) Metge = Metge general ()
4) Finalitza si
2) Si l'edat> = 14 'Canviant el> amb> ='
3) Metge = Metge general ()
4) Finalitza si
2) Si l'edat amb<=’
3) Metge = Metge general ()
4) Finalitza si
2) Si l'edat = 14 anys
3) 'elimineu la declaració de la tasca del metge'
4) Finalitza si
2) Si l'edat> 14 anys
3) Doctor = Mr.X (Inserció de valor absolut, diguem que X és un pediatre)
4) Finalitza si
2) Si l'edat %% 14 (sintaxi incorrecta)
3) Metge = Metge general ()
4) Finalitza si
2) Si l'edat> 14 i l'edat> 14 'significa el mateix que l'edat> 14'
3) Metge = Metge general ()
4) Finalitza si
Punts a destacar
el millor programari gratuït per netejar el PC
Conclusió
Lectura recomanada