Progettazione di software sicuro

A.A. 2021/2022
6
Crediti massimi
60
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
L'insegnamento si propone di presentare i principi, i processi e le tecniche per la progettazione e l'analisi di applicazioni software, con particolare attenzione agli aspetti di sicurezza.
Risultati apprendimento attesi
Lo studente sarà in grado di pianificare lo sviluppo di progetti software con aspetti di sicurezza. Saprà affrontare la modellazione dei requisiti, sviluppare il codice dal modello e convalidarlo.
Programma e organizzazione didattica

Edizione unica

Periodo
Primo semestre
In relazione alle modalità di erogazione delle attività formative per l'A.A. 2021-22, verranno date indicazioni più specifiche nei prossimi mesi, in base all'evoluzione della situazione sanitaria.

Sito Web: http://ericcobenepss.ariel.ctu.unimi.it/
Programma
1. SICUREZZA DEL SOFTWARE. Proprietà del software. Proprietà del software sicuro. Ciclo di vita del software: fasi di sviluppo del software,
modelli di ciclo di vita. La sicurezza nel ciclo di vita del software. Ciclo di vulnerabilità. Attacchi a livello di progettazione, di implementazione ed di
funzionalità.
2. ARCHITETTURE E TECNOLOGIE SICURE. Principi di architetture sicure. Linee guida e principi per architetture sicure. Criteri di scelta di
tecnologie sicure. Il caso di studio di Java sandbox.
3. SPECIFICA E PROGETTAZIONE DI SOFTWARE SICURO. Proprietà di specifiche di software sicuro. Metodi di specifica. Macchine a stati finiti.
Communicating Machines. Macchine di stato UML. Design by contract. Il tool JML.
4. IMPLEMENTAZIONE. Linee guida per la programmazione sicura. Tipici errori. Sicurezza dei linguaggi di programmazione. Alcune violazioni di
sicurezza in C. Programmi sicuri in C. Introduzione al linguaggio Java. Dalla specifica al codice: macchine a stati finiti in Java.
5. TESTING. Il testing nel ciclo di vita del software. Tipi di testing. Tecniche per la validazione e verifica. I limiti del testing. Testing basato sui
programmi. Grafo di flusso di un programma. Copertura delle istruzioni e degli archi. Copertura delle decisioni e delle condizioni. I metodi MCC e
MCDC. Valutare la copertura con Emma. Il tool JUnit.
Programma per le attività di laboratorio:
- Programmazione in Java.
- Specifica di Contratti in Java Modeling Language.
- Testing Unitario di codice Java
- Copertura del codice
Prerequisiti
Prerequisiti del corso sono le competenze acquisite negli insegnamenti di Programmazione e di Sicurezza nei sistemi web e mobili. Il superamento
di tali esami è quindi fortemente consigliato.
Metodi didattici
Lezioni frontali e in laboratorio
La frequenza è fortemente consigliata.
Materiale di riferimento
· Mark G. Graff, Kenneth R. van Wyk. Secure Coding: Principles and Practices. O'Reilly, 2003.
· Ghezzi Carlo, Jazayeri Mehdi, Mandrioli Dino. Ingegneria del software. Fondamenti e principi. Pearson Education Italia, 2004, 2ª ed.
· Glenford J. Myers, Corey Sandler, Tom Badgett, Todd M. Thomas. The Art of Software Testing. John Wiley & Sons; 2 edition, 2004.
Per la parte di laboratorio:
- G. Pighizzini, M. Ferrari. Dai fondamenti agli oggetti - Corso di Programmazione Java. Quarta Edizione. Pearson Education, 2015
- Cay S. Horstmann, ʺConcetti di informatica e fondamenti di Javaʺ, sesta edizione, Apogeo 2016
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame consiste di una prova scritta e di una prova pratica in laboratorio, entrambe obbligatorie ed entrambe della durata di due ore. La prova
scritta punta ad accertare le conoscenze dello studente sugli aspetti teorici della materia (tramite domande a risposta aperta e/o esercizi). La prova
di laboratorio punta ad accertare le competenze dello studente su alcuni strumenti software per la definizione di contratti e la validazione di codice
Java. La prova scritta è valutata in ventesimi, la prova di laboratorio in decimi ed il voto complessivo consiste nella somma delle due valutazioni.
Moduli o unità didattiche
Unita' didattica laboratorio
INF/01 - INFORMATICA - CFU: 1.5
Laboratori: 24 ore

Unita' didattica lezioni
INF/01 - INFORMATICA - CFU: 4.5
Lezioni: 36 ore

Siti didattici
Docente/i
Ricevimento:
Su appuntamento via e-mail
Dipartimento di Informatica - Via Celoria 18 - 20135 - Milano (MI)
Ricevimento:
su appuntamento
Dipartimento di Informatica