UNIVERSITÀ DEGLI STUDI DI MILANO BICOCCA FACOLTÀ DI SCIENZE MATEMATICHE FISICHE E NATURALI Corso di Laurea Magistrale in Informatica Generazione Automatica di Asserzioni da Modelli di Specifica Relatore: Mauro Pezzè Correlatore: Jochen Wuttke Tesi di Laurea di: Mauro Baluda Matr. 038208 tel. 035/301767 Anno Accademico 2008/2009
Abstract L individuazione di nuove tecniche per la rilevazione automatica di malfunzionamenti è importante per la verifica a run time di software complessi, è in particolare un tassello indispensabile per la realizzazione di sistemi self-healing. L analisi di malfunzionamenti in software di largo utilizzo ha permesso di riconoscere in molti di essi violazioni di proprietà strutturali ricorrenti definibili a livello di modelli di specifica. La tesi descrive una metodologia che consente di generare automaticamente il codice eseguibile per la verifica di tali proprietà, un prototipo della sua implementazione utilizzabile all intero di sistemi di sviluppo esistenti, una valutazione di tale prototipo che ne conferma l applicabilità in situazioni reali di sviluppo. 1 Scopo della tesi L utilizzo delle tecniche più avanzate di verifica e validazione del software permette di migliore la qualità dei prodotti software sviluppati ma non garantisce dalla presenza di malfunzionamenti che possono perciò manifestarsi nella fase successiva al loro rilascio. La possibilità di ottenere una rilevazione precisa di questi eventi durante l esecuzione del sistema può consentire agli utenti di evitare le condizioni che li scatenano, segnalarne la presenza agli sviluppatori o ottenere dal sistema stesso una reazione che metta in campo strategie di autocorrezione più o meno sofisticate. La tesi descrive e valuta l efficacia di una nuova metodologia per la rilevazione di difetti funzionali in sistemi software ad oggetti. La tecnica proposta consente di definire proprietà a livello di modellazione strutturale del software e di verificarne automaticamente il rispetto nel prodotto finito. 2 Metodologia studiata Per supportare gli sviluppatori nella rilevazione di malfunzionamenti nei loro sistemi software, proponiamo una metodologia che consente la definizione di un legame preciso tra proprietà invarianti di alto livello identificabili nelle specifiche del sistema e il codice eseguibile che ne verifica la validità durante l esecuzione. La tecnica permette, a partire dall annotazione di un modello anche parziale del sistema, di generare automaticamente i rilevatori adatti sotto forma di asserzioni in linea, pronti per essere messi direttamente in esecuzione. 1
Il metodo proposto è adatto ad essere adottato nel contesto di sistemi software orientati agli oggetti e presenta caratteristiche che lo avvicinano alle metodologie definite nell ambito della Model Driven Architecture, in particolare il tentativo di rendere la fase di modellazione di un sistema parte integrante della sua implementazione finale grazie all ingente impiego di tecniche di generazione automatica del codice. Descriviamo in tre passi come sia possibile trasformare proprietà astratte, estratte dai requisiti del sistema, nel codice eseguibile che le verifica: 1. Estrazione di informazioni dalle specifiche: L estrazione di informazioni da requisiti informali è un attività che non può essere automatizzata facilmente e che prevede da parte del progettista l individuazione di proprietà inviarianti del sistema di cui si voglia ottenere il monitoraggio durante l esecuzione. 2. Annotazione del modello strutturale: L annotazione di un modello permette di tradurre le proprietà individuate informalmente al punto precedente in un formato che possa essere manipolato automaticamente. 3. Definizione del legame tra proprietà e codice sorgente: Si definisce nel dettaglio ed in maniera dipendente dalla piattaforma su cui si vuole operare, come le informazioni disponibili nel modello possano essere utilizzate per la creazione di un rilevatore di malfunzionamenti specifico. Sarà necessario indicare quali modifiche al codice sorgente da monitorare debbano essere introdotte attraverso la realizzazione di rilevatori generici (template) istanziabili con i dati estratti dal modello. 3 Realizzazione di un prototipo Per dimostrare l applicabilità del metodo abbiamo realizzato un prototipo che automatizza la produzione dei rilevatori di malfunzionamenti legati al mancato rispetto di alcune proprietà che abbiamo individuato in software di largo utilizzo. Il prototipo prodotto si concretizza in un plugin per l ambiente di sviluppo Eclipse che supporta l applicazione del metodo proposto a casi reali, in particolare permette la definizione delle proprietà su modelli UML e da questi la generazione di rilevatori in linguaggio AspectJ adatti a monitorare software Java. Il prototipo ha evidenziano nel suo funzionamento alcuni punti di forza: 2
non richiede la modellazione completa del sistema ma solo la presenza degli elementi necessari alla definizione delle proprietà desiderate non richiede la disponibilità del codice sorgente del sistema da monitorare ma soltanto delle sue specifiche funzionali una singola annotazione nel modello può produrre diversi rilevatori anche operanti in parti diverse del sistema il sistema permette l annotazione di modelli preesistenti con strumenti standard generalmente già conosciuti dai progettisti come gli editor grafici per diagrammi UML può essere integrato all interno di strumenti di sviluppo standard e largamente utilizzati in ambito industriale come Eclipse 4 Verifica sperimentale La valutazione dell applicabilità della metodologia analizzata è stata portata a termine attraverso il testing estensivo del prototipo realizzato. In particolare abbiamo mostrato di poter realizzare dei rilevatori per alcuni malfunzionamenti noti nel software Tomcat, implementazione di riferimento per le tecnologie JSP e Servlet. La verifica è consistita nel modellare le classi coinvolte nei malfunzionamenti ed annotarle con le proprietà che ritenevamo non fossero rispettate. Utilizzando il nostro prototipo abbiamo ottenuto da questo modello in modo completamente automatico i rilevatori desiderati che hanno segnalato, come atteso, i difetti prima che portassero ad uno stato inconsistente dell applicazione. 5 Conclusioni Il Lavoro di tesi si proponeva lo studio e la validazione di un metodo per la rilevazione di difetti funzionali fortemente automatizzato ed in grado di fornire dettagli sui problemi rilevati sufficienti per la loro diagnosi ed eventuale successiva correzione. La tecnica proposta permette la definizione di vincoli a livello di modellazione strutturale e descrive i passi necessari per ottenere da un modello opportunamente annotato i rilevatori eseguibili senza necessità di intervento manuale. 3
La tecnica si presta ad essere applicata alla verifica di proprietà molto diverse tra loro, la loro identificazione e definizione apre un ambito di ricerca che potrebbe rivelarsi fertile. 4