Paola Spinazzé, 809506 Luca Leonardi, 810086. Linguaggio di specifica Permette di descrivere analiticamente proprietà di codice Java Descrizione di pre.

Slides:



Advertisements
Presentazioni simili
Astrazioni Polimorfe e Tipi Generici. 2 Polimorfismo Dal Greco molte forme Una variabile polimorfa può riferirsi a oggetti di classi diverse Un metodo.
Advertisements

Preincremento e PostIncremento in C++
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A2 Java: le basi del linguaggio.
Recupero debito quarto anno Primo incontro
Commenti C#.
Analizzatori Lessicali con JLex
Informatica 2 Lezione 4 Corso di laurea in matematica Informatica 2 Dott. Ing. Leonardo Vito Corso di laurea matematica indirizzo matematica per le applicazioni.
Differenze nei vari linguaggi di Elisa Trifirò e Barbara Tacchino
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
29 febbraio 2008 Progettare tipi di dato astratti.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
Metodologie di Programmazione = decomposizione basata su astrazioni
1 Le gerarchie di tipi: implementazioni multiple e principio di sostituzione.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
Differenze tra C e C++ Commenti: Adesso puoi inserire dei commenti tra // e la fine della linea. Usare le librerie C: In C++ puoi anche chiamare una funzione.
Verification of object-oriented programs with invariants by M. Barnett, R. DeLine, M. Fähndrich, K.R.M. Leino, W. Schulte Bordignon Claudio Zampieron Elisa.
Calcolatori Elettronici III
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
Specifiche senza JML: uso delle asserzioni. 2 Asserzioni in Java Dal jdk 1.4 (da Febbraio 2002) cè meccanismo per gestire asserzioni Asserzione: espressione.
Progettazione dei sistemi interattivi (A.A. 2004/05) - Lezione 3 1 La relazione di ereditarietà Punto di vista insiemistico: la relazione di ereditarietà
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
Eccezioni.
Lezione XII Laboratorio di Programmazione. Eccezioni Per la gestione di operazioni che possono non andare a buon fine il C++ mette a disposizione un sistema.
A.Natali DL Maggio1999 Oggetti Concetti fondamentali.
Introduzione a:. Nella prima parte di questo corso si vedranno i CONCETTI di: CLASSE (programma) METODO (Algoritmi e dati) CONCETTI CLASSICI DI PROGRAMMAZIONE.
Programmazione in Java
JavaScript 3. Commenti in JS Come in altri linguaggi di programmazione anche javascript offre la possibilità di inserire i commenti all'interno delle.
AlgoLab - Ereditarieta' Ereditarietà e polimorfismo in Java Laboratorio di Algoritmi 02/03 Prof. Ugo de Liguoro.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
I Metodi in Java Il termine "metodo" è sinonimo di "azione". Quindi, affinché un programma esegua qualche istruzione, deve contenere metodi.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione XXII I tipi di dato astratto Programmazione di Calcolatori: i tipi di dato astratto 1.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
I metodi F. Bombi Campi e metodi Abbiamo visto che una classe può contenere – Campi – Metodi stato I campi sono utilizzati per memorizzare.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Astrazione procedurale ed eccezioni
Le variabili in Java Nella programmazione tradizionale, una variabile è una porzione di memoria in cui è immagazzinato un certo tipo di dato. Per esempio.
ALLEGATO A Istruzioni L’allegato A può essere redatto in formato word, pdf, ppt. Si compone della copertina e di 4 pagine formato A4 o 4 slide contenenti.
1 novembre I nomi in Java F. Bombi 1 novembre 2002.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 7 Tipi di dato e strutture dati Specifica e realizzazione di strutture informative come classi.
Astrazione di dati Dati Astratti: cosa e perchè Dati Astratti: due meccanismi differenti Dati Astratti: due meccanismi differenti Astrazione e incapsulamento.
Programmazione in Java
Liste di Interi Esercitazione. Una variante Liste concatenate di Integers Non modificabile Costruttori per creare la lista vuota o un nodo Metodi d’istanza.
1 Progettazione dettagliata di un Tipo di Dato Astratto: l’ambiente di metodi.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Liste di Interi Esercitazione. IntList Lista di interi Una lista è una disposizione ordinata di elementi ( non in modo crescente-descrescente, ma per.
Ingegneria del software Modulo 1 -Introduzione al processo software Unità didattica 3 – Modelli di fase d’analisi Ernesto Damiani Università degli Studi.
1 Astrazione sul controllo: gli iteratori. 2 Gli iteratori 4 perché vogliamo iterarare “in modo astratto” 4 iteratori e generatori in Java –specifica.
1 Progettare un Tipo di Dato Astratto. 2 Scelte di Progetto (astrazione) 4 Caratteristiche degli oggetti –Modificabilità 4 Scelta delle operazioni –Realizzare.
1 Astrazione procedurale ed Eccezioni. 2 Procedure stand alone 4 indipendenti da specifici oggetti 4 come si realizzano in Java –metodi statici definiti.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
1 Un esempio: le liste ordinate di interi. 2 Liste ordinate  OrderedIntList 4 lista ordinata di interi –modificabile.
Metodologie di Programmazione Esercizi sulla semantica di Java.
1 Le gerarchie di tipi: implementazioni multiple e principio di sostituzione.
PolyFun. Dare implementazione,funzione di astrazione, invarianti della rappresentazione. Provare che i metodi apply e bind preservano gli invarianti.
Sommario Oggetti immutabili e non Tipi Primitivi: String, Arrays.
Esercitazione. Problema Vogliamo definire in modo gerachico un tipo di dato che definisce Tabelle multi-dimensionali con un numero di righe variabili.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
LIP: 11 Maggio 2007 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
1 Un esempio con iteratore: le liste ordinate di interi.
Fondamenti di informatica T-A Esercitazione 3 : Classi, metodi, visibilità, metodi statici AA 2012/2013 Tutor : Domenico Di Carlo.
Introduzione all’Ereditarietà Pietro Palladino. Richiami UML Classe: descrizione di un insieme di oggetti software con caratteristiche simili Definisce.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Paola Spinazzé, Luca Leonardi,

Linguaggio di specifica Permette di descrivere analiticamente proprietà di codice Java Descrizione di pre condizioni Descrizione di post condizioni Descrizione di invarianti Specifica commenti in una particolare forma allinterno dei quali si inseriscono parole chiave e operatori particolari 2

invariant : identifica linvariante requires : identifica precondizioni assignable : identifica campi della classe modificabili dal metodo ensures : identifica postcondizioni signlas : identifica postcondizioni in caso di eccezione \old(name) : riferimento al valore originario della variabile name \forall … : quantificatore universale \result : valore di ritorno del metodo 3

public class Purse { final int MAX_BALANCE; int balance; invariant 0 <= balance && balance <= MAX_BALANCE; byte[] pin; invariant pin != null && pin.length == && (\forall int i; 0 <= i && i < 0 <= pin[i] && pin[i] <= requires amount >= assignable ensures balance == \old(balance) - && \result == signals (PurseException) balance == int debit(int amount) throws PurseException { if (amount <= balance) { balance -= amount; return balance; } else { throw new PurseException("overdrawn by " + amount); } } requires 0 < mb && 0 <= b && b <= && p != null && p.length == && (\forall int i; 0 <= i && i < 0 <= p[i] && p[i] <= assignable MAX_BALANCE, balance, ensures MAX_BALANCE == mb && balance == && (\forall int i; 0 <= i && i < 4; p[i] == Purse(int mb, int b, byte[] p) { MAX_BALANCE = mb; balance = b; pin = (byte[]) p.clone(); } 4

Controllo a run-time jmlc jmlunit Controllo statico ESC/Java (ESC/Java2) LOOP JACK Generazione di specifiche Daikon Houdini Documentazione jmldoc 5

Si esegue il programma per verificare che le caratteristiche che deve avere siano rispettate. 6

Estensione di javac Compila in bytecode Java con asserzioni JML Preserva il comportamento del programma Peggiora le prestazioni (tempo e spazio) Fornisce informazioni per lindividuazione di errori Affidabilità I risultati che fornisce sono corretti, ma alcune asserzioni possono essere ignorate 7

Permettono di verificare unità di programma in modo indipendente Vengono create classi di test che richiamano le classi in analisi inviando messaggi predefiniti per testarne le funzionalità implementate 8

Permette di automatizzare il processo di testing del codice Il tool genera le classi di test automaticamente a partire dalle specifiche JML annotate nelle classi in analisi Si controlla che le violazioni prodotte non siano causate da violazioni delle precondizioni dovute ai dati di test immessi dallutente 9

Si tenta di stabilire staticamente se le caratteristiche di un determinato codice vengono rispettate. Non è legato a particolari esecuzioni. 10

Controlla senza eseguire il codice possibili errori a run-time Supporta un sottoinsieme delle asserzioni definite in JML Utilizza le annotazioni JML in due modi: elimina alcuni warning del compilatore javac verifica che le precondizioni siano rispettate Fornisce informazioni sui metodi che possono causare o causano errori/warning 11

Né correttezza né completezza Intenzionale per prestazioni Trasforma le annotazioni JML in formule logiche valide sse il programma non presenta il tipo di errori che le annotazioni identificano Utilizza un theorem prover per verificare la correttezza delle formule Esc/Java2 ne estende alcune funzionalità 12

Verifica proprietà specificate in JML Formalizza una semantica denotazionale in PVS Genera una proof obligation per ogni metodo del codice da verificare Output di difficile interpretazione da analizzare successivamente con tecniche di analisi PVS 13

ESC/Java: nessuna interazione con lutente, semplice da usare, determina solo alcuni errori LOOP: interazione con lutente Possono essere utilizzati assieme ESC/Java elimina una parte degli errori LOOP raffina i risultati 14

Utilizzato in progetti in cui lo sforzo sia giustificabile Librerie JAVA (Vector) SmartCards (JavaCard API) 15

Implementa un calcolo di weakest precondition automatizzato a partire dalle annotazioni JML Le weackest precondition vengono dimostrate con dei prover automatici Permette anche di annotare automaticamente il codice tramite JML 16

Corretto e completo Genera solo quei giudizi la cui formalizzazione è rispettata dallapplicazione Due possibilità: controllo dei soli giudizi non provati automaticamente controllare tutti i giudizi attraverso un theorem prover interattivo 17

Si tenta di inferire automaticamente le specifiche che un determinato codice deve avere. 18

Genera specifiche per il codice sorgente in input Trova invarianti di punti specifici del programma Osserva i valori calcolati durante dei test e ne controlla laccuratezza Accuratezza dipende da qualità e completezza dei test Usa analisi statiche e test statistici per ridurre la probabilità di errore Non gestisce le clausole signals 19

Deduce annotazioni JML per un dato programma Algoritmo Genera delle annotazioni JML candidate Esegue ESC/Java più volte per eliminare quelle non consistenti con il codice (non considera i potenziali errori a runtime) Nellultima esecuzione restituisce loutput di ESC/Java 20

Aiuta i programmatori a comprendere le specifiche JML per un dato progetto. 21

Estende il tool javaDoc col supporto a JML Analizza il codice per trovare le specifiche per ogni metodo (es. in caso di overrides) Produce documenti HTML contenenti sia informazioni javaDoc che specifiche JML 22

JML risulta essere facile da imparare a programmatori Java in quanto simile a Java stesso Non vi è la necessità di specificare un modello formale, in quanto il codice rappresenta il modello stesso (non esistono bug che possono sfuggire al modello) Notazione standard che permette di usare facilmente qualsiasi tool che la supporti senza necessità di imparare molti linguaggi 23

Runtime checking: aiutano ad identificare possibili errori che possono essere legati a particolari esecuzioni jmlc utile per testare intere applicazioni jmlunit utile per testare singole funzionalità Static checking: più precisi dei precedenti; la correttezza del programma è assicurata per qualsiasi esecuzione ESC/Java semplice da usare ma identifica solo pochi errori LOOP e JACK più completi: il primo richiede conoscenze di PVS, mentre per il secondo non sono necessarie conoscenze di prover 24

Generating Specification: la generazione di specifiche JML può non essere sempre facile, specie se fatta in fase post-development Daikon: genera annotazioni per un programma non annotato Houdini: annota un programma e fornisce i warning testati da ESC/Java 25

[1] L.Burdy, Y. Cheon, D. Cok, M. D. Ernst, J. Kinkry, G.T. Leavens, K.R.M Leino, E. Pool, An Overview of JML Tools and Application [2] [3] J. Van den Berg, B. Jacobs, The LOOP compiler for Java and JML, [4] C. Flanagan, K. R. M. Leino, Houdini, an Annotation Assistant for ESC/Java, aq/SRC/publications/rustan/krml100.ps aq/SRC/publications/rustan/krml100.ps 26