Premessa - 1. Ingegneria del Software 1 Verifica e validazione: prove statiche. Premessa - 3. Premessa - 2. Tecniche di verifica - 1.

Documenti analoghi
Premessa - 1. Ingegneria del Software mod. A Verifica e validazione: analisi statiche

Premessa - 1. Verifica e validazione: prove statiche. 9. Verifica e validazione: prove statiche. Premessa - 2. Premessa - 3.

Verifica e validazione: analisi statiche Premessa 1 Premessa 2 Premessa 3 Premessa 4 Tecniche di verifica 1

Premessa - 1. Verifica e validazione: prove statiche. Premessa - 2. Premessa - 3. Premessa - 4. Tecniche di verifica - 1. Tullio Vardanega

SCD IS. Verifica e validazione: analisi statica. Verifica e validazione: analisi statica. UniPD Ingegneria del Software mod. A 1.

SCD IS. Verifica e validazione: analisi statica. Verifica e validazione: analisi statica. UniPD Ingegneria del Software mod. A 1.

SCD IS. Verifica e validazione: analisi statica. Verifica e validazione: analisi statica. Premessa 1

SCD IS. Verifica e validazione: analisi statica. Verifica e validazione: analisi statica. Premessa 2. Premessa 1. Premessa 3

SCD IS. Verifica e validazione: analisi statica. Verifica e validazione: analisi statica. Premessa 2. Premessa 1. Programmi verificabili 1

SCD IS. Verifica e validazione: analisi statica. Verifica e validazione: analisi statica. Premessa 2. Premessa 1. Scrivere programmi verificabili 1

SCD IS. Verifica e validazione: analisi statica. Verifica e validazione: analisi statica. Premessa 2. Scrivere programmi verificabili 1.

Sicurezza di sistema. Sicurezza: definizioni - 1. Sicurezza: definizioni - 2. Livelli di criticità - 1. Sicurezza: definizioni - 3

Sicurezza di sistema. Sicurezza: definizioni - 2. Sicurezza: definizioni - 1. Livelli di criticità - 1. Sicurezza: definizioni - 3

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010.

Macchine astratte, linguaggi, interpretazione, compilazione

Sommario Obiettivo della programmazione e ciclo di sviluppo di programmi. Programmi. Ciclo di sviluppo di programmi. Obiettivo

Linguaggi di programmazione e astrazione

Elementi di programmazione

Macchine astratte, linguaggi, interpretazione, compilazione

12. Verifica e Validazione del Software

Verifica e validazione: introduzione

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Calcolo numerico e programmazione Programmazione

Linguaggi di Programmazione

Ingegneria del Software 22a. Progettazione delle prove. Dipartimento di Informatica Università di Pisa A.A. 2014/15

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

2. Cenni di sistemi operativi

Fasi di un Compilatore

Macchine astratte, linguaggi, interpretazione, compilazione

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio (1) Linguaggio (2)

I Linguaggi di Programmazione

Prefazione. Capitolo 1 Sistemi di elaborazione 1

Correttezza (prima parte)

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Ingegneria del Software 4. Introduzione a UML. Dipartimento di Informatica Università di Pisa A.A. 2014/15

PROGRAMMAZIONE DISCIPLINARE LICEO SCIENTIFICO OPZIONE SCIENZE APPLICATE INFORMATICA CLASSE TERZA

Funzioni, Stack e Visibilità delle Variabili in C

Perché il linguaggio C?

Programmazione Orientata agli Oggetti in Linguaggio Java

MATRICE TUNING competenze versus unità didattiche, Corso di Laurea in Informatica (classe L-31), Università degli Studi di Cagliari

Metodologie di Programmazione. ovvero, Principi e Tecniche per la costruzione di programmi

Programmazione = decomposizione basata su astrazioni

Linguaggi, messaggi e comunicazione Traduzione di programmi Interpreti e compilatori Introduzione al processo di compilazione

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE

Introduzione - aspetti generali dell informatica

