Progettazione di software sicuro

A.A. 2019/2020
Insegnamento per
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.
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.

Struttura insegnamento e programma

Edizione attiva
INF/01 - INFORMATICA - CFU: 6
Lezioni: 48 ore
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.
Informazioni sul programma
Alla fine del corso lo studente sarà in grado di pianificare lo sviluppo di progetti software con aspetti di sicurezza. Saprà affrontare la modellazione di requisiti del software tramite macchine a stati finiti, sviluppare codice Java dal modello ed eseguirne testing di codice.
Propedeuticità
Sono propedeuticità consigliate i corsi di Programmazione e di Sicurezza nei sistemi web e mobili
Prerequisiti e modalità di esame
Prerequisiti del corso sono le conoscenze ed i concetti forniti dai corsi di Programmazione e di Sicurezza nei sistemi web e mobili

L'esame consiste di una prova scritta e di una prova pratica in laboratorio, entrambe obbligatorie. 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.
Metodi didattici
Lezioni frontali ed esercitazioni
Materiale didattico e bibliografia
· 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
Periodo
Secondo quadrimestre
Modalità di valutazione
Esame
Giudizio di valutazione
voto verbalizzato in trentesimi
Docente/i
Ricevimento:
Su appuntamento via e-mail
Dipartimento di Informatica - sede di Crema o sede di via Celoria 18
Ricevimento:
su appuntamento
Dipartimento di Informatica