I metodi formali nel processo di sviluppo del software I metodi formali consentono di creare una specifica più completa, uniforme e non ambigua di quelle prodotte usando i metodi convenzionali ed orientati agli oggetti Questa specifica matematica può essere dimostrata corretta ed eseguita ad alto livello (nel caso si utilizzino linguaggi di specifica eseguibili) Bisogna avere delle conoscenze specifiche Da usare per specificare sistemi critici per la sicurezza o per la missione I metodi formali riducono notevolmente gli errori di specifica. Consentono di creare software con una quantità di errori più limitata 1
Metodo delle Abstract State Machines per l analisi e il design Metodo per l ingegneria dei sistemi che guida lo sviluppo del software dalla cattura dei requisiti alla loro implementazione Aiuta lo sviluppatore a gestire la dimensione, la complessità e l affidabilità del sistema Comprende in un unico framework concettuale le attività di analisi e design L affidabilità del software può essere supportata e giustificata attraverso la verifica (tecniche di ragionamento) e la validazione (simulazione e testing) già dalle fase iniziali del processo di sviluppo 2
Metodo delle Abstract State Machines per l analisi e il design Il metodo migliora il processo di sviluppo in due direzioni Modellazione di alto livello accurata, al livello di astrazione determinato dal dominio di applicazione Connessione delle descrizioni nei diversi stadi del processo di sviluppo attraverso una catena organica di rigorosi e coerenti modelli del sistema (a livelli di astrazione via via più raffinati) Contrariamente ad UML, il metodo ha fondamenti matematici che aggiungono precisione alla operatività del metodo 3
Metodo delle Abstract State Machines per l analisi e il design Concetto di Abstract State Machine Costruzione del modello ground Passi di raffinamento 4
Concetto di Abstract State Machine Le Abstract State Machines sono un modello computazionale con una notazione rigorosa dal punto di vista matematico comprensibile da chi è coinvolto nella pratica della programmazione 5
Abstract State Machines Basic ASMs Non determinismo e parallelismo senza restrizioni Programmi flat Turbo ASMs Composizione sequenziale e iterazione Chiamate ricorsive ASMs multi-agente Sincrone Asincrone 6
Piccolo esempio di ASM CLOCK = if DisplayTime + Delta = CurrTime then DisplayTime := CurrTime E possibile separare la descrizione della guardia della regola dalla regola stessa definendo ClockTick = (DisplayTime + Delta = CurrTime) SUSTAIN(signal) = if ClockTick then EMIT(signal) In questo caso il segnale è CurrTime ed EMIT(CurrTime) significa porre DisplayTime := CurrTime 7
Un altro piccolo esempio di ASM The game of life CONWAY(c) = if aliveneighb(c)=3 then alive(c) := true if aliveneighb(c)< 2 or aliveneighb(c)> 3 then alive(c) := false In ogni stato della loro vita, tutte le cellule eseguono la loro regola della vita simultaneamente. Ciò viene espresso in questo modo GAMEOFLIFE = forall c Cell do CONWAY(c) 8
Stati Astratti Gli stati delle ASM sono delle strutture della logica del I Ordine, ma possono essere pensati come delle memorie astratte Il vocabolario Σ è una collezione finita di simboli funzionali: ogni simbolo funzionale ha un arietà, i nomi di funzioni nullari vengono detti costanti i simboli di funzione possono essere statici (fra cui undef, true, false) o dinamici (monitorati, controllati, condivisi e di output) 9
Stati Astratti (ctnd.) Uno stato S sul vocabolario Σ è una coppia (D,I) dove D è il dominio ed I la funzione interpretazione dei simboli funzionali in Σ. D è anche detto il base set dello stato E possibile definire funzioni parziali Una relazione ha sempre valori true, false, undef Nelle applicazioni D viene spesso suddiviso in universi più piccoli 10
Locazioni e aggiornamenti In uno stato i simboli di funzione e gli argomenti delle funzioni sono le locazioni di memoria mentre i valori delle funzioni sono i loro contenuti Una locazione di uno stato S è una coppia (f, (a 1,...,a n )) dove f è un simbolo funzionale n-ario ed a 1,...,a n sono elementi del dominio D. Il valore f I (a 1,...,a n ) è il contenuto della locazione in S Un aggiornamento per S è una coppia (l,v) dove l è una locazione di S e v un elemento di D. Un insieme di aggiornamenti U viene detto consistente se non ha aggiornamenti in collisione, cioé se per ogni locazione l e tutti gli 11
elementi v,w, è vero che se (l,v), (l,w) U, allora v = w 12
Come ottenere un nuovo stato? Se un insieme di aggiornamenti consistente U viene sparato in un dato stato il risultato è uno stato nuovo In questo nuovo stato, il contenuto delle locazioni non considerate nell insieme U rimarrà invariato. Per ogni (l,v) in U invece, il contenuto della locazione l nel nuovo stato sarà proprio v. Se un insieme di aggiornamenti U consistente viene sparato su uno stato S, il nuovo stato risultante S + U viene determinato univocamente 13
Ma da dove viene un insieme di aggiornamenti? Ogni ASM è dotata di un programma La sintassi dei programmi ASM è definita attraverso le regole di transizione ASM Interpretando il programma ASM nello stato corrente, viene determinato un insieme di aggiornamenti che, sparati sullo stato corrente determinano il nuovo stato 14
Regole di transizione per ASM Basic Skip rule Update rule Block rule skip f(s 1,...,s n ) := t P par Q Conditional rule if ϕ then P else Q Let rule Forall rule Choose rule let x = t in P forall x with ϕ do P choose x with ϕ do P 15
Utilizzo delle regole di transizione sugli stati...... allo scopo di determinare nuovi stati Sia P una regola di transizione costruita con i simboli nel vocabolario Σ Sia S = (D,I) uno stato per il vocabolario Σ: tutti i simboli funzionali saranno interpretati sul dominio D, a tutte le variabili verrà assegnato un valore di D. In particolare ogni update rule del tipo f(t 1,...,t n ) := t contenuta in P diventerà un aggiornamento (l,v) L insieme di questi aggiornamenti U verrà sparato su S ottenendo lo stato successore 16
Dichiarazione di regola Una dichiarazione di regola per un simbolo di regola r di arietà n è una espressione r(x 1,...,x n ) = P, dove P è una regola di transizione e le variabili libere di P sono contenute nella lista x 1,...,x n In una chiamata ad una regola r(t 1,...,t n ) le variabili x i vengono sostituite con i parametri t i Non ci sono variabili globali. I parametri formali della testa sono le sole variabili che occorrono libere nel corpo della dichiarazione della regola 17
Definizione di Abstract State Machine Una abstract state machine M consiste in un vocabolario Σ, un insieme di stati iniziali per Σ, un insieme di dichiarazioni di regole, un simbolo di regola distinto di arietà 0 detto la main rule della macchina 18
Mossa di una ASM Diciamo che una macchina M può fare una mossa da uno stato S 1 ad uno stato S 2 e scriviamo S 1 M S 2 se la main rule di M restituisce un insieme di aggiornamenti consistente U partendo dallo stato S 1 e se S 2 = S 1 + U Gli aggiornamenti in U vengono detti aggiornamenti interni in modo da distinguerli dai possibili aggiornamenti di locazioni monitorate o condivise. S 2 viene detto lo stato interno successivo 19
Computazione (run) di una ASM Una computazione di una ASM comincia in uno stato iniziale della macchina Non appena la macchina fa una mossa, la run procede, richiedendo solo che le mosse dell ambiente (che avvengono nel frammezzo) che aggiornano le locazioni monitorate e condivise producano uno stato nuovo per la mossa successiva Se in uno stato la macchina non può produrre un insieme di aggiornamenti consistente, oppure non è in grado di produrre nessun insieme di aggiornamento, lo stato viene considerato l ultimo della computazione A causa del non-determinismo della regola choose una ASM può avere diverse computazioni parallele dallo stesso stato iniziale 20
Computazione (run) di una ASM (ctnd. 1) Sia M una ASM con vocabolario Σ. Una computazione di M è una sequenza finita o infinita S 0,S 1,S 2,... di stati per Σ tali che S 0 è uno stato iniziale di M per ogni n, o M può fare una mossa da S n al successivo stato interno S n e l ambiente produce un insieme consistente di aggiornamenti esterni o condivisi U tali che S n+1 = S n + U, oppure M non può fare una mossa in uno stato S n ed S n è l ultimo stato della computazione 21
Esempio - parallelismo sincrono limitato Applicazione di forall a insiemi finiti di cardinalità limitata da un n fissato n macchine funzioni statiche: mod, funzione successore, uguaglianza sui numeri naturali CYCLETHRU(R0,...,R n ) = forall i n do if cycle = i then R i cycle := (cycle +1) mod (n + 1) Un caso speciale frequente è ALTERNATE(R,S) 22