xal : un linguaggio basato su automi per (ri-)strutturare

Transcript

xal : un linguaggio basato su automi per (ri-)strutturare
“XAL : UN LINGUAGGIO BASATO SU AUTOMI PER
(RI-)STRUTTURARE SOFTWARE”
Spegni, Francesco, DII - Università Politecnica delle Marche, Ancona, IT,
[email protected]
Abstract .
XAL (XML Automata Language) è un linguaggio di modellazione progettato per descrivere un Sistema Software
come insieme di processi che eseguono concorrentemente. Tali processi vengono rappresentati come sistemi a
stati finiti, o automi, e sono ottenuti per istanziazione di un numero finito di definizioni di automi.Il linguaggio
XAL, pertanto, differisce dalla maggior parte dei linguaggi di modellazione basati su automi in quando separa
la definizione di un automa (che rappresenta lo “schema” di un processo, o se si preferisce di una procedura)
dalla sua effettiva copia in esecuzione (o istanza). Così facendo XAL è in grado di descrivere in maniera
naturale Sistemi Software composti da un insieme finito di procedure, le quali però vengono eseguite un numero
imprecisato di volte (ad es. il numero di procedure istanziate potrebbe dipendere dal numero di clienti serviti o
di dispositivi che l'applicazione gestisce in un dato momento).
Il linguaggio XAL è definito come un'estensione del formalismo noto come Networks of Timed Automata. Esso
consente a due (o più) istanze di sincronizzarsi tramite scambio di messaggi su un mesesimo canale (rendezvous), e consente di attivare/disattivare determinate transizioni fra stati a seconda del tempo reale trascorso
dall'inizio dell'esecuzione.
XAL consente di associare a ciascuno stato del processo due porzioni di codice eseguibile, chiamate
rispettivamente azione e metrica dello stato. L'azione di uno stato rappresenta il comportamento che
l'applicazione stessa mostra al “cadere” in quello stato. La metrica, di uno stato, invece, è una porzione di
codice che, quando eseguita, ritorna un simbolo. Tale simbolo, a sua volta, determinerà quale sarà la prossima
transizione da eseguire. La metrica, attraverso la successione dei simboli emessi, è una concretizzazione del
“nastro di input” che viene spesso considerato quando si descrivono processi sotto forma di sistemi a stati finiti
(cfr. Macchina di Turing o Push-Down Automata). Associando azioni e metriche agli stati di un modello XAL è
possibile ottenere un modello eseguibile, ovvero un programma effettivamente eseguibile. Il vantaggio di questo
approccio è che la parte astratta e quella concreta del programma sono nettamente separate, e quindi
riconoscibili. Ciò risulta molto utile quando si deve ri-strutturare del software esistente, o anche analizzarlo per
verificarne la compatibilità con i suoi requisiti.
Il linguaggio XAL è stato corredato di una semantica formale, nello stile della (Small Steps) StructuralOperational Semantics. Basandosi su essa si è realizzato un interprete scritto nel linguaggio PHP.
Attorno a XAL si è realizzata una piattaforma di sviluppo basata su Eclipse. In particolare è stato realizzato un
plugin che consenta di disegnare il programma secondo la notazione specificata dal linguaggio XAL, e facilita
la scelta delle azioni e metriche assciate a ciascuno stato. Il codice sorgente che realizza il plugin Eclipse per
XAL è stato utilizzato (con alcuni adattamenti minori) per trasportare lo stesso ambiente di programmazione
sotto forma di applicazione web. Il classico paradigma MVC (Model-View-Command) su cui si basano i plugin
realizzati per Eclipse, sul web sono mappati alla seguente maniera: il livello del Modello viene gestito da
apposite servlet, il livello della Visualizzazione viene gestito da codice Javascript, ed infine il livello dei
Comandi è realizzato attraverso chiamate AJAX che ritornano oggetti JSON.
Tramite model checker esistenti, come NuSMV e Uppaal, è stato possibile verificare programmi scritti in XAL.
Per concludere, sono stati definiti degli algoritmi che traducono un sistema software scritto in Java in un
insieme di automi XAL in grado di simularne il comportamento. Questa piattaforma di reverse-engineering
prende il nome di DocXAL ed è usata per semplificare la ristrutturazione di programmi esistenti. È una
piattaforma ancora in via di sviluppo, e stiamo definendo funzioni per introdurvi delle operazioni di analisi
utilizzate di frequente (ad es. poter compattare un insieme di stati in uno solo, o poter decidere quali procedure
esplorare e quali considerare operazioni “atomiche”).
XAL ed il suo ambiente di sviluppo sono stati impiegati, in collaborazione con Computer VAR ITT, un'azienda
IT di Verona. Assieme abbiamo utilizzato XAL per realizzare sistemi di monitoraggio dinamici, dove cioè i nodi
da osservare possono aggiungersi o essere rimossi nel corso del tempo.
Mentre si è deciso di rilasciare gli strumenti di sviluppo (interprete e IDE) come software libero, al momento il
servizio di reverse-engineering, DocXAL, è mantenuto come software proprietario, per ragioni strategiche e
perché ancora in stato embrionale.
Parole Chiave: Linguaggi, Automi, Software Engineerign, Reengineering, Model Checking