Verifica del codice con Interpretazione Astratta

Documenti analoghi
Verifica parte IIA. Test (o analisi dinamica) Mancanza di continuità. Esempio

Interpretazione astratta

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Stimare il WCET Metodo classico e applicazione di un algoritmo genetico

Generazione Automatica di Asserzioni da Modelli di Specifica

La selezione binaria

Automazione Industriale (scheduling+mms) scheduling+mms.

Introduzione ai Metodi Formali

JAIL: Javacard Abstract Interpretation-based Lifeguard

Testing: basato su analisi dinamica del codice. Metodi Formali: basato su analisi statica del codice.

Il calcolatore oggi : UN SISTEMA DI ELABORAZIONE

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

INFORMATICA 1 L. Mezzalira

Piano di gestione della qualità

Gli strumenti di simulazione per lo sviluppo di sistemi elettronici automotive

Concetto di Funzione e Procedura METODI in Java

IL SOFTWARE SECONDO LA NORMA UNI EN ISO :2008 (IIA PARTE) 1

Un esempio di applicazione della programmazione lineare intera all ingegneria del software: stima del worst-case execution time di un programma

Collaudo e qualità del software Quali test eseguire

Fasi di creazione di un programma

FONDAMENTI di INFORMATICA L. Mezzalira

Firenze, 09/06/2014 DECISIONE 2012/88/UE. Novità e proposte di modifica

Protezione. Protezione. Protezione. Obiettivi della protezione

Concetti di base di ingegneria del software

I metodi formali nel processo di sviluppo del software

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Corso di Linguaggi di Programmazione

Variabili e tipi di dato

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Rational Unified Process Introduzione

con ANTLR tesi di laurea Anno Accademico Relatore Ch.mo prof. Porfirio Tramontana Candidato Fabio Canova Matr

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Introduzione. Informatica B. Daniele Loiacono

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

TECNICHE DI SIMULAZIONE

Centro Servizi Territoriali (CST) Asmenet Calabria

Esempi di errori/difetti. algoritmi sintassi calcolo e precisione documento stress capacità ricovery sistema hardware e software standard e procedure

Ciclo di Vita Evolutivo

Idee guida. Finite State Machine (1) Un automa a stati finiti è definito da una 5- pla: FSM = <Q,,, q0, F>, dove: Finite State Machine (2)

dall argomento argomento della malloc()

IL PROCESSO DI FABBRICAZIONE (sviluppo nuovo prodotto)

ALGEBRA DELLE PROPOSIZIONI

Soluzione dell esercizio del 2 Febbraio 2004

ali e non funzionali con priorità (high, medium, low) Use Case con un Activity Diagram o uno State Diagr ram

Elementi di Informatica e Programmazione

Business Process Management

Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica. Ingegneria del Software. La fase di Analisi

Esempi di algoritmi. Lezione III

I Sistemi Informativi

Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013

Introduzione all Information Retrieval

Linguaggi e Paradigmi di Programmazione

Imparare a progettare il miglioramento. Corso di Mappatura e Analisi dei Processi Aziendali. Piano didattico 2015

Cenni su algoritmi, diagrammi di flusso, strutture di controllo

Realizzazione di un Tool per l iniezione automatica di difetti all interno di codice Javascript

Architetture Applicative

Progettazione di Basi di Dati

Fasi del ciclo di vita del software (riassunto) Progetto: generalità. Progetto e realizzazione (riassunto)

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Alessandra Raffaetà. Basi di Dati

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

ATEX ed Ambienti Confinanti DCS Safety System Sistemi di Sicurezza e Controllo in ambienti a rischio esplosione

Fondamenti di Informatica 2. Le operazioni binarie

Elementi di semantica operazionale

Fare Efficienza Energetica attraverso l automazione degli edifici

Semantica Assiomatica

I PROBLEMI ALGEBRICI

Esercizio 1: trading on-line

LINGUAGGI DI PROGRAMMAZIONE

1. Limite finito di una funzione in un punto

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Dispensa di Informatica I.1