ISTITUTO SUPERIORE ENRICO FERMI. PROGRAMMAZIONE DEL GRUPPO DISCIPLINARE INFORMATICA IT INDIRIZZO INFORMATICA E TELECOMUNICAZIONI a.s.

Sommario Linguaggi, messaggi e comunicazione. Introduzione ai Linguaggi di Programmazione. Linguaggio. Messaggio

Validazione attraverso il TESTING Validazione, verifica, debugging e defensing programming

Casi d uso. Marina Zanella - Ingegneria del Software UML: Casi d uso 1

Astrazione procedurale

UNITÀ DI GOVERNO. Architettura funzionale. Ambiente di programmazione. Architettura hardware

Indice. Prefazione. 3 Oggetti e Java 53

Macchine astratte, linguaggi, interpretazione, compilazione

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

MODELLO A MEMORIA COMUNE. Aspetti caratterizzanti

Capitolo 6. Linguaggi di Programmazione. Mauro Giacomini Pearson Addison-Wesley. All rights reserved

Definizioni - 1. Ingegneria del Software modulo B 2. Processi di sviluppo software. Modelli. Modello sequenziale. Modello incrementale

Elementi di programmazione

Università di Salerno Corso di FONDAMENTI DI INFORMATICA Corso di Laurea Ingegneria. Docente : Ing. Secondulfo Giovanni Anno Accademico

ASTRAZIONE ASTRAZIONE

Sviluppo di Software Sicuro -S 3 SPARK - Introduzione. Sommario. SPARK - Elementi lessicali 24/02/2010 SCOPO DEL LINGUAGGIO S

Sintesi Sequenziale Sincrona Sintesi Comportamentale di reti Sequenziali Sincrone

Marco Tarini - Università dell'insubria A.A. 2016/17. Università degli Studi dell Insubria Dipartimento di Scienze Teoriche e Applicate

Corso di Ingegneria del Software

Modelli di interazione tra processi

Informatica. Progettazione ed implementazione di un tool per il supporto al debug nella pratica di sviluppo Test Driven

Ingegneria del software

Calcolatori Elettronici Parte VIII: linguaggi assemblativi

Università degli Studi di Cassino Facoltà di Ingegneria. Lezioni del Corso di Misure Meccaniche e Termiche. G.04 La Conferma Metrologica

Agent#: un linguaggio di programmazione per lo sviluppo di agenti su piattaforma.net

Linguaggi di Programmazione

Programmazione strutturata

Linguaggi, Traduttori e le Basi della Programmazione

Le basi del linguaggio Java

Introduzione. Sommario. Il software. Definizione di Ingegneria del software

PREFAZIONE... IX Lo scopo di questo libro... ix La metodologia di insegnamento... ix Panoramica sul libro... xiii

PROGRAMMAZIONE DISCIPLINARE LICEO SCIENTIFICO OPZIONE SCIENZE APPLICATE INFORMATICA CLASSE QUINTA

CODESYS Test Manager: Incrementare la qualità del software con unità di test CODESYS Users' Conference 2014, Fabio Filipponi

Definizioni - 1. Ingegneria del Software 2 2. Processi di sviluppo software. Ingegneria del Software 2 Processi di sviluppo software

Processi non sequenziali e tipi di interazione

Processi non sequenziali e tipi di interazione

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova

Informatica 3. LEZIONE 1: Introduzione. Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di programmazione

Lezione 16. Il Software di base

13. Verifica e Validazione del Software

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

IL PROCESSO di PROGETTAZIONE

Corso di Informatica

ALGORITMI: PROPRIETÀ FONDAMENTALI

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09

Analisi strutturata 1

Spazio di indirizzamento virtuale

Introduzione D B M G

Transcript:

