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