DEVELOPMENT OF RELIABLE, SAFE AND SECURE SOFTWARE
cod. 1009069

Anno accademico 2022/23
1° anno di corso - Secondo semestre
Docente
- Roberto BAGNARA
Settore scientifico disciplinare
Informatica (INF/01)
Field
Discipline informatiche
Tipologia attività formativa
Caratterizzante
48 ore
di attività frontali
6 crediti
sede:
insegnamento
in INGLESE

Obiettivi formativi

L'obiettivo finale del corso è quello di trasmettere le basi di tutte le fasi coinvolte nella realizzazione di software con requisiti stringenti di affidabilità e sicurezza, con particolare riferimento ai sistemi critici imbarcati. Dando per scontato le competenze di risoluzione dei problemi mediante la scrittura di programmi in C/C++, il corso copre la specifica, la progettazione, la stesura e la verifica del software; il tutto nel contesto dei processi di sviluppo prescritti dagli standard industriali per la realizzazione di sistemi sicuri.

Conoscenza e capacità di comprensione
Il corso introduce temi importanti riguardanti lo sviluppo di software in ambito industriale e, soprattutto, critico. Tali temi sono tanto più importanti in quanto, in tutti i percorsi di studio universitari o post-universitari, sono spesso tralasciati o limitati ad esposizioni di principio senza alcun concreto collegamento con la realtà industriale. Il corso cita i metodi formali e le loro potenzialità, ma non vi si addentra (lasciando il loro approfondimento ad altri corsi con ben altri prerequisiti di tipo logico-matematico), puntando invece alla comprensione del rapporto tra costi e benefici dei metodi formali, semi-formali e informali applicati a contesti industriali.

Conoscenze applicate e capacità di comprensione
Le conoscenze teoriche presentate vengono sempre applicate alla risoluzione di problemi specifici. Il corso di sviluppa intorno ad un esempio concreto di software imbarcato scelto all’inizio del corso. Per tale esempio, gli studenti assisteranno a (e concorreranno a svolgere) tutte le fasi dello sviluppo, dalla stesura dei requisiti alla verifica.

Autonomia di giudizio
Il corso si fonda sulle prescrizioni degli standard industrial di functional-safety. Tali standard fanno riferimento a precisi obiettivi da conseguire e a suddivisioni dei ruoli (sviluppatori, verificatori, assessor ed enti certificatori) che richiedono autonomia di giudizio. Alla fine non si tratta solo di conseguire degli obiettivi, ma di argomentarne l’adeguatezza e il conseguimento di fronte a dei pari.

Abilità comunicative
Per quanto già detto, il corso fa pressante riferimento alla necessità di una generale precisione e chiarezza comunicativa (ad esempio, nella stesura dei requisiti). Più specificatamente, il corso insegna le basi della costruzione di argomentazioni strutturate, supportate da evidenze adeguate, che giustificano il fatto che un sistema è accettabilmente sicuro per una determinata applicazione in un determinato ambiente operativo. Tali argomentazioni (safety case) richiedono l’affinamento delle proprie capacità comunicative.

Capacità di apprendimento
Quasi tutto il materiale didattico ha origine extra-universitaria. Se da una parte questo richiede agli studenti notevole flessibilità (nel passaggio da una fonte all’altra, nella necessità di interpolare le informazioni reperibili nelle varie fonti), dall’altra parte li stimola ad impratichirsi con una modalità di reperimento delle informazioni e di assimilazione dei concetti che sarà una costante di tutta la loro vita professionale.

Prerequisiti

nessuno

Contenuti dell'insegnamento

I. Affidabilità e sicurezza dei sistemi con componenti software
II. Processi di sviluppo software e standard di sicurezza funzionale
III. Specifica dei requisiti di alto e di basso livello
IV. Progettazione software per sistemi critici
V. Stesura di codice per sistemi critici
VI. Verifica del software

Programma esteso

- - -

Bibliografia

Nancy G. Leveson. Engineering a Safer World: Systems Thinking Applied to Safety. The MIT Press, 2012. ISBN 978-0-262-01662-9.
Mauro Pezzè, Michal Young. Software Testing and Analysis: Process, Principles and Techniques. Wiley, 2008. ISBN 0471455938.
Michael Jackson. Software Requirements & Specifications: a lexicon of practice, principles and prejudices. ACM Press/Addison-Wesley, 1995. ISBN 978-0-201-87712-0.
FAA - Air Traffic Organization. Requirements Engineering Management Handbook. U.S. Department of Transportation, Federal Aviation Administration, 2009.
Derek M. Jones. Evidence-based Software Engineering (based on the publicly available data). http://www.knosof.co.uk/ESEUR/ESEUR-draft.pdf

Metodi didattici

Lezioni frontali con esercitazioni assistite.

Modalità verifica apprendimento

Risultati dell'apprendimento e modalità di verifica
Saper affrontare, con cognizione di causa, tutte le fasi dello sviluppo di un sistema critico. Capire le prescrizioni principali degli standard di industriali di functional safety e come queste incidano su tutte le fasi del processo di sviluppo. Saper argomentare, di fronte a pari di confrontabile competenza ed esperienza, l’adeguatezza delle scelte e dei risultati di ogni fase del processo di sviluppo.

Modalità di verifica / esame
L'esame consiste in un progetto finale seguito da un colloquio orale. Gli elaborati inerenti il progetto vanno consegnati almeno 15 giorni prima della data di appello nella quale si intende sostenere la prova orale. La valutazione degli elaborati viene notificata allo studente almeno 7 giorni prima dell’appello. In caso di valutazione negativa degli elaborati, lo studente ha la possibilità di migliorarli e risottometterli (senza cambiare progetto), sempre rispettando la distanza minima di 15 giorni tra la data di sottomissione e la data dell’appello nel quale si intende sostenere la prova orale

Altre informazioni

- - -