Ingegneria del software
A.A. 2021/2022
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.
Avrà acquisito competenze su pattern ricorrenti sia di progettazione che di architetture.
Periodo: Primo semestre
Modalità di valutazione: Esame
Giudizio di valutazione: voto verbalizzato in trentesimi
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
Responsabile
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/
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
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.
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).
· 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.
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
Docente:
Riccobene Elvinia Maria
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
Docente:
Riccobene Elvinia Maria
Unita' didattica D
INF/01 - INFORMATICA - CFU: 1.5
Laboratori: 24 ore
Docente:
Braghin Chiara
Docente/i
Ricevimento:
Su appuntamento