Progettazione di software sicuro
A.A. 2024/2025
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.
Periodo: Primo semestre
Modalità di valutazione: Esame
Giudizio di valutazione: voto verbalizzato in trentesimi
Corso singolo
Questo insegnamento può essere seguito come corso singolo.
Programma e organizzazione didattica
Edizione unica
Responsabile
Periodo
Primo semestre
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:
- Specifica di Contratti in Java Modeling Language.
- Testing Unitario di codice Java
- Copertura del codice
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:
- Specifica di Contratti in Java Modeling Language.
- Testing Unitario di codice Java
- Copertura del codice
Prerequisiti
Prerequisiti dell'insegnamento 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.
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
· 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 che punta ad accertare le conoscenze dello studente sugli vari aspetti della materia (tramite domande a risposta aperta e/o esercizi). La prova scritta è valutata in trentesimi.
INF/01 - INFORMATICA - CFU: 6
Laboratori: 24 ore
Lezioni: 36 ore
Lezioni: 36 ore
Docenti:
Ciriani Valentina, Riccobene Elvinia Maria
Turni:
Docente/i
Ricevimento:
Su appuntamento via e-mail
Dipartimento di Informatica - Via Celoria 18 - 20135 - Milano (MI)