Il tipo di dato astratto Pila

Base di dati e sistemi informativi

Calcolatori: Algebra Booleana e Reti Logiche

Metodologia di monitoraggio Impianti fotovoltaici

Allocazione dinamica della memoria - riepilogo

Sottoprogrammi: astrazione procedurale

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Linguaggi per COMUNICARE. Il linguaggio è un sistema codificato di segni che consente la comunicazione, intesa come scambio di informazioni

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 9 Settembre 2015

Funzioni. Il modello console. Interfaccia in modalità console

Verifica e validazione della qualità del sw

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Corso di Psicometria Progredito

Algoritmi. Maurizio Palesi. Maurizio Palesi 1

Transcript:

Verifica del codice con Interpretazione Astratta Daniele Grasso grasso@dsi.unifi.it grasso.dan@gmail.com Università di Firenze, D.S.I., Firenze, Italy December 15, 2009 D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 1 / 40

Sommario 1 Background Safety Critical System EN 50128 Sfida Attuale 2 Abstract Interpretation Abstract Interpretation PolySpace Esempio 3 Analisi Dinamica Vs PolySpace Tool CANTATA Esempio 4 Conclusioni D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 2 / 40

Background Safety Critical System Background Safety Critical System Un sistema è detto safety critical quando un suo errato funzionamento può provocare danni più o meno gravi a cose e persone che ne fanno parte o che lo circondano. Sviluppo guidato da standard internazionali: Functional Safety of electrical/electronic/programmable electronic safety related system (IEC 61508) Railway applications - Communication, signalling and processing system - Software for railway control and protection systems (EN 50128) Software Considerations in Airborne Systems and Equipment Certification (DO-178)... D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 3 / 40

Background EN 50128 EN 50128 Standard per applicazioni ferroviarie. Modello di sviluppo del software Requirements Architecture System Level Validation Integration Requirements Architecture Software Level Validation Integration Design Test Implementation Software Module Level D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 4 / 40

Background EN 50128 EN 50128 Tecniche consigliate per la verifica del software HR Higly Recommended R Recommended D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 5 / 40

Background EN 50128 EN 50128 Tecniche consigliate per la verifica del software FORMAL PROOF HR Higly Recommended R Recommended D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 6 / 40

Background EN 50128 EN 50128 Tecniche consigliate per la verifica del software STATIC ANALYSIS HR Higly Recommended R Recommended D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 7 / 40

Background EN 50128 EN 50128 Tecniche consigliate per la verifica del software DYNAMIC ANALYSIS AND TESTING HR Higly Recommended R Recommended D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 8 / 40

Background EN 50128 Metodi Formali I metodi formali sono tecniche rigorose basate su formalismi matematici per la specifica e la verifica del software. Il model checking è una tecnica di verifica formale. Fase di design (NuSMV, Spin,...) Fase di implementazione (CBMC, PolySpace) D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 9 / 40

Background EN 50128 Model Checking Osservazione Se il modello descrive tutti i possibili comportamenti del sistema, non è sufficiente la verifica della sua correttezza? D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 10 / 40

Background EN 50128 Analisi Statica Tecniche di analisi statica segnalate nella EN 50128 D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 11 / 40

Background EN 50128 Analisi Statica Tecniche di analisi statica segnalate nella EN 50128 CONTROL FLOW ANALYSIS D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 12 / 40

Background EN 50128 Analisi Statica Tecniche di analisi statica segnalate nella EN 50128 DATA FLOW ANALYSIS D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 13 / 40

Background EN 50128 Analisi Dinamica Tecniche di analisi dinamica segnalate nella EN 50128 D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 14 / 40

Background EN 50128 Analisi Dinamica Tecniche di analisi dinamica segnalate nella EN 50128 TEST CASE EXECUTION FROM BOUNDARY VALUE ANALYSIS D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 15 / 40

Background EN 50128 Analisi Dinamica Tecniche di analisi dinamica segnalate nella EN 50128 STRUCTURED BASE TESTING D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 16 / 40

