Barletta Massimiliano Gazzi Renzo

Slides:



Advertisements
Presentazioni simili
1 La Standard Template Library vettori, liste, mappe, …. find, replace, reverse, sort, …. puntatori intelligenti La libreria standard STL e una libreria.
Advertisements

Algoritmi e Strutture Dati
Tecniche e Linguaggi di Programmazione
Puntatori in C e C++.
Specifiche Algebriche
Algebra parziale con predicati
Type Checking (1° parte)
Generalità Linguaggio e Macchina Astratta
1 Strutture dati nel supporto a run time. 2 Entità presenti quando un programma va in esecuzione §programmi dutente (compilati) §routines del supporto.
Lez. 121 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Progettazione.
Algoritmi in C++ (1) da completare
Interpretazione Astratta
Dispatch.
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
Intelligenza Artificiale 1 Gestione della conoscenza lezione 8
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Liste.
Sistemi basati su conoscenza Conoscenza e ragionamento Prof. M.T. PAZIENZA a.a
Algoritmi e strutture Dati - Lezione 7
Il problema del cammino minimo tra 2 nodi in un grafo con archi privati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Capitolo 4 Ordinamento: Selection e Insertion Sort Algoritmi e Strutture Dati.
Allocazione dinamica della memoria
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Testing e Debugging.
eliana minicozzi linguaggi1a.a lezione2
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Modello dati ALBERO Albero: Albero: insieme di punti chiamati NODI e linee chiamate EDGES EDGE: linea che unisce due nodi distinti Radice (root): in una.
Heap allocation e garbage collector di Oberon Algoritmo Quick Fit e garbage collector mark and sweep.
Semantica di Tarski.
nome: sequenza di caratteri usata per denotare un oggetto
Puntatori - Cenni Nicola Fanizzi Corso di Programmazione C.d.L. in Informatica DIB - Università degli Studi di Bari.
memoria gestita staticamente:
Ingegneria della conoscenza e sistemi esperti Dario Bianchi, 1999 Conoscenza e ragionamento Logica dei predicati del primo ordine.
Ingegneria della conoscenza e sistemi esperti Dario Bianchi, 1999 Logica dei predicati del primo ordine.
Intelligenza Artificiale - AA 2001/2002 Logica formale (Parte 2) - 1 Intelligenza Artificiale Breve introduzione alla logica classica (Parte 2) Marco Piastra.
Fondamenti di informatica Linguaggio C Main Program: Architettura di un PC Diagrammi di flusso Linguaggio C.
Array a un dimensione : vettori
Strutture dati per insiemi disgiunti
Lo sviluppo del software e i linguaggi di programmazione
Capitolo 3 Strutture dati elementari Algoritmi e Strutture Dati Camil Demetrescu, Irene Finocchi, Giuseppe F. Italiano.
Complessità di un algoritmo
Algoritmi e Strutture dati a.a. 2012/2013 Informazioni sul corso Dr Maria Federico.
ALGORITMI a.
Algoritmi di Ordinamento
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Algoritmi CHE COS’è UN ALGORITMO di ORDINAMENTO?
Definizione di un algoritmo
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Implementazione di dizionari Problema del dizionario dinamico Scegliere una struttura dati in cui memorizzare dei record con un campo key e alcuni altri.
GLI ALGORITMI VISIBILE SUL BLOG INFORMATICA ANNO SCOLASTICO 2013 / 2014 GABRIELE SCARICA 2°T.
YOUR LOGO Università degli Studi di Roma "Tor Vergata" Facoltà di Ingegneria «Project accounting and data management» 2012 Summer School H-DATA, ENEA –
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
TECNICA DIVIDE ET IMPERA
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Algoritmi e Strutture Dati Strutture Dati Elementari.
Paola Disisto, Erika Griffini, Yris Noriega.  Insieme ordinato di operazioni non ambigue ed effettivamente computabili che, quando eseguito, produce.
Ingegneria del software Modulo 1 -Introduzione al processo software Unità didattica 3 – Modelli di fase d’analisi Ernesto Damiani Università degli Studi.
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
AOT Lab Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Rappresentazione della Conoscenza e Ragionamento.
Specifiche Algebriche Introduzione Versione 1.0 Gianna Reggio
Capitolo 8 Code con priorità Algoritmi e Strutture Dati.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
GLI ALGORITMI DI ORDINAMENTO
Algoritmi e Strutture Dati HeapSort. Select Sort: intuizioni L’algoritmo Select-Sort  scandisce tutti gli elementi dell’array a partire dall’ultimo elemento.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

Barletta Massimiliano 802646 Gazzi Renzo 802479 Putting Static Analysis to Work for Verification: A Case Study T. Lev-Ami, T. Reps, M. Sagiv, R. Wilhelm

Obiettivi Provare la correttezza parziale di programmi corretti Scoprire, individuare e diagnosticare bugs in programmi non corretti IDEA: Algoritmo che analizza procedure di ordinamento che manipolano liste Cenni sul prototipo: TVLA

