Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript...
-
Upload
universita-degli-studi-di-trieste -
Category
Education
-
view
120 -
download
1
description
Transcript of Progetto e realizzazione di uno strumento per la modifica sistematica di codice JavaScript...
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
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
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
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
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
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
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
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
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
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
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
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
Introduzione Strategia Risultati Sviluppi futuri GP AST ANTLR Mutazioni Caso studio
Esempio di AST
Dennis Morello Modifica sistematica di codice JavaScript
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Introduzione Strategia Risultati Sviluppi futuri
Grazie!
Dennis Morello Modifica sistematica di codice JavaScript