Background Sfida Attuale Sfida Attuale La dimensione dei software è notevolmente aumentata Aumento delle performance hardware Progettazione di sistemi sempre più complessi Uso di generatori automatici di codice... Sempre più difficile verificare l assenza di errori nel codice con l uso delle tradizionali tecniche di analisi: simulazioni, test, code review. Servono tecniche alternative. D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 17 / 40

Background Sfida Attuale Sfida Attuale La dimensione dei software è notevolmente aumentata Aumento delle performance hardware Progettazione di sistemi sempre più complessi Uso di generatori automatici di codice... Sempre più difficile verificare l assenza di errori nel codice con l uso delle tradizionali tecniche di analisi: simulazioni, test, code review. Servono tecniche alternative. D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 17 / 40

Abstract Interpretation Abstract Interpretation Abstract Interpretation Teoria dell Approssimazione di insiemi di oggetti ed operazioni Analisi della semantica a diversi livelli di astrazione Semantica di un programma E una descrizione matematica formale che definisce tutte le possibili esecuzioni del programma Semantica di un linguaggio di programmazione Definisce formalmente la semantica di tutti i possibili programmi scrivibili nel linguaggio di programmazione D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 18 / 40

Abstract Interpretation Abstract Interpretation Abstract Interpretation Teoria dell Approssimazione di insiemi di oggetti ed operazioni Analisi della semantica a diversi livelli di astrazione Semantica di un programma E una descrizione matematica formale che definisce tutte le possibili esecuzioni del programma Semantica di un linguaggio di programmazione Definisce formalmente la semantica di tutti i possibili programmi scrivibili nel linguaggio di programmazione D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 18 / 40

Abstract Interpretation Abstract Interpretation Abstract Interpretation Teoria dell Approssimazione di insiemi di oggetti ed operazioni Analisi della semantica a diversi livelli di astrazione Semantica di un programma E una descrizione matematica formale che definisce tutte le possibili esecuzioni del programma Semantica di un linguaggio di programmazione Definisce formalmente la semantica di tutti i possibili programmi scrivibili nel linguaggio di programmazione D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 18 / 40

Abstract Interpretation Abstract Interpretation Abstract Interpretation Semantica concreta del programma (descrive tutti i possibili comportamenti) Dominio Astratto che modella solo alcune proprietà delle computazioni concrete Semantica Astratta che verifica le proprietà del programma nel dominio astratto Idea La verifica che la semantica del programma soddisfi la sua specifica può essere effettuata a dei livelli di astrazione in cui vengono eliminati fattori irrilevanti e viene quindi ridotta la complessità del problema D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 19 / 40

Abstract Interpretation Abstract Interpretation Abstract Interpretation Semantica concreta del programma (descrive tutti i possibili comportamenti) Dominio Astratto che modella solo alcune proprietà delle computazioni concrete Semantica Astratta che verifica le proprietà del programma nel dominio astratto Idea La verifica che la semantica del programma soddisfi la sua specifica può essere effettuata a dei livelli di astrazione in cui vengono eliminati fattori irrilevanti e viene quindi ridotta la complessità del problema D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 19 / 40

Abstract Interpretation Abstract Interpretation Abstract Interpretation Semantica concreta del programma (descrive tutti i possibili comportamenti) Dominio Astratto che modella solo alcune proprietà delle computazioni concrete Semantica Astratta che verifica le proprietà del programma nel dominio astratto Attenzione L astrazione deve essere sound, cioè se la semantica astratta soddisfa la specifica astratta allora la semantica concreta soddisfa la specifica concreta, e completa, cioè se la semantica concreta soddisfa la specifica concreta questo dovrebbe essere provabile anche in astratto. D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 20 / 40

