Ingegneria del software

A.A. 2021/2022
12
Crediti massimi
120
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
L'obiettivo dell'insegnamento è fornire agli studenti la conoscenza dei modelli e degli strumenti per l'analisi, il progetto, lo sviluppo e il collaudo dei sistemi software, e di metterli in grado di progettare, sviluppare e collaudare sistemi software.
Risultati apprendimento attesi
Lo studente sarà in grado di pianificare lo sviluppo di progetti software di medie dimensioni. Saprà affrontare la modellazione dei requisiti, sviluppare il codice dal modello e convalidarlo.
Avrà acquisito competenze su pattern ricorrenti sia di progettazione che di architetture.
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.

L'intero materiale didattico dell'insegnamento è disponibile sul sito Ariel dell'insegnamento.
Link http://ericcobeneps.ariel.ctu.unimi.it/
Programma
1. PRODOTTO E PROCESSO. 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. MODEL-DRIVEN ENGINEERING. Principi dell' MDE. Modello e meta-modello. Profili UML per la specifica di Domain-Specific Languages.
3. SPECIFICA E PROGETTAZIONE DI SOFTWARE. Proprietà di specifiche di software. Metodi di specifica operazionele: Macchine a stati finiti. Communicating Machines. Metodi di specifica dichiarativa: Design by contract. Il tool JML.
4. MODELLAZIONE UML: SPECIFICA STRUTTURALE. Modellare con le classi (diagramma delle classi, diagramma degli oggetti). Specifica dei vincoli: OCL. Uso dei Design pattern.
5. MODELLAZIONE UML: SPECIFICA COMPORTAMENTALE. Modellare interazioni e comportamento (diagrammi di interazione, macchine di stato, diagrammi di attività).
6. ARCHITETTURE SOFTWARE. Principi di architetture sicure. Java sandbox. MDA (model-driven architecture).
7. PROCESSO UP (UNIFIED PROCESS) E SPECIFICA DI ARCHITETTURE SW. Il processo UP. Principi guida per lo sviluppo di architetture SW. Modellazione UML dell'architettura (diagramma delle componenti, digramma di dislocamento).
8 DESIGN PATTERNS: Pattern strutturali ed architetturali.
9. 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.
10. 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 delle attività di laboratorio:
- Specifica di Contratti in Java Modeling Language.
- Testing Unitario di codice Java
- Copertura del codice
- Uso dell'ambiente MODELIO
- Sviluppo in Modelio dei diversi diagrammi UML
- Sviluppo di un modello UML partendo da requisiti informali
- Codiifica in Java di un modello di progetto in UML
Prerequisiti
Prerequisiti del corso sono le competenze acquisite negli insegnamenti di Programmazione 2. Il superamento
di tale esame è quindi fortemente consigliato.
Metodi didattici
Lezioni frontali ed esercitazioni 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.
· Martin Fowler. UML distilled. Guida rapida al linguaggio di modellazione standard, Pearson Education Italia, 2010, 4ª ed.
· Luciano Baresi, Luigi Lavazza, Massimiliano Pianciamore. Dall'idea al codice con UML 2. Guida all'utilizzo di UML attraverso esempi. Con CD-ROM., Pearson Education Italia, 2006.
· Craig Larman. Applying UML and Patterns. An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) - Prentice Hall (2004).
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame consiste di due prove scritte (una relativa al Mod1 ed una relativa al Mod2) e di una prova pratica, entrambe obbligatorie. Le prove scritte, della durata di due ore, mirano ad accertare le conoscenze dello studente sugli aspetti teorici della materia (tramite domande a risposta aperta e/o esercizi). La prova pratica consiste nello sviluppo di un modello UML, e successiva implementazione in Java, di un progetto i cui requisiti informali sono forniti dal docente. Tale prova mira ad accertare le competenze dello studente sulla modellazione del Software mediante UML e sua implementazione in Java. La valutazione di ciascuna prova è in trentesimi ed il voto finale è la media delle valutazioni.

Gli eventuali esami a distanza saranno così articolati: la prova scritta si svolgerà tramite la piattaforma exam.net (con le modalità illustrate sul portale dell'Ateneo.) ed avrà la medesima struttura di quella in presenza con durata possibilmente di poco ridotta; la discussione del progetto avverrà tramite piattaforma ZOOM.
Moduli o unità didattiche
Unita' didattica A
INF/01 - INFORMATICA - CFU: 4.5
Lezioni: 36 ore

Unita' didattica B
INF/01 - INFORMATICA - CFU: 1.5
Laboratori: 24 ore
Docente: Braghin Chiara

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

Unita' didattica D
INF/01 - INFORMATICA - CFU: 1.5
Laboratori: 24 ore
Docente: Braghin Chiara

Siti didattici
Docente/i
Ricevimento:
Su appuntamento
Ricevimento:
su appuntamento
Dipartimento di Informatica