Premessa - 1 Ingegneria del Software 1 Verifica e validazione: prove statiche Docente: Tullio Vardanega tullio.vardanega@math.unipd.it Un numero sempre maggiore di sistemi software svolge funzioni con elevate caratteristiche di criticità Sicurezza come safety Prevenzione di condizioni di pericolo alle persone o alle cose Sistemi di trasporto pubblico Sistemi per il supporto di transazioni finanziarie Sicurezza come security Impedimento di intrusione Sistemi per il trattamento dei dati personali Sistemi per lo scambio di informazioni riservate Pagina 1 Premessa - 2 Premessa - 3 Il software presente in tali sistemi deve Esibire attributi (o capacità) funzionali Determinano cosa il sistema deve fare Possedere caratteristiche non funzionali Determinano come ciò deve essere fatto Soddisfare proprietà o requisiti Di costruzione D uso Di funzionamento Il soddisfacimento di tutte le corrispondenti aspettative deve essere accertato prima dell abilitazione all uso del sistema Tale accertamento richiede verifica Verifica: conferma, mediante prova o presentazione di evidenza oggettiva, che determinati requisiti siano stati soddisfatti ISO 8402:1994 Quality management and quality assurance - vocabulary Pagina 2 Pagina 3 Premessa - 4 Tecniche di verifica - 1 Nessun linguaggio di programmazione d uso comune garantisce che ogni programma scritto in esso sia verificabile per definizione Per ogni scelta di linguaggio, occorre fare estrema attenzione al modo in cui esso possa essere utilizzato dall applicazione La definizione di un linguaggio di programmazione comporta scelte di bilanciamento tra funzionalità (potenza espressiva) ed integrità (idoneità alla verifica) Tracciamento La forma di verifica atta a dimostrare completezza ed economicità dell implementazione Identificando eventuali requisiti aggiuntivi (derivati) ed investigando il loro soddisfacimento Ha luogo Nel trattamento dei requisiti, tra requisiti elaborati (decomposti) ed originali (di livello utente) Tra procedure di verifica e requisiti, disegno, codice Tra codice sorgente e codice oggetto Pagina 4 Pagina 5 Tullio Vardanega - 2003/4 1

Tecniche di verifica - 2 Tracciamento (segue) Certi stili di codifica (ancor meglio se agevolati dal linguaggio di programmazione) facilitano la verifica mediante tracciamento P.es.: assegnare singoli requisiti di basso livello a singoli moduli del programma, così da richiedere una sola procedura di prova ed ottenere una più semplice corrispondenza tra essi P.es.: maggiore è l astrazione di un costrutto del linguaggio, maggiore è la quantità di codice oggetto generato per esso e maggiore è lo sforzo necessario per accertarne la corrispondenza Revisioni Tecniche di verifica - 3 Strumento essenziale del processo di verifica Possono essere condotte su Requisiti, disegno, codice, procedure di verifica, risultati di verifica Non sono automatizzabili Richiedono la mediazione e l interazione di individui Possono essere formali od informali Richiedono comunque indipendenza tra verificato e verificatore La semplicità e la leggibilità del codice sono particolarmente desiderabili quando non si possa ritenere che il verificatore sia un esperto del linguaggio Pagina 6 Pagina 7 Tecniche di verifica - 4 Analisi di flusso di controllo Analisi Statica: applica a requisiti, progetto e codice Dinamica (prova, test): applica a componenti del sistema od al sistema nella sua interezza Gli standard di certificazione richiedono l uso, in varie combinazioni, di 10 metodi di analisi statica 1. Flusso di controllo - 2. Flusso dei dati - 3. Flusso dell informazione - 4. Esecuzione simbolica - 5. Verifica formale del codice - 6. Verifica di limite - 7. Uso dello stack 8. Comportamento temporale - 9. Interferenza - 10. Codice oggetto Ha l obiettivo di Accertare che il codice esegua nella sequenza attesa Accertare che il codice sia ben strutturato Localizzare codice sintatticamente non raggiungibile Identificare parti del codice che possano porre problemi di terminazione (i.e.: chiamate ricorsive, iterazioni) Esempio Analisi dell albero delle chiamate (call tree analysis): mostra se l ordine di chiamata specificato a progetto corrisponda a quello effettuato; rivela la presenza di ricorsione diretta o indiretta Esempio Divieto di modifica di variabili di controllo delle iterazioni Pagina 8 Pagina 9 Analisi di flusso dei dati Accerta che nessun cammino d esecuzione del programma acceda a variabili prive di valore Usa i risultati dell analisi di flusso di controllo insieme alle informazioni sulle modalità di accesso alle variabili (lettura, scrittura) Rileva possibili anomalie, p.es. più scritture successive senza letture intermedie È complicata dalla presenza e dall uso di dati globali accedibili da ogni parte del programma Analisi di flusso d informazione Determina come l esecuzione di una unità di codice crei dipendenze (e quali) tra i suoi ingressi e le uscite Le sole dipendenze consentite sono quelle previste dalla specifica Consente l identificazione di effetti laterali inattesi od indesiderati Può limitarsi ad un singolo modulo, a più moduli collegati, all intero sistema Pagina 10 Pagina 11 Tullio Vardanega - 2003/4 2