Abstract Interpretation Abstract Interpretation Abstract Interpretation Linguaggio che permette il prodotto tra numeri interi Semantica Concreta del linguaggio: η: Exp Z η(n)=n η(e1*e2)= η(e1)*η(e2) Semantica Astratta che considera solo il segno delle espressioni ρ: Exp {-,0,+} ρ(n)= - se n<0 ρ(n)= 0 se n=0 ρ(n)= + se n>0 ρ(e1*e2)= ρ(e1)x a ρ(e2) Funzione di concretizzazione Mappa un valore astratto in un insieme di valori concreti: γ:{-,0,+} P(Z) (insieme delle parti di Z) Funzione di astrazione Mappa un insieme di valori concreti S nel valore astratto più preciso che rappresenta S α : P(Z) A D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 21 / 40

Abstract Interpretation Abstract Interpretation Abstract Interpretation Dominio Concreto C: Reticolo Completo Dominio Astratto A: Reticolo Completo Funzione di concretizzazione γ e Funzione di astrazione α: Coppia di funzioni che definiscono una Connessione di Galois C γ A α D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 22 / 40

Abstract Interpretation Abstract Interpretation Abstract Interpretation Sostituiamo il dominio concreto con quello astratto Reinterpretiamo le operazioni del programma nel dominio astratto D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 23 / 40

Abstract Interpretation PolySpace PolySpace Tool distribuito da TheMathWorks che esegue l analisi statica del codice sfruttando l interpretazione astratta. Effettua la verifica di tutti i comportamenti possibili del codice Rileva staticamente la presenza di errori che possono portare a fallimenti a runtime Rileva la presenza di codice non raggiungibile Come fa? Esegue la verifica di un superset delle possibili computazioni ottenuto dall utilizzo di approssimazioni superiori applicate agli elementi del dominio D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 24 / 40

Abstract Interpretation PolySpace PolySpace Tool distribuito da TheMathWorks che esegue l analisi statica del codice sfruttando l interpretazione astratta. Effettua la verifica di tutti i comportamenti possibili del codice Rileva staticamente la presenza di errori che possono portare a fallimenti a runtime Rileva la presenza di codice non raggiungibile Come fa? Esegue la verifica di un superset delle possibili computazioni ottenuto dall utilizzo di approssimazioni superiori applicate agli elementi del dominio D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 24 / 40

Abstract Interpretation PolySpace PolySpace PolySpace rileva le principali categorie di errori runtime: Sforamento di array Accessi illegali tramite puntatori Lettura di variabili non inizializzate Underflow e Overflow su interi e su float Divisioni per zero... Dov è la fregatura? Lavora con delle overapproximation, quindi genera falsi positivi D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 25 / 40

Abstract Interpretation PolySpace PolySpace PolySpace rileva le principali categorie di errori runtime: Sforamento di array Accessi illegali tramite puntatori Lettura di variabili non inizializzate Underflow e Overflow su interi e su float Divisioni per zero... Dov è la fregatura? Lavora con delle overapproximation, quindi genera falsi positivi D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 25 / 40

Abstract Interpretation PolySpace PolySpace PolySpace rileva le principali categorie di errori runtime: Sforamento di array Accessi illegali tramite puntatori Lettura di variabili non inizializzate Underflow e Overflow su interi e su float Divisioni per zero... Dov è la fregatura? Lavora con delle overapproximation, quindi genera falsi positivi D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 25 / 40

Abstract Interpretation PolySpace PolySpace Ogni istruzione può generare più errori, PolySpace quindi esegue un numero di check pari al numero dei possibili errori generabili dall istruzione. Tool input: codice sorgente Tool output: codice sorgente colorato Ogni possibile errore runtime è colorato sulla base delle informazioni di analisi In verde se non genera mai errori In rosso se in tutte le computazioni analizzate genera l errore In arancione se almeno in una computazione genera l errore In grigio se l istruzione corrispondente non è mai stata raggiunta D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 26 / 40

Abstract Interpretation PolySpace PolySpace Ogni istruzione può generare più errori, PolySpace quindi esegue un numero di check pari al numero dei possibili errori generabili dall istruzione. Tool input: codice sorgente Tool output: codice sorgente colorato Ogni possibile errore runtime è colorato sulla base delle informazioni di analisi In verde se non genera mai errori In rosso se in tutte le computazioni analizzate genera l errore In arancione se almeno in una computazione genera l errore In grigio se l istruzione corrispondente non è mai stata raggiunta D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 26 / 40