Introduzione (I) Si vuole dimostrare che: versioni corrette di bubble-sort e insertion-sort producono liste ordinate La proprietà della lista “essere ordinata” è mantenuta da queste operazioni: Inserzione di un elemento Cancellazione di un elemento Merge di due liste ordinate Inversione di una lista ordinata

Introduzione (II) Dimostriamo inoltre che: E’ possibile creare algoritmi di analisi sufficientemente precisi tale da poter stabilire la correttezza parziale attraverso l’informazione contenuta in “state-descriptors” che si ottengono con analisi statica

Shape Analysis (I) Per i nostri obiettivi si utilizza una versione estesa di Shape Anaysis (Parametric Shape Analysis via 3-valued logic): Determina l’informazione circa le strutture dati allocate nello heap alle quali le variabili possono far riferimento (strutture dati allocate dinamicamente) Offre un metodo per generare diversi tools di program analysis (Prototipo TVLA). Per i nostri esempi “shape-descriptors” mantengono un’informazione relativa all’ordinamento rispetto al campo valore di elementi vicini della lista.

Shape Analysis (II) Difficoltà: Aggiornamenti tramite puntatori Es. x  next = y Allocazione dinamica della memoria Non è noto un limite superiore alla dimensione delle strutture presenti a run time.

Dichiarazione tipo lista Ordinamento

2-valued logical structure Strutture logiche per rappresentare stati di memoria. Una struttura logica consiste di: Un universo di elementi (heap cells); Una famiglia di predicati base. Una struttura logica a 2 valori S è l’insieme di nodi (individuals) chiamati universo (US) e l’interpretazione per un insieme di simboli predicati su questo universo. L’interpretazione di un simbolo predicato p in S è denotato con pS. Per ciascun predicato p di arietà k, pS è una funzione PS :(US) k  {0,1}

Core e Instrumentation L’insieme dei simboli predicati è diviso in due parti disgiunte: Core: parte della semantica a puntatori. Memorizzano proprietà atomiche dello stato di memoria; Intrumentation: memorizzano proprietà derivate. Hanno una formula in termini di predicati core.

Core predicates (I) x(u): vale 1 se una variabile x punta ad un elemento della lista rappresentato da u. Corrisponde all’arco che va da x all’elemento. In assenza dell’arco x(u)=0; n(u1,u2): vale 1 se u2 è successore di u1 o detto in altro modo se la componente n di u1 punta a u2; dle(u1,u2): vale 1 se il valore d di u1 <= valore d di u2.

inOrder[dle,n] inROrder[dle,n] Core predicates (II) dle x u0 r[n,x] inOrder[dle,n] u1 inROrder[dle,n] u2 u3 inOrder[dle,n] inROrder[dle,n] n x

Instrumentation predicates (I) r[n,x](u): vale 1 se un elemento della lista è raggiungibile da x possibilmente usando una sequenza di accessi attraverso la componente n dell’elemento c[n](u): vale 1 se l’elemento fa parte di una lista ciclica is[n](u): vale 1 se più puntatori fanno riferimento all’elemento

Instrumentation predicates (II) Per rappresentare l’ordinamento degli elementi sono stati introdotti due ulteriori instrumentation predicates: inOrder[dle,n](u): vale 1 se il valore del campo d è minore o uguale a quello dei successori inROrder[dle,n](u): vale 1 se il valore del campo d è maggiore o uguale a quello dei predecessori

Instrumentation predicates (III) dle x u0 r[n,x] inOrder[dle,n] u1 inROrder[dle,n] u2 u3 inOrder[dle,n] inROrder[dle,n] n x

3-valued logical structure In maniera equivalente alla 2-valued logical structure esposta precedentemente, possiamo definire una 3-valued logical structure. Utilizziamo strutture logiche a 3 valori per rappresentare stati di memoria presenti durante l’esecuzione pS: (US)K  {0,1,1/2} 1 e 0 sono valori definiti (vero e falso) 1/2 è indefinito

Rappresentazione conservativa (I) Sia S# una struttura a due valori, S una struttura a 3 valori e sia f una funzione suriettiva: f: US#  US diciamo che f include S# in S per ogni predicato p di arietà k e u1, …,uk appartenenti a US# sia se pS#( u1, …,uk)= pS(f(u1), …,(uk)) o pS(f(u1), …,(uk))=1/2. diciamo che S rappresenta tutte le strutture a 2 valori che possono essere “embedded” in esso per mezzo di qualche funzione f. S quindi può rappresentare in maniera compatta molte strutture dati.

Summary nodes Nodi in strutture 3-valued che possono rappresentare più nodi di una struttura 2-valued. Sm è il predicato che usiamo per rappresentare questa informazione. Dato un summary node w, - Sm(w)=1/2 indica che il nodo può rappresentare più di un nodo della struttura a 2 valori. - Sm(w)=0 indica che w rappresenta (con certezza) un solo nodo. u0 x u123

