Progettazione di software sicuro

A.A. 2021/2022
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.
Programma e organizzazione didattica

Edizione unica

Periodo
Secondo quadrimestre
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.

L'intero materiale didattico dell'insegnamento è disponibile sul sito Ariel dell'insegnamento.
Link: http://ericcobenepss.ariel.ctu.unimi.it/
Link:
Programma
1. SOFTWARE SECURITY. Software properties. Properties of secure software. Software life cycle: software development steps, life cycle models. Security in the software life cycle. The vulnerability cycle. Design-level attacks. Implementation-level attacks. Operations-level attacks.

2. SECURITY ARCHITECTURE. Principles of security architecture. Security architecture guide lines. Criteria for selecting secure technologies The Java sandbox case study.

3. DESIGN OF SECURE SOFTWARE. Properties of secure software models. Specification methods. Finite state machines. Communicating Machines. UML state machines. Design by contract. Java Modeling Language tool.

4. IMPLEMENTATION. Good and bad implementation practices. Security level of programming languages. Security violations in C code. Secure C code. An introduction to the Java Language. From models to code: finite state machines in Java.

5. TESTING. The testing activity within the software life cycle. Kinds of testing. Validation and verification techniques. Testing limits. Program-based testing. Program flow chart. Statement coverage, branch coverage, decision and condition coverage. MCC and MCDC methods. Tools Emma and 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 virtuale
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 e di una prova pratica in laboratorio, entrambe obbligatorie ed entrambe della durata di due ore ciascuna. 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 pratica in laboratorio punta ad accertare le competenze dello studente su alcuni strumenti software per la definizione di contratti e la validazione di codice Java.

Gli eventuali esami a distanza saranno svolti con l'utilizzo della piattaforma exam.net, con le modalità illustrate sul portale dell'Ateneo. La prova scritta avrà la medesima struttura e durata possibilmente di poco ridotta rispetto a quella in presenza.
INF/01 - INFORMATICA - CFU: 6
Lezioni: 48 ore
Docente/i
Ricevimento:
su appuntamento
Dipartimento di Informatica