Ingegneria del software

A.A. 2018/2019
Insegnamento per
12
Crediti massimi
120
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
Il corso presenta i principi, i processi e le tecniche per la progettazione e lo sviluppo di applicazioni software. Il corso è organizzato in due parti tra loro complementari: i principi dell'ingegneria del software e la progettazione model-driven. L'obiettivo della prima parte è quello di fornire le conoscenze necessarie per la progettazione di software e per l'analisi del codice prodotto attraverso test e tecniche di analisi statica e dinamica del flusso esecutivo. La finalità della seconda parte è quella di introdurre le più moderne tecniche di progettazione basate sull'uso di modelli, a diversi livelli di astrazione sia PIM (platform independent model) che PSM (platform specific model), l'uso delle trasformazioni di modelli per la codifica, e design pattern architetturali per un design a componenti.
Alla fine del corso lo studente sarà in grado di pianificare lo sviluppo di progetti software aventi anche aspetti di sicurezza. Avrà imparato a produrre la specifica completa in termini di modelli UML partendo dai requisiti informali. Avrà acquisito competenze su pattern ricorrenti sia di progettazione che di architettura. Sarà capace di sviluppare la codifica in Java partendo dalla modellazione del sistema. Sarà inoltre in grado di eseguire testing unitario di codice Java.

Struttura insegnamento e programma

Linea Crema
Edizione attiva
Moduli o unità didattiche
Unità didattica A - lezioni
INF/01 - INFORMATICA - CFU: 4
Lezioni: 36 ore

Unità didattica B - laboratorio
INF/01 - INFORMATICA - CFU: 1
Laboratori: 24 ore

Unità didattica C - lezioni
INF/01 - INFORMATICA - CFU: 4
Lezioni: 36 ore

Unità didattica D - laboratorio
INF/01 - INFORMATICA - CFU: 1
Laboratori: 24 ore

Propedeuticità
Programmazione, Algoritmi e Strutture Dati
Prerequisiti e modalità di esame
I prerequisiti richiesti riguardano la conoscenza ed i concetti forniti dai corsi di Programmazione, Algoritmi e Strutture Dati

L'esame di articola nelle seguenti prove, ciascuana atta a valutare le competenze acquisite dallo studente nelle singole Unità Didattiche in cui il corso è articolato:
1. Prova scritta della durata di 2 ore su Unità Didattica A
2. Prova in laboratorio della durata di 2 ore su Unità Didattica B
3. Prova scritta della durata di 2 ore su Unità Didattica C
4. Progetto su Unità Didattica D