Esecuzione simbolica - 1 Verifica proprietà del programma mediante manipolazione algebrica del codice sorgente senza bisogno di specifica formale Usa tecniche di analisi di flusso di controllo, di flusso di dati e di flusso di informazione Si esegue effettuando sostituzioni inverse Ad ogni (uso di) LHS di un assegnamento si sostituisce progressivamente il suo RHS Trasforma il flusso sequenziale del programma in un insieme di assegnamenti parallelinei quali i valori di uscita sono espressi come funzione diretta dei valori di ingresso Esecuzione simbolica - 2 Assumendo assenza di aliasing e di effetti laterali di funzioni, da: X = A+B; -- X dipende da A e B Y = D-C; -- Y dipende da C e D if (X>0) Z = Y+1; -- Z dipende da A, B, C e D si ottiene: A+B 0 X == A+B Y == D-C Z conserva il valore precedente A+B > 0 X == A+B Y == D-C Z == D-C+1 Pagina 12 Pagina 13 Verifica formale del codice Analisi di limite Prova la correttezza del codice sorgente rispetto alla specifica formale dei suoi requisiti Esplora tutte le esecuzioni possibili, il che non è fattibile mediante prove dinamiche Correttezza parziale Elaborazione e prova di teoremi (condizioni di verifica) la cui verità implica che il verificarsi di precondizioni e della terminazione del programma assicurano il verificarsi di certe postcondizioni Correttezza totale Richiede prova di terminazione Verifica che i dati del programma restino entro i limiti del loro tipo e della precisione desiderata Analisi di overflow ed underflow nella rappresentazione di grandezze Analisi di errori di arrotondamento Verifica di valori di limite (range checking) Analisi di limite di strutture Linguaggi evoluti assegnano limiti statici a tipi discreti consentendo verifiche automatiche sulle corrispondenti variabili Più problematico con tipi enumerati e reali Pagina 14 Pagina 15 Analisi d uso di stack Analisi temporale Lo stack è l area di memoria che i sottoprogrammi usano per immagazzinare dati locali, temporanei ed indirizzi di ritorno generati dal compilatore L analisi determina la massima domanda di stack richiesta da un esecuzione e la relaziona con la dimensione dell area fisica disponibile Verifica inoltre che non vi sia collisione tra stack (allocazioni statiche) ed heap (allocazioni dinamiche) L attuale Java non ha stack ma solo heap implicazioni? Concerne le proprietà temporali richieste ed esibite dalle dipendenze delle uscite dagli ingressi del programma Produrre il valore giusto al momento giusto Carenze od eccessi del linguaggio di programmazione e delle tecniche di codifica possono complicare questa analisi P.es.: iterazioni prive di limite statico, ricorso sistematico a strutture dati dinamiche Pagina 16 Pagina 17 Tullio Vardanega - 2003/4 3

