Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript...

32
Introduzione Strategia Risultati Sviluppi futuri Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing Universit` a degli Studi di Trieste Facolt` a di Ingegneria Corso di Laurea Triennale in Ingegneria dell’Informazione LAUREANDO RELATORE Dennis Morello prof. Alberto Bartoli CORRELATORI prof. Eric Medvet dott. Andrea De Lorenzo Dennis Morello Modifica sistematica di codice JavaScript

description

Presentazione PDF della tesi di laurea

Transcript of Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript...

Page 1: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri

Progetto e realizzazione di uno strumentoper la modifica sistematica di codice

JavaScript finalizzato al testing

Universita degli Studi di TriesteFacolta di Ingegneria

Corso di Laurea Triennale in Ingegneria dell’Informazione

LAUREANDO RELATORE

Dennis Morello prof. Alberto Bartoli

CORRELATORI

prof. Eric Medvet

dott. Andrea De Lorenzo

Dennis Morello Modifica sistematica di codice JavaScript

Page 2: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Scenario Idea Obiettivo

Scenario

Modifiche automatiche e sistematiche alcodice sorgente di un programma

Utile in applicazioni quali la correzione automatica di bug

Dennis Morello Modifica sistematica di codice JavaScript

Page 3: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Scenario Idea Obiettivo

Scenario

Modifiche automatiche e sistematiche alcodice sorgente di un programma

Utile in applicazioni quali la correzione automatica di bug

Dennis Morello Modifica sistematica di codice JavaScript

Page 4: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Scenario Idea Obiettivo

Idea

Approccio evoluzionistico:

generazione di mutazioni casuali al codice originale

valutazione dei risultati e scelta della soluzione migliore

Dennis Morello Modifica sistematica di codice JavaScript

Page 5: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Scenario Idea Obiettivo

Obiettivo della tesi

Obiettivo

Misurare l’impatto prodotto da una modifica al codice sorgente diun programma sul suo output

Ma in che modo?

Dennis Morello Modifica sistematica di codice JavaScript

Page 6: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Scenario Idea Obiettivo

Obiettivo della tesi

Obiettivo

Misurare l’impatto prodotto da una modifica al codice sorgente diun programma sul suo output

Ma in che modo?

Dennis Morello Modifica sistematica di codice JavaScript

Page 7: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

Genetic Programming

Una delle strategie per generare codice sorgente in modoautomatico e facendo ricorso a Genetic Programming (GP):

e una tecnica evolutiva che genera tanti programmi in modoautomatico

ciascuno di essi viene successivamente valutato

Dennis Morello Modifica sistematica di codice JavaScript

Page 8: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

Genetic Programming

Una delle strategie per generare codice sorgente in modoautomatico e facendo ricorso a Genetic Programming (GP):

e una tecnica evolutiva che genera tanti programmi in modoautomatico

ciascuno di essi viene successivamente valutato

Dennis Morello Modifica sistematica di codice JavaScript

Page 9: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

Genetic Programming

Una delle strategie per generare codice sorgente in modoautomatico e facendo ricorso a Genetic Programming (GP):

e una tecnica evolutiva che genera tanti programmi in modoautomatico

ciascuno di essi viene successivamente valutato

Dennis Morello Modifica sistematica di codice JavaScript

Page 10: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

Alberi

In GP i programmi vengono rappresentati tramite alberi

Su di essi vengono eseguite alcune operazioni che nemodificano la struttura

Sono stati considerati solo scambi casuali tra nodi dell’albero

Dennis Morello Modifica sistematica di codice JavaScript

Page 11: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

Abstract Syntax Tree

La struttura ad albero piu comoda per fare modifiche al listato diun programma e l’AST.

AST

Un Abstract Syntax Tree e un albero che rappresenta la strutturasintattica di un codice sorgente

Dennis Morello Modifica sistematica di codice JavaScript

Page 12: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

Abstract Syntax Tree

