Obiettivi formativi
Il corso mira a fornire le conoscenze fondamentali per comprendere la
natura profonda degli strumenti, dei metodi e dei problemi della
specifica di sistemi software basata su canoni di rigore matematico
e orientata da principi di progettazione di alta qualità.
Si presta particolare attenzione agli aspetti concettuali più
che all'esposizione di metodi particolari, al fine di favorire la
costruzione di un bagaglio culturale persistente rispetto alla continua
evoluzione del settore dei metodi formali di specifica del software.
Il programma del corso richiede una precedente familiarità con i
concetti basilari di logica e con le principali tematiche dell'ingegneria
del software.
Attività formative
Il corso prevede lo svolgimento di 32 ore di lezioni ed esercitazioni
frontali in aula e di 12 ore di esercitazioni in laboratorio.
L'apprendimento della materia è sostenuto dallo studio
dei materiali didattici di riferimento, nonché di eventuali
altri materiali bibliografici opzionali, e dal loro uso per la
produzione di contributi durante lo svolgimento del corso, quali:
sviluppo di esercizi, elaborazione di tesine, approfondimento di temi
speciali d'interesse, sperimentazione in laboratorio, presentazione
di seminari, etc.
Temi speciali di interesse di questa edizione del corso sono:
- metodi di specifica evolutiva di sistemi software
- metodi di sintesi di programmi da specifiche formali
- formalizzazione del processo di sviluppo del software
nonché i temi risultanti da combinazioni dei temi suddetti.
Programma del corso
- Introduzione alla specifica formale di sistemi software:
uso delle specifiche formali nel ciclo di vita del software,
ingegnerizzazione dei requisiti e specifiche costruttive,
validazione di requisiti,
verifica di correttezza,
collaudo di conformità,
strumenti di supporto alla specifica formale.
- Fondamenti di specifica algebrica:
algebre segnate, omomorfismi, congruenze, quozienti, sottoalgebre,
teorema del morfismo, algebre di termini, valutazione,
morfismi di segnature, algebre ridotte,
algebre finitamente generate, inizialità, finalità,
reticolo delle congruenze sull'algebra dei termini chiusi,
equazioni, presentazioni, teorie, calcoli equazionali,
consistenza, completezza, inferenza induttiva,
algebre in senso lato, algebre multi-sortali, algebre di tipi,
algebre parziali, strutture algebriche con relazioni,
generalizzazioni dei concetti basilari di specifica algebrica.
- Sistemi di riscrittura di termini e loro estensioni:
sistemi di riduzione, proprietà di confluenza e di terminazione,
regole di riscrittura di termini, algoritmi di calcolo,
elementi di stile di specifica operativa,
sistemi condizionali di riscrittura di termini,
estensioni di sistemi di riscrittura di termini con assegnamenti di tipo.
- Linguaggi di specifica formale:
cenni storici sui linguaggi di specifica algebrica,
introduzione al linguaggio CASL, idee di progetto del linguaggio,
sommario dei principali costrutti per le specifiche di base,
per la strutturazione di specifiche, per specifiche di architettura,
tendenze e direzioni di sviluppo.
- Introduzione alla teoria delle categorie:
cenni storici, categorie, dualità, funtori, trasformazioni naturali,
equivalenza di categorie, categorie di funtori, costruzioni categoriali,
frecce universali e aggiunzioni, coni, limiti e loro duali.
- Fondamenti di teoria delle istituzioni:
la metateoria delle istituzioni per la specifica formale,
sistemi logici e istituzioni semplici,
istituzioni con categorie di modelli,
specifiche in una istituzione arbitraria,
relazioni di conseguenza,
morfismi di istituzioni.
- Semantica della specifica formale:
semantica lasca, semantiche costruttive, semantiche vincolate,
semantiche osservazionali.
- Struttura e modularizzazione di specifiche formali:
operazioni basilari di costruzione di specifiche,
specifica parametrica, passaggio di parametri, persistenza,
moduli di specifica, sistemi modulari.
- Raffinamento e implementazione di specifiche formali:
concetti di implementazione di specifiche formali,
aspetti sintattici, composizione di specifiche,
raffinamento di specifiche modulari,
implementazione di sistemi modulari.
- Sistemi di supporto alla dimostrazione:
sistemi di deduzione automatica con principi di induzione,
dimostrazione basata sulla bisimulazione per specifiche con semantica finale,
tecniche di goal-solving e metodi basati sull'uso di tableaux.
- Specifica di sistemi concorrenti e ad oggetti:
algebre di processi, specifica algebrica di tipi di dati statici,
tipi di dati dinamici, semantica algebrica delle classi,
specifica di sistemi di oggetti.
- Specifica di processi di sviluppo del software:
formalizzazione di processi software attraverso regole di sviluppo,
grafo del processo di sviluppo, schemi di regole di sviluppo,
strumenti di supporto allo sviluppo del software basato su regole di sviluppo.