Analisi d interferenza Mostra l assenza di effetti di interferenza tra parti separate ( partizioni ) del sistema Non necessariamente limitate ai componenti software Veicoli tipici di interferenza Memoria dinamica (heap) condivisa, dove parti separate di programma lasciano traccia di dati abbandonati ma non distrutti (memory leak) Zone di I/O Dispositivi condivisi programmabili con effetti a livello sistema (P.es.: watchdog) Analisi di codice oggetto Assicura che il codice oggetto da eseguire sia una traduzione corretta del codice sorgente corrispondente e che nessun errore (od omissione) sia stato/a introdotto dal compilatore Viene effettuata manualmente Viene facilitata dalle informazioni di corrispondenza prodotte dal compilatore Pagina 18 Pagina 19 Programmi verificabili - 1 Costo di correzione di errori Dalla scelta dei metodi di verifica richiesti discende la selezione di standard di codifica e di sottoinsiemi del linguaggio appropriati L uso di costrutti del linguaggio inadatti può compromettere la verificabilità del programma La verifica retrospettiva (a valle dello sviluppo) è spesso inadeguata Sviluppo condotto senza tenere conto delle esigenze di verifica Il costo di correzione di un errore è tanto più elevato quanto più avanzato è lo stadio di sviluppo 200 150 100 50 0 Requirements 1 5 Design Code 200 50 20 10 Unit Test Acceptance Test Maintenance Pagina 20 Pagina 21 Programmi verificabili - 3 Programmi verificabili - 4 Eseguire ripetuti cicli di revisione-verifica dopo la rilevazione di ciascun errore è troppo oneroso Approccio retrospettivo Conviene di più effettuare analisi statiche durante la fase di codifica Approccio costruttivo: correttezza per costruzione Produce un miglior rapporto costo/qualità a fronte di un maggior costo concettuale e progettuale 4 ragioni fondamentali per richiedere o proibire l uso di particolari costrutti del linguaggio di implementazione Regole d uso per assicurare predicibilità di comportamento Regole d uso per consentire modellazione del sistema Regole d uso per facilitare le prove Considerazioni pragmatiche Pagina 22 Pagina 23 Tullio Vardanega - 2003/4 4

Regole d uso per assicurare predicibilità di comportamento Il codice sorgente non deve presentare ambiguità Effetti laterali (p.es.: di funzioni): diverse invocazioni della stessa funzione producono risultati diversi Effetti dell ordine di elaborazione ed inizializzazione: l esito di un programma può dipendere dall ordine di elaborazione entro una unita e/o tra unita Effetti dei meccanismi di passaggio dei parametri: la scelta di una modalità di passaggio (per copia, per riferimento), ove permessa, può influenzare l esito dell esecuzione Regole d uso per consentire modellazione del sistema La verifica statica richiede la costruzione di modelli del sistema da analizzare a partire dal codice del programma Rappresentano il programma come un grafo diretto e ne studiano i cammini possibili (storie di esecuzione) Le transizioni tra stati (archi) hanno etichette che descrivono proprietà sintattiche o semantiche dell istruzione corrispondente La presenza di flussi di eccezione e di risoluzione dinamica di chiamata (dispatching) complica notevolmente la struttura del grafo Ciascun flusso di controllo (thread) viene rappresentato ed analizzato separatamente Pagina 24 Pagina 25 Regole d uso per facilitare le prove Due forme (o atteggiamenti) di prova Investigativo: informale (debugging) Formale: aderente a standard richiesti Costrutti di linguaggio che sono di ostacolo (esempi): La risoluzione dinamica di chiamata (dispatching) complica le prove di copertura La conversione forzata tra tipi (casting) complica l analisi dell identità dei dati Le eccezioni predefinite complicano le prove di copertura, presentando cammini di esecuzione difficili da raggiungere senza modificare il codice Considerazioni pragmatiche L efficacia dei metodi costruttivi di analisi statica e di prova è funzione della qualità di strutturazione del codice P.es.: ogni modulo con un solo punto di ingresso ed un solo punto di uscita La verifica di un programma relaziona frammenti di codice con frammenti di specifica La verificabilità dipende dalla semplicità dell informazione di contesto Controllare e limitare gli ambiti (scope) e le visibilità Architettura software, incapsulazione dello stato ed accesso ad esso sono fattori decisivi Pagina 26 Pagina 27 Tullio Vardanega - 2003/4 5