La struttura ad albero piu comoda per fare modifiche al listato diun programma e l’AST.

AST

Un Abstract Syntax Tree e un albero che rappresenta la strutturasintattica di un codice sorgente

Dennis Morello Modifica sistematica di codice JavaScript

Page 13: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

Esempio di AST

Dennis Morello Modifica sistematica di codice JavaScript

Page 14: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

ANTLR

ANTLR (ANother Tool for Language Recognition) e la libreriasoftware impiegata in questo lavoro per generare AST a partire dal

codice sorgente di un programma

http://www.antlr.org

Dennis Morello Modifica sistematica di codice JavaScript

Page 15: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

Mutazioni dell’AST

Modifica AST = mutazione:

scelta casuale di due nodi dell’AST

tentativo di scambio di l’uno con l’altro

scambio sintatticamente legittimo ⇒ mutazione accettatascambio sintatticamente non legittimo ⇒ mutazione rifiutata;si ricomincia da capo

conversione da AST a codice JavaScript

Dennis Morello Modifica sistematica di codice JavaScript

Page 16: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

Mutazioni dell’AST

Modifica AST = mutazione:

scelta casuale di due nodi dell’AST

tentativo di scambio di l’uno con l’altro

scambio sintatticamente legittimo ⇒ mutazione accettatascambio sintatticamente non legittimo ⇒ mutazione rifiutata;si ricomincia da capo

conversione da AST a codice JavaScript

Dennis Morello Modifica sistematica di codice JavaScript

Page 17: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

Caso studio

Caso studio: funzione BubbleSort in JavaScript

Generazione mutazioni e analisi degli output

Differenza tra risultato corretto e generato dal programma τ

Dennis Morello Modifica sistematica di codice JavaScript

Page 18: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio

Indice di prestazione (2)

Indice di prestazione

Kτ =1

n

n∑r=1

kr

kr : distanza tra due vettori

n : numero di vettori

Dennis Morello Modifica sistematica di codice JavaScript

Page 19: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Esperimenti S1 S2 Confronto Commenti

Esperimenti eseguiti

Sono stati generati due set di programmi mutati S1 e S2:

S1 contiene 1000 programmi

S2 contiene 5000 programmi

Per ciascun set (j = {1, 2}):

Esecuzione dei τi ∈ Sj

Calcolo dei rispettivi indici Kτi

Dennis Morello Modifica sistematica di codice JavaScript

Page 20: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Esperimenti S1 S2 Confronto Commenti

Risultati ottenuti con S1

Numero medio di tentativi di scambio/mutazione: 5,14

Programmi con errori a runtime: 968

Programmi terminate correttamente: 31

Programmi con cicli infiniti: 1

Programmi che hanno prodotto vettori: 2

Indice di prestazione di τ1: 6,29Indice di prestazione di τ2: 6,30

Dennis Morello Modifica sistematica di codice JavaScript

Page 21: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Esperimenti S1 S2 Confronto Commenti

Risultati ottenuti con S1

Numero medio di tentativi di scambio/mutazione: 5,14

Programmi con errori a runtime: 968

Programmi terminate correttamente: 31

Programmi con cicli infiniti: 1

Programmi che hanno prodotto vettori: 2Indice di prestazione di τ1: 6,29Indice di prestazione di τ2: 6,30

Dennis Morello Modifica sistematica di codice JavaScript

Page 22: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Esperimenti S1 S2 Confronto Commenti

Grafico riassuntivo

0

100

200

300

400

500

600

700

800

900

1000

Non eseguiti Eseguiti Cicli infiniti

Dennis Morello Modifica sistematica di codice JavaScript

Page 23: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Esperimenti S1 S2 Confronto Commenti

Risultati ottenuti con S2

Numero medio di tentativi di scambio/mutazione: 25,92

Programmi con errori a runtime: 4923

Programmi terminate correttamente: 49

Programmi con cicli infiniti: 28

