sono criteri per l’individuazione dei casi di input che...
TRANSCRIPT
![Page 1: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/1.jpg)
Sonocriteriperl’individuazionedeicasidiinputchesibasanosullastrutturadelcodice
![Page 2: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/2.jpg)
Abbiamovistoicriterifunzionali
Icriteristrutturalichevediamooggidevonoaiutareadaggiungerealtritest.
Rispondonoalladomanda:“Qualialtricasidevoaggiungereperfaremergeremalfunzionamentichenonsonoapparsiconilblack-boxtesting?”
Perche’criteribasatisulcodice
![Page 3: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/3.jpg)
Banalmentepotremmodirecheunprogrammanone’testatoadeguatamentesealcunisuoielementinonvengonomaiesercitatidaitest.
Icriteridicontrolflowtestingsonodefinitiperclassiparticolaridielementierichiedonocheitestsesercitinotuttiqueglielementidelprogramma
Glielementipossonoessere:comandi,branches,condizioniocammini.
Glielementidiunflussodicontrollo
![Page 4: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/4.jpg)
Grafodiflusso▪ definiscelastrutturadelcodiceidentificandonelepartiecomesonocollegatetraloro
▪ èottenutoapartiredalcodice
Idiagrammiablocchi(dettianchediagrammidiflusso,flowchartininglese)sonounlinguaggiodimodellazionegraficoperrappresentarealgoritmi(insensolato)
![Page 5: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/5.jpg)
double eleva(int x, int y) { 1. if (y<0) 2. pow = 0-y; 3. else pow = y; 4. z = 1.0; 5. while (pow!=0) 6. { z = z*x; pow = pow-1 } 7. if (y<0) 8. z = 1.0 / z; 9. return(z); }
1
2 3
4
5
6 7
8 9
![Page 6: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/6.jpg)
Coperturadeicomandi
1
2 3
4
5
6 7
8 9
double eleva(int x, int y) { 1. if (y<0) 2. pow = 0-y; 3. else pow = y; 4. z = 1.0; 5. while (pow!=0) 6. { z = z*x; pow = pow-1 } 7. if (y<0) 8. z = 1.0 / z; 9. return(z); }
InsiemedivaloriperxeycheesercitinoicomandiEsempio:-{(x=2,y=2),(x=0,y=0)}-{(x=-2,y=3),(x=0,y=-5)}
![Page 7: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/7.jpg)
Coperturadeicomandi:comescegliamotrainsiemiditest
1
2 3
4
5
6 7
8 9
double eleva(int x, int y) { 1. if (y<0) 2. pow = 0-y; 3. else pow = y; 4. z = 1.0; 5. while (pow!=0) 6. { z = z*x; pow = pow-1 } 7. if (y<0) 8. z = 1.0 / z; 9. return(z); }
Misuradicopertura=numerodicomandiesercitatinumerodicomanditotali
![Page 8: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/8.jpg)
Esisteunacoperturatotalechesiottieneconsoloduecasiditest:unoy<0eunoy>=0.(x=2,y=-2)esercitaicomandilungoilcamminorossoedhaunacoperturadi8/9=89%
(x=2,y=0)esercitaicomandilungoilcamminomarroneedhaunacoperturadi6/9=66%
{(x=2,y=-2),(x=2,y=0)}haunacoperturadi9/9=100%
1
2 3
4
5
6 7
8 9
comandi
double eleva(int x, int y) { 1. if (y<0) 2. pow = 0-y; 3. else pow = y; 4. z = 1.0; 5. while (pow!=0) 6. { z = z*x; pow = pow-1 } 7. if (y<0) 8. z = 1.0 / z; 9. return(z); }
![Page 9: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/9.jpg)
Coperturadeicomandi
Lacoperturanone’monotonarispettoalladimensionedell’insiemeditest:
{(x=4,y=-2)}haunacoperturapiu’altarispettoa{(x=2,y=0),(x=-2,y=2)}!
Manonsemprevalelapenacercareatuttiicostiuncoperturaminima!
![Page 10: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/10.jpg)
double eleva(int x, int y){
if (y<0) pow = 0-y; else pow = y; z = 1.0; while (pow!=0) { z = z * x; pow = pow-1} if (y<0) z = 1.0 / z; return(z); }
1
2
4
5
6 7
8 9
Possoesercitaretuttiicomandicon(x=2,y=-1)manonmiaccorgodelfattochemancailramoelse!Devoaverecasiditestcheesercitinoentrambiiramidiunacondizione.
![Page 11: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/11.jpg)
double eleva(int x, int y){
if (y<0) pow = 0-y; else pow = y; z = 1.0; while (pow!=0) { z = z * x; pow = pow-1} if (y<0) z = 1.0 / z; return(z); }
1
2
4
5
6 7
8 9
Peravereunacoperturadelledecisionidevoaverealmenoduecasiditestunoy<0eunoy>=0.Devocopriretuttelefrecce!Misuradicopertura=numeroditestesercitatinumeroditesttotali
![Page 12: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/12.jpg)
siconsideriilcodice if(x>1||y==0){comando1} else{comando2}
Iltest{x=0,y=0}e{x=0,y=1}garantiscelapienacoperturadelladecisione,manonesercitatuttiivaloridiveritàdellaprimacondizione
• inparticolareavreipotutovolerscriverex<1eaverinvertitoilversodel<Iltest{x=2,y=2}e{x=0,y=o}esercitaivaloridiveritàdelleduecondizioni(manontutteledecisioni)Iltest{x=2,y=0}e{x=0,y=2}esercitatuttiivaloridiveritàdelleduecondizioniin&&(etutteledecisioni)
Condizionicomposte
![Page 13: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/13.jpg)
Coperturadicondizionisemplici
UninsiemeditestTperunprogrammaPcopretuttelecondizionisemplici(basiccondition)ofPseognicondizionesempliceinPhauntestconoutputattesotrueeuntestconuntestoutputattesofalse
Coperturadellebasiccondition=n.divaloridiverita’assuntidallebasicconditions2*n.dibasicconditions
![Page 14: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/14.jpg)
siconsideriilcodice if(x>1&&y==0&&z>3){comando1} else{comando2}LamultipleconditioncoveragerichiededitestaretuttelepossibilicombinazioniInpresenzadi&&cisipuòridurrea4casi:▪ vero,vero,vero▪ vero,vero,falso▪ vero,falso,-▪ falso,-,-
23<latexit sha1_base64="58MN8DxL4svhrrOOB1rRJ16+vjQ=">AAAB7HicbVBNT8JAEJ3iF+IX6tHLRjDxRNpy0CPRi0dMLJBAJdtlCxu222Z3a9I0/AYvHjTGqz/Im//GBXpQ8CWTvLw3k5l5QcKZ0rb9bZU2Nre2d8q7lb39g8Oj6vFJR8WpJNQjMY9lL8CKciaop5nmtJdIiqOA024wvZ373ScqFYvFg84S6kd4LFjICNZG8uruY7M+rNbshr0AWidOQWpQoD2sfg1GMUkjKjThWKm+Yyfaz7HUjHA6qwxSRRNMpnhM+4YKHFHl54tjZ+jCKCMUxtKU0Gih/p7IcaRUFgWmM8J6ola9ufif1091eO3nTCSppoIsF4UpRzpG88/RiElKNM8MwUQycysiEywx0SafignBWX15nXTchtNsuPdurXVTxFGGMziHS3DgClpwB23wgACDZ3iFN0tYL9a79bFsLVnFzCn8gfX5A1uCjbk=</latexit>
![Page 15: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/15.jpg)
RichiededipercorreretuttiicamminiInpresenzadicicliilnumerodicamminièpotenzialmenteinfinitoPerlimitareilnumerodicamminidaattraversaresirichiedanocasiditestcheesercitinoilciclo▪ 0volte,▪ esattamenteunavolta▪ piu’diunavoltaAlcunicamminiimpossibili(1245679)
1
2 3
4
5
6 7
8 9
![Page 16: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/16.jpg)
Generalitàdegliapprocci▪ rispettoallavaliditàdeirisultati▪ rispettoallecaratteristichedaprovare▪ rispettoaicostidasostenereDipendenzeeimplicazioni▪ l’applicazionedeicriterifunzionalinondipendedalcodice
▪ icriteristrutturalisiprestanoallavalutazionedellacopertura
![Page 17: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/17.jpg)
Unastrategiaditipogray-boxprevededitestareilprogrammaconoscendoirequisitiedavendounalimitataconoscenzadellarealizzazione,peresempioconoscendosolol’architetturaUn’altrastrategiagray-boxproponediprogettareiltestusandocriterifunzionaliequindidiusarelemisuredicopertura(sivedalasezione“Valutazionedeitest”)deicriteristrutturalipervalutarel’adeguatezzadeltest
![Page 18: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/18.jpg)
![Page 19: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/19.jpg)
Dobbiamo contare i pesci in un lago
![Page 20: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/20.jpg)
Contiamo i pesci nel lago Mettiamo M pesci meccanici nel lago con un numero imprecisato di pesci
Ne guardiamo N di questi N1 sono quelli meccanici
![Page 21: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/21.jpg)
Contiamo…
total =
Ne avevamo messi M meccanici Ne guardiamo N. Di questi N1 sono quelli meccanici
NN1* M
N1 : N = M : Total
![Page 22: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/22.jpg)
contiamo i bug in un programma
![Page 23: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/23.jpg)
void transduce() { #define BUFLEN 1000 char buf[BUFLEN]; int pos = 0; char inChar; int atCR = 0; while ((inChar = getchar()) != EOF ) { switch (inChar) { case LF: if (atCR) { atCR = 0; } else { emit(buf, pos); pos = 0; } break; case CR: emit(buf, pos); pos = 0; atCR = 1; break; default: if (pos >= BUFLEN-2) fail("Buffer overflow"); buf[pos++] = inChar; } } if (pos > 0) { emit(buf, pos); } }
contiamo i bug in un programma che converte il fine linea secondo le convenzioni Machintosh,
DOS, Unix.
![Page 24: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/24.jpg)
void transduce() { #define BUFLEN 1000 char buf[BUFLEN]; int pos = 0; char inChar; int atCR = 0; while ((inChar = getchar()) != EOF ) { switch (inChar) { case LF: if (atCR) { atCR = 0; } else { emit(buf, pos); pos = 0; } break; case CR: emit(buf, pos); pos = 0; atCR = 1; break; default: if (pos >= BUFLEN-2) fail("Buffer overflow"); buf[pos++] = inChar; } } if (pos > 0) { emit(buf, pos); } }
(pos => 0)
“seminiamo” un errore
![Page 25: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/25.jpg)
void transduce() { #define BUFLEN 1000 char buf[BUFLEN]; int pos = 0; char inChar; int atCR = 0; while ((inChar = getchar()) != EOF ) { switch (inChar) { case LF: if (atCR) { atCR = 0; } else { emit(buf, pos); pos = 0; } break; case CR: emit(buf, pos); pos = 0; atCR = 1; break; default: if (pos >= BUFLEN-2) fail("Buffer overflow"); buf[pos++] = inChar; } } if (pos > 0) { emit(buf, pos); } }
Troviamo l’errore con un caso di test Una linea terminata dal ritorno linea DOS
![Page 26: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/26.jpg)
Assunzione
![Page 27: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/27.jpg)
void transduce() { #define BUFLEN 1000 char buf[BUFLEN]; int pos = 0; char inChar; int atCR = 0; while ((inChar = getchar()) != EOF ) { switch (inChar) { case LF: if (atCR) { atCR = 0; } else { emit(buf, pos); pos = 0; } break; case CR: emit(buf, pos); pos = 0; atCR = 1; break; default: if (pos >= BUFLEN-2) fail("Buffer overflow"); buf[pos++] = inChar; } } if (pos > 0) { emit(buf, pos); } }
(pos => 0)
assunzione
gli errori che mettiamo sono rappresentativi di quelli che potrebbero esserci davvero
![Page 28: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/28.jpg)
DopoaveresercitatoPsuT,siverificaPcorrettorispettoaT.SivuolefareunaverificapiùprofondasullacorrettezzadiP:introducodeidifetti(piccoli,dettemutazioni)suPechiamoilprogrammamodificatoP’.QuestoP’vienedettomutante.SieseguonosuP’glistessitestdiT.Iltestdovrebberilevareglierrori.
• Seiltestnonrilevaquestierrori,allorasignificacheiltestnoneravalido.
• Selirivela,sisupponechenerivelianchealtri.Questoèunmetodopervalutarelacapacitàdiuntest,evedereseèilcasodiintrodurretestpiùsofisticati.
![Page 29: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/29.jpg)
mutazione:cambiamentosintattico(unbuginseritonelcodice)
Esempio:modifica(i<0)in(i<=0)
Unmutantevieneuccisosefalliscealmenoinuncasoditest
efficaciadiuntest=quantitàdimutantiuccisi
Latecnicasiapplicaincongiunzioneconaltricriteriditest
Nellasuaformulazioneèprevistainfattil’esistenza,oltrealprogrammadacontrollare,anchediuninsiemeditestgiàrealizzati.
![Page 30: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/30.jpg)
Ipotesi del programmatore Competente
Gli errori reali sono piccole variazioni sintattiche del programma corretto
=> Mutanti sono modelli ragionevoli dei programmi con
difetti
![Page 31: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/31.jpg)
Mettendo insieme tutte le ipotesiTests che trovano semplici difetti allora trovano
anche difetti piu’ complessi
una test suite che uccide i mutanti e’ capace anche di trovare difetti reali nel programma
![Page 32: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/32.jpg)
crp:sostituzione(replacement)dicostantepercostante▪ adesempio:da(x<5)a(x<12)ror:sostituzionedell'operatorerelazionale▪ adesempio:da(x<=5)a(x<5)vie:eliminazionedell'inizializzazionediunavariabile▪ cambiaintx=5;aintx;lrc:sostituzionediunoperatorelogico▪ Adesempioda&a|abs:inserimentodiunvaloreassoluto▪ Daxa|x|
![Page 33: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/33.jpg)
MutazioniperilC
![Page 34: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/34.jpg)
Unmutantee’invalidosenone’sintatticamentecorretto,cioe’senonpassalacompilazione,e’validoaltrimenti
Unmutantee’utilesee’validoedistinguerlodalprogrammaoriginalenone’facile,cioe’seesistesolounpiccolosottoinsiemeditestchepermettedidistinguerlodalprogrammaoriginale.
Trovaremutazionicheproducanomutantivalidieutilinone’facileedipendedallinguaggio!
MutantiValidieUtili
![Page 35: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/35.jpg)
Unmutantepuòessereequivalentealprogrammaoriginale▪ Cambiare(x<0)a(x<=0)nonhacambiatoaffattol'output:Lamutazionenonèunverodifetto
▪ Determinareseunmutanteèequivalentealprogrammaoriginalepuòesserefacileodifficile;nelpeggioredeicasièindecidibile
Oppurelasuiteditestpotrebbeessereinadeguata▪ Seilmutantepotevaesserestatoucciso,manonloera,indicaunadebolezzanellasuiteditest
![Page 36: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/36.jpg)
Questastrategiaèadottataconobiettividiversi▪ favorirelascopertadimalfunzionamentiipotizzati:interveniresulcodicepuò
esserepiùconvenienterispettoallagenerazionedicasiditestadhoc.▪ valutarel’efficaciadell’insiemeditest,controllandose“siaccorge”delle
modificheintrodottesulprogrammaoriginale.▪ cercareindicazionicircalalocalizzazionedeidifettilacuiesistenzaèstata
denunciatadaitesteseguitisulprogrammaoriginale
Usolimitatodalgrannumerodimutantichepossonoesseredefiniti,dalcostodellalororealizzazione,esoprattuttodaltempoedallerisorsenecessarieaeseguireitestsuimutantieaconfrontareirisultati
![Page 37: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/37.jpg)
Obiettivo:controllarese,dopounamodifica,ilsoftwareèregredito,secioèsianostatiintrodottideidifettinonpresentinellaversioneprecedenteallamodificaStrategia:riapplicarealsoftwaremodificatoitestprogettatiperlasuaversioneoriginaleeconfrontareirisultatiUsoinmanutenzione.Difatto,però,ilsusseguirsidiinterventidimanutenzioneadattivaesoprattuttoperfettiva(enonmonotona)rendonolabatteriaditestobsoletaUsoneiprocessidisviluppoevolutivi▪ prototipi▪ itest,soprattuttomiratiallefunzionalitàdelprodotto,sonosviluppatiinsiemeal
primoprototipoeaccompagnanol’evoluzione
▪ integrazionetop-down
![Page 38: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/38.jpg)
Rivisitazionedeicriteristrutturaliinterminidell’architetturadiunsistemainvecechedelcodicediunprogrammaBasatisuunaclassificazionedeglierroricommessinelladefinizionedelleinterazionifraimoduliErrorediformato:iparametridiinvocazioneodiritornodiunafunzionalitàsonosbagliatipernumeroopertipo▪ difettofrequente,mafortunatamentecompilatorielinkerpermettonodirilevareautomaticamente
concontrollistaticiErroredicontenuto:iparametridiinvocazioneodiritornodiunafunzionalitàsonosbagliatipervalore▪ èilcasoincuiimodulisiaspettanoargomentiilcuivaloredeverispettarebenprecisivincoli;sivada
parametrinoninizializzati(e.g.puntatorinulli)astrutturedatiinutilizzabili(e.g.unvettorenonordinatopassatoaunaproceduradiricercabinaria)
Erroredisequenzaoditempo▪ inquestocasoèsbagliatalasequenzaconcuièinvocataunaseriedifunzionalità,singolarmente
corrette;neisistemidipendentidaltempopossonoancherisultaresbagliatigliintervallitemporalitrascorsifraun’invocazioneel’altraofraun’invocazioneelacorrispondenterestituzionedeirisultati
![Page 39: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/39.jpg)
Mutanti equivalenti
TS = {TC1, TC2} TC1 = final int[] array = { 5, 9, 0, 2, 7, 3 }; insertionSort(array, 0, 6); TC2 = final int[] array2 = { 3, 1, 0, 2, 7, 3 }; insertionSort(array2, 2, 4);
public void insertionSort(int [] array, int min, int max) {} for(int i = min+1; i < max; i++) {
int x = i; int j = i-1;
for(; j >= min; j--) {
if(array[j]>array[x]) { int k = array[x];
array[x] = array[j]; array[j] = k;
x = j; } else break;
}
} }
Provide two sets of mutant operators M1 and M2 such that: 1. The mutant obtained by applying M1 is killed by TS 2. The mutant obtained by applying M2 is NOT killed by TS.
![Page 40: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/40.jpg)
![Page 41: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/41.jpg)
Questotestcasehaavutosuccessoononhafunzionato?Inutiletestareautomaticamente10.000casiditestseirisultatidevonoesserecontrollatiamano!▪ ex.JUnit:unoracolospecifico("assert")codificatoamanoinciascuncasoditest
Approcciotipico:oracolobasatosulconfrontoconvaloredioutputprevistoNonl'unicoapproccio!
![Page 42: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/42.jpg)
![Page 43: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/43.jpg)
Risultatiricavatidallespecifiche▪ specificheformali▪ specificheeseguibiliInversionedellefunzioni▪ quandol’inversaè“piùfacile”▪ avoltedisponibilefralefunzionalità▪ limitazioniperdifettidiapprossimazione
![Page 44: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/44.jpg)
Versioniprecedentidellostessocodice▪ disponibili(perfunzionalitànonmodificate)▪ provedinonregressioneVersionimultipleindipendenti▪ programmipreesistenti(back-to-back)▪ sviluppateadhoc▪ semplificazionedeglialgoritmi▪ magaripocoefficientimacorrette
![Page 45: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/45.jpg)
Semplificazionedeidatid’ingresso▪ provarelefunzionalitàsudatisemplici▪ risultatinotiocalcolabiliconaltrimezzi▪ ipotesidicomportamentocostantePartiredall’outputetrovarel’input▪ Peresempiopertestareunalgoritmodiordinamentoprendereunarrayordinato(outputatteso)erimescolarloperottenereuninput
![Page 46: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/46.jpg)
Semplificazionedeirisultati▪ accontentarsidirisultatiplausibili▪ tramitevincolifraingressieuscite▪ tramiteinvariantisulleuscite
![Page 47: Sono criteri per l’individuazione dei casi di input che …didawiki.cli.di.unipi.it/lib/exe/fetch.php/informatica/...vengono mai esercitati dai test. I criteri di control flow testing](https://reader034.vdocuments.pub/reader034/viewer/2022042915/5f521d364c6aa67b2520b0e5/html5/thumbnails/47.jpg)
Cap12-16-17▪ SoftwareTestingandAnalysis:Process,PrinciplesandTechniques-
Inparticolare:▪ Cap12:tuttotranne12.6▪ Cap16:tuttotranne16.5▪ Cap17:indettagliosolo17.5▪ MauroPezzèeMichalYoung