Rappresentazione conservativa (II) u0 x u123 u0 u1 u2 u3 x

Formule Permettono di osservare le proprietà delle strutture: es. v: x(u)  y(u) x y u0 = 1 x y u0 u1 u2 u3

Formule Esempi di applicazione delle formule L’elemento puntato da x è diverso da NULL? u: x(u) Le variabili x ed y puntano allo stesso elemento? u: x(u)  y(u) L’elemento a cui fa riferimento la variabile x ha un riferimento a se stesso? (riferimento ciclico) u : x(u)  n(u,u)

Formule Definizione: Una formula Ф è potenzialmente soddisfatta su una struttura S se esiste un assegnamento per cui Ф è valutata 1 o 1/2 su S

Il risultato finale è dunque 1  1/2 = 1/2 Esempio Valutando la formula: a: (x(a)  n*(a,b) u0 raggiungibile da x per cui la formula sarà valutata 1 u (summary node) non è puntato direttamente da x; il nodo rappresentato da u può o non può essere raggiunto da x, per cui 1/2 Il risultato finale è dunque 1  1/2 = 1/2 Ma r[n,x](u) = 1 che è piu’ preciso. L’informazione memorizzata per un predicato di tipo instrumentation può essere più precisa del risultato della valutazione della formula. (Instrumentation principle)

Predicate-update formulae Ad ogni riga di codice è associata una predicate-update formulae che specifica come cambia il valore di un predicato quando quel codice viene eseguito, cioè i cambiamenti delle strutture dati in memoria Le p-u formulae sono date e ne hanno dimostrato la correttezza

Procedura parzialmente corretta Definizione Una procedura di ordinamento è parzialmente corretta, se ogni volta che termina, la lista in output che essa produce è in ordine non decrescente

Valutazione della correttezza (I) Ordinamenti con liste Per ogni u: r[n,x](u)  inOrder[dle,n](u) (1) Se la formula è valutata 1 allora i nodi raggiungibili da x devono essere in ordine non decrescente. PROBLEMA: Una procedura di ordinamento che restituisce sempre NULL sarà soddisfatta. Per evitare ciò, è necessario che sia soddisfatta anche una seconda proprietà: la lista in output deve essere una permutazione della lista in input. Utilizziamo un altro predicato: orig[n,x](u): indelebile marcatore sugli elementi inizialmente raggiungibili da x.

Valutazione della correttezza (II) Per ogni u: orig[n,x](u)<->r[n,x](u) (2) Se la formula è valutata 1 allora gli elementi raggiungibili da x dopo l’esecuzione della procedura sono esattamente gli stessi di quelli raggiungibili all’inizio della procedura, e di conseguenza la procedura effettua una permutazione degli elementi Nota: in un programma può essere paragonato ad una variabile ausiliaria utilizzata per denotare l’iniziale valore di un’altra variabile

Esempio: Insertion_Sort (I) Le strutture descrivono tutti i possibili stati di memoria in cui la variabile x punta ad una lista aciclica. Le formule descritte precedentemente sono valutate 1 per cui la procedura insertion_sort agisce correttamente su tutti gli input accettabili

Compile-time debugging of programs Dimostriamo come l’output dell’algoritmo, quando applicato a programmi non corretti, provveda a dare informazioni utili per catturare bugs a tempo di compilazione. Comuni errori: dimenticare il confronto degli elementi agli estremi lista ordinata non secondo l’ordine specificato

Esempio: Insertion_Sort (II) Le due immagini rappresentano lo stato iniziale (sopra) e quello finale (sotto) di una procedura di insertion_sort ERRATA. Non considera infatti il primo elemento della lista

Esempio: Insertion_Sort (III) Errata Corretta Questa struttura offre i seguenti indizi circa la natura del bug: inOrder[dle,n]=1 per sn, significa che molti elementi della lista potrebbero non essere nell’ordine corretto. inOrder[dle,n]=1/2 per il primo nodo, indica che può essere o non essere nella posizione corretta rispetto al resto degli elementi della lista.

Prototipo: TVLA Versione del sistema in JAVA Correntemente: Gestisce programmi che usano puntatori Supporta solo analisi intraprocedurale, cioè non sono permesse chiamate a funzioni o procedure Non supportati casting e aritmetica dei puntatori Analizza solo piccoli programmi Per questa analisi è stato utilizzato questo programma

Correttezza parziale Per dimostrare la correttezza parziale di operazioni su ADT, l’utente deve fornire al TVLA: il grafo di flusso della procedura (control flow) un insieme di strutture 3-valued che caratterizzano gli input accettabili della procedura (input validi) formule che caratterizzano gli output accettabili di una procedura corretta (formule)

Work in progress Possibili sviluppi per generare automaticamente formule di predicate-update corrette per instrumentation predicates Estendere TVLA, superando le limitazioni attuali specie sulla dimensione dei programmi oggi supportati Estendere questo tipo di analisi a qualsiasi tipo di struttura non limitandosi ad un particolare datatype