Abstract Interpretation PolySpace Overapproximation Approssimazioni effettuate dal tool: Generazione automatica di funzioni non chiamate Inizializzazione full-range delle variabili globali e static Interleaving totale delle chiamate generate Osservazioni Le approssimazioni implicano la verifica di comportamenti del codice non possibili durante la reale esecuzione. D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 27 / 40

Abstract Interpretation PolySpace Overapproximation Approssimazioni effettuate dal tool: Generazione automatica di funzioni non chiamate Inizializzazione full-range delle variabili globali e static Interleaving totale delle chiamate generate Osservazioni Le approssimazioni implicano la verifica di comportamenti del codice non possibili durante la reale esecuzione. D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 27 / 40

Abstract Interpretation PolySpace Overapproximation Vincoli: Attività principale analisi degli arancioni Classificazione degli arancioni sulla base della particolare approssimazione che li può aver generati Studio di vincoli da aggiungere al dominio di variazione delle variabili per disambiguare gli arancioni dubbi Range di variazione delle variabili globali e static Specifica del corretto interleaving delle chiamate Verifica di integrazione di più moduli contemporaneamente D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 28 / 40

Abstract Interpretation Esempio Esempio1: Risultato Verifica D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 29 / 40

Abstract Interpretation Esempio Esempio2: Risultato Verifica D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 30 / 40

Analisi Dinamica Vs PolySpace Tool CANTATA Analisi Dinamica: CANTATA CANTATA è un tool, costituito da più moduli eseguibili, che permette di effettuare: Testing funzionale (black box) Testing strutturale (white box) Statement Coverage Decision Coverage Boolean Coverage Path Coverage Analisi Statica del codice Cosa Faremo: Testing Strutturale con criterio di copertura All-Paths D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 31 / 40

Analisi Dinamica Vs PolySpace Tool CANTATA Analisi Dinamica: CANTATA CANTATA è un tool, costituito da più moduli eseguibili, che permette di effettuare: Testing funzionale (black box) Testing strutturale (white box) Statement Coverage Decision Coverage Boolean Coverage Path Coverage Analisi Statica del codice Cosa Faremo: Testing Strutturale con criterio di copertura All-Paths D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 31 / 40

Analisi Dinamica Vs PolySpace Esempio Esempio Sorgente int myfunct(int,int); int myfunct(int a, int b){ int result; if(a>b){ result=a; } else if(a<b){ result=b; } else{ result=a*b; } return result; } D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 32 / 40

Analisi Dinamica Vs PolySpace Esempio Codice Instrumentato: All Paths P1 P2 P3 P4 P5 P6 P7 D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 33 / 40

Analisi Dinamica Vs PolySpace Esempio Path e Test Suite D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 34 / 40

Analisi Dinamica Vs PolySpace Esempio Test: test suite 1 D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 35 / 40

Analisi Dinamica Vs PolySpace Esempio Test: test suite 1 D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 36 / 40

Analisi Dinamica Vs PolySpace Esempio Test: test suite 2 D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 37 / 40

Analisi Dinamica Vs PolySpace Esempio Test: test suite 2 D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 38 / 40

Analisi Dinamica Vs PolySpace Esempio Risultato PolySpace PolySpace rileva il possibile problema in corrispondenza del prodotto L arancione indica che in almeno una computazione il tool ha rilevato overflow Identifica l esatto punto in cui può verificarsi il problema D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 39 / 40

Conclusioni Conclusioni Abstract Interpretation soluzione alla crescente complessità software Confidenza assoluta sull assenza di errori runtime nel codice in corrispondenza di input possibili Possibilità di verificare correttezza di procedure per determinati range di variazione degli input Verifica esaustiva a costi notevolmente inferiori rispetto al testing D.Grasso (Università di Firenze) Verifica con Interpretazione Astratta 40 / 40