Programmi che hanno prodotto vettori: 0

Dennis Morello Modifica sistematica di codice JavaScript

Page 24: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Esperimenti S1 S2 Confronto Commenti

Grafico riassuntivo

0

500

1000

1500

2000

2500

3000

3500

4000

4500

5000

Non eseguiti Eseguiti Cicli infiniti

Dennis Morello Modifica sistematica di codice JavaScript

Page 25: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Esperimenti S1 S2 Confronto Commenti

Confronto dei risultati

S1 S2

Programmi coinvolti 1000 5000

Media scambi/mutazione 5,14 25,92

Programmi con errori a runtime 96,80% 98,46%Programmi eseguite interamente 3,10% 0,98%

Programmi con cicli infiniti 0,10% 0,56%

Programmi con output vettore 0,20% 0,00%

Dennis Morello Modifica sistematica di codice JavaScript

Page 26: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Esperimenti S1 S2 Confronto Commenti

Commenti

Il set S1 ha prodotto risultati migliori rispetto al set S2

Alcune considerazioni:

piccole mutazioni all’AST producono grandi modifiche alcodice sorgente ⇒ ogni modifica all’AST e altamentedistruttiva

si pensi allo scambio tra la prima istruzione e lo statement

return

la granularita della conversione codice → AST e molto fine⇒ maggiore probabilita di errori a runtime

Dennis Morello Modifica sistematica di codice JavaScript

Page 27: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Esperimenti S1 S2 Confronto Commenti

Commenti

Il set S1 ha prodotto risultati migliori rispetto al set S2

Alcune considerazioni:

piccole mutazioni all’AST producono grandi modifiche alcodice sorgente ⇒ ogni modifica all’AST e altamentedistruttiva

si pensi allo scambio tra la prima istruzione e lo statement

return

la granularita della conversione codice → AST e molto fine⇒ maggiore probabilita di errori a runtime

Dennis Morello Modifica sistematica di codice JavaScript

Page 28: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri Esperimenti S1 S2 Confronto Commenti

Commenti

Il set S1 ha prodotto risultati migliori rispetto al set S2

Alcune considerazioni:

piccole mutazioni all’AST producono grandi modifiche alcodice sorgente ⇒ ogni modifica all’AST e altamentedistruttiva

si pensi allo scambio tra la prima istruzione e lo statement

return

la granularita della conversione codice → AST e molto fine⇒ maggiore probabilita di errori a runtime

Dennis Morello Modifica sistematica di codice JavaScript

Page 29: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri

Sviluppi futuri

Introduzione di altre mutazioni degli AST

⇒ Cross over, inserimento/rimozione di nodi, ...

Aumento del numero di programmi generati

⇒ Probabile miglioramento degli indici di prestazione

Supporto di altri linguaggi di programmazione

⇒ Maggiore compatibilita con le esigenze pratiche

Dennis Morello Modifica sistematica di codice JavaScript

Page 30: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri

Sviluppi futuri

Introduzione di altre mutazioni degli AST

⇒ Cross over, inserimento/rimozione di nodi, ...

Aumento del numero di programmi generati

⇒ Probabile miglioramento degli indici di prestazione

Supporto di altri linguaggi di programmazione

⇒ Maggiore compatibilita con le esigenze pratiche

Dennis Morello Modifica sistematica di codice JavaScript

Page 31: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri

Sviluppi futuri

Introduzione di altre mutazioni degli AST

⇒ Cross over, inserimento/rimozione di nodi, ...

Aumento del numero di programmi generati

⇒ Probabile miglioramento degli indici di prestazione

Supporto di altri linguaggi di programmazione

⇒ Maggiore compatibilita con le esigenze pratiche

Dennis Morello Modifica sistematica di codice JavaScript

Page 32: Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript finalizzato al testing

Introduzione Strategia Risultati Sviluppi futuri

Grazie!

Dennis Morello Modifica sistematica di codice JavaScript