Progettazione di software sicuro

A.A. 2024/2025
6
Crediti massimi
48
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.
Corso singolo

Questo insegnamento non può essere seguito come corso singolo. Puoi trovare gli insegnamenti disponibili consultando il catalogo corsi singoli.

Programma e organizzazione didattica

Edizione unica

Periodo
Secondo quadrimestre

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. Il caso di studio di Java sandbox.
3. SPECIFICA E PROGETTAZIONE DI SOFTWARE SICURO. Proprietà di specifiche di software sicuro. Metodi di specifica: 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.
Prerequisiti
Prerequisiti del corso sono le conoscenze ed i concetti forniti dai corsi di Programmazione e di Sicurezza nei sistemi web e mobili. Il superamento di questi esami è quindi fortemente consigliato.
Metodi didattici
Lezioni ed attività di laboratorio
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.
· G. Pighizzini, M. Ferrari. Dai fondamenti agli oggetti - Corso di Programmazione Java. Terza Edizione. Pearson Education, 2008.

Sito web:
http://ericcobenepss.ariel.ctu.unimi.it/
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame consiste di una prova scritta, obbligatoria e della durata di due ore. La prova d'esame punta ad accertare, tramite domande a risposta aperta ed esercizi, le conoscenze dello studente sugli aspetti teorici dell'insegnamento e le competenze su alcuni strumenti software per la definizione di contratti e la validazione di codice Java.
INF/01 - INFORMATICA - CFU: 6
Lezioni: 48 ore
Turni:
Turno
Docente: Riccobene Elvinia Maria
Docente/i
Ricevimento:
su appuntamento
Dipartimento di Informatica