Tutte le prove sono obbligatorie: le prove scritte vertono ad accertare le competenze acquisit su aspetti teorici del corso, le prove in laboratorio e di progetto ad accertare le competenze di progettazione e convalida di sistemi software. Eventuali informazioni aggiuntive sui criteri di valutazione sono illustrate durante il corso.
Metodi didattici
Lezioni frontali in aula e laboratorio
Unità didattica A - lezioni
Programma
1. CICLO DI VITA DEL SOFTWARE. Proprietà del software. Fasi di sviluppo del software. Modelli di ciclo di vita. La sicurezza nel ciclo di vita del software. Ciclo di vulnerabilità.
2. ARCHITETTURE SOFTWARE. Principi di architetture. Linee guida e principi per architetture sicure.
3. SPECIFICA E PROGETTAZIONE DI SOFTWARE. Proprietà di specifiche di software. Metodi di specifica. Macchine a stati finiti. Communicating Machines. Design by contract. 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. Java sandbox. 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.
6. MODEL-DRIVEN ENGINEERING. Principi dell' MDE. Modello e meta modello. Contesti di applicazione dell' MDE: MDA (model-driven architecture), Profili UML per la specifica di Domain-Specific Languages.
7. MODELLAZIONE UML: SPECIFICA STRUTTURALE. Modellare con le classi (diagramma delle classi, diagramma degli oggetti). Specifica dei vincoli: OCL. Uso dei Design pattern.
8. MODELLAZIONE UML: SPECIFICA COMPORTAMENTALE. Modellare interazioni e comportamento (diagrammi di interazione, macchine di stato, diagrammi di attività).
9. 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). Pattern architetturali.
Metodi didattici
Lezioni frontali
Materiale didattico e bibliografia
· 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.
· Timothy C. Lethbridge and Robert Laganière. Object-Oriented Software Engineering: Practical Software Development using UML and Java. Second Edition. McGraw Hill.
· Mark G. Graff, Kenneth R. van Wyk. Secure Coding: Principles and Practices. O'Reilly, 2003.
· Craig Larman. Applying UML and Patterns. An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) - Prentice Hall (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.
Unità didattica B - laboratorio
Programma
1. CICLO DI VITA DEL SOFTWARE. Proprietà del software. Fasi di sviluppo del software. Modelli di ciclo di vita. La sicurezza nel ciclo di vita del software. Ciclo di vulnerabilità.
2. ARCHITETTURE SOFTWARE. Principi di architetture. Linee guida e principi per architetture sicure.
3. SPECIFICA E PROGETTAZIONE DI SOFTWARE. Proprietà di specifiche di software. Metodi di specifica. Macchine a stati finiti. Communicating Machines. Design by contract. 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. Java sandbox. 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.
6. MODEL-DRIVEN ENGINEERING. Principi dell' MDE. Modello e meta modello. Contesti di applicazione dell' MDE: MDA (model-driven architecture), Profili UML per la specifica di Domain-Specific Languages.
7. MODELLAZIONE UML: SPECIFICA STRUTTURALE. Modellare con le classi (diagramma delle classi, diagramma degli oggetti). Specifica dei vincoli: OCL. Uso dei Design pattern.
8. MODELLAZIONE UML: SPECIFICA COMPORTAMENTALE. Modellare interazioni e comportamento (diagrammi di interazione, macchine di stato, diagrammi di attività).
9. 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). Pattern architetturali.
Metodi didattici
Laboratorio
Materiale didattico e bibliografia
· 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.
· Timothy C. Lethbridge and Robert Laganière. Object-Oriented Software Engineering: Practical Software Development using UML and Java. Second Edition. McGraw Hill.
· Mark G. Graff, Kenneth R. van Wyk. Secure Coding: Principles and Practices. O'Reilly, 2003.
· Craig Larman. Applying UML and Patterns. An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) - Prentice Hall (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.
Unità didattica C - lezioni
Programma
1. CICLO DI VITA DEL SOFTWARE. Proprietà del software. Fasi di sviluppo del software. Modelli di ciclo di vita. La sicurezza nel ciclo di vita del software. Ciclo di vulnerabilità.
2. ARCHITETTURE SOFTWARE. Principi di architetture. Linee guida e principi per architetture sicure.
3. SPECIFICA E PROGETTAZIONE DI SOFTWARE. Proprietà di specifiche di software. Metodi di specifica. Macchine a stati finiti. Communicating Machines. Design by contract. 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. Java sandbox. 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.
6. MODEL-DRIVEN ENGINEERING. Principi dell' MDE. Modello e meta modello. Contesti di applicazione dell' MDE: MDA (model-driven architecture), Profili UML per la specifica di Domain-Specific Languages.
7. MODELLAZIONE UML: SPECIFICA STRUTTURALE. Modellare con le classi (diagramma delle classi, diagramma degli oggetti). Specifica dei vincoli: OCL. Uso dei Design pattern.
8. MODELLAZIONE UML: SPECIFICA COMPORTAMENTALE. Modellare interazioni e comportamento (diagrammi di interazione, macchine di stato, diagrammi di attività).
9. 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). Pattern architetturali.
Metodi didattici
Lezioni frontali
Materiale didattico e bibliografia
· 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.
· Timothy C. Lethbridge and Robert Laganière. Object-Oriented Software Engineering: Practical Software Development using UML and Java. Second Edition. McGraw Hill.
· Mark G. Graff, Kenneth R. van Wyk. Secure Coding: Principles and Practices. O'Reilly, 2003.
· Craig Larman. Applying UML and Patterns. An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) - Prentice Hall (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.
Unità didattica D - laboratorio
Programma
1. CICLO DI VITA DEL SOFTWARE. Proprietà del software. Fasi di sviluppo del software. Modelli di ciclo di vita. La sicurezza nel ciclo di vita del software. Ciclo di vulnerabilità.
2. ARCHITETTURE SOFTWARE. Principi di architetture. Linee guida e principi per architetture sicure.
3. SPECIFICA E PROGETTAZIONE DI SOFTWARE. Proprietà di specifiche di software. Metodi di specifica. Macchine a stati finiti. Communicating Machines. Design by contract. 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. Java sandbox. 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.
6. MODEL-DRIVEN ENGINEERING. Principi dell' MDE. Modello e meta modello. Contesti di applicazione dell' MDE: MDA (model-driven architecture), Profili UML per la specifica di Domain-Specific Languages.
7. MODELLAZIONE UML: SPECIFICA STRUTTURALE. Modellare con le classi (diagramma delle classi, diagramma degli oggetti). Specifica dei vincoli: OCL. Uso dei Design pattern.
8. MODELLAZIONE UML: SPECIFICA COMPORTAMENTALE. Modellare interazioni e comportamento (diagrammi di interazione, macchine di stato, diagrammi di attività).
9. 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). Pattern architetturali.
Metodi didattici
Laboratorio
Materiale didattico e bibliografia
· 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.
· Timothy C. Lethbridge and Robert Laganière. Object-Oriented Software Engineering: Practical Software Development using UML and Java. Second Edition. McGraw Hill.
· Mark G. Graff, Kenneth R. van Wyk. Secure Coding: Principles and Practices. O'Reilly, 2003.
· Craig Larman. Applying UML and Patterns. An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition) - Prentice Hall (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.
Periodo
Primo semestre
Periodo
Primo semestre
Modalità di valutazione
Esame
Giudizio di valutazione
voto verbalizzato in trentesimi
Siti didattici
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