Ingegneria del software

A.A. 2015/2016
Insegnamento per
12
Crediti massimi
120
Ore totali
Lingua
Italiano
Obiettivi formativi
Conoscenza dei modelli e degli strumenti per l'analisi, il progetto, lo sviluppo e il collaudo dei sistemi software. Capacità di progetto, sviluppo e collaudo di sistemi software.

Struttura insegnamento e programma

Linea Milano
Edizione attiva
Laboratori: 48 ore
Lezioni: 72 ore
Turni:
Turno B
Docente: Santini Massimo
Programma
Il corso è diviso in 4 parti ed è articolato nella seguente maniera

Processi di sviluppo del software:
- Qualità del software
- Attività del ciclo di sviluppo del software
- Modelli di cicli di vita del software
- Unified Process
- CMMI: maturità dei processi
- Metodologie agili
- eXtreme Programming
- modello di sviluppo open source

Progettazione:
- modello di progettazione orientato agli oggetti
- Polimorfismo e Collegamento Dinamico
- Relazioni tra oggetti
- Identificazione delle classi
- diagrammi UML: Class, Sequence, State, Object, UseCase, Activity, Component, Deployment
- Patterns: Observer, Decorator, Strategy, Singleton, Factory, Adapter, Composite, Facade, State, Command, Model-View-Controller

Verifica e Convalida:
- Introduzione alla verifica e convalida del software e alla terminologia specifica
- Tecniche di analisi Statica
- Tecniche di analisi dinamica
- Criteri di copertura del testing: comandi, decisioni, condizioni, cammini, condizioni modificate, k-copertura cicli
- Testing strutturale
- test doubles: stub, mock, spy, e fake objects
- Testing funzionale
- Analisi statica Data-Flow
- Test mutazionale
- Debugging
- Ispezione del codice di Fagan


Specifiche formali:
- reti di petri
- Definizione formale
- Relazioni tra transizioni: Sequenza, Conflitto, Concorrenza
- Proprietà delle reti: Limitatezza, Conservatività
- Analisi dinamica delle reti: Insieme raggiungibilità, Albero di raggiungibilità, Albero di copertura
- Analisi statica delle reti: P.invarianti e T invarianti
- Reti di Petri Temporizzate: TB nets e varie semantiche temporali
- Analisi Reti di Petri Temporizzate: albero di raggiungibilità simbolico
Propedeuticità
Programmazione, Algoritmi, Logica
Prerequisiti e modalità di esame
L'esame consiste in due prove entrambe obbligatorie:
- la prima prova (della durata di 4 ore) viene svolta in laboratorio e prevede di scrivere un programma che risolva delle specifiche date. La valutazione mirerà a accertare l'apprendimento della tecnica di sviluppo Test-Driven Development, dell'uso dei pattern, e delle tecniche di collaudo presentate sia a lezione che durate le esercitazioni in laboratorio.
- la seconda prova è invece orale e verte su tutti gli argomenti trattati nel corso: processi, progettazione, specifiche formali, verifica e convalida del software.
Metodi didattici
Lezioni: frontali con proiezioni delle slide (sul sito del corso è disponibile la videoregistrazione delle lezioni)

Laboratori: esercitazioni guidate in aule informatizzate. ogni esercitazione affronta uno specifico argomento proponendo esercizi concreti, per la cui soluzione è necessario mettere a frutto quanto acquisito durante le ore di lezione. (sul sito del corso è disponibile la videoregistrazione della eventuale parte iniziale frontale di ogni laboratorio )
Materiale didattico e bibliografia
Lucidi e videoregistrazione delle lezioni disponibili sul sito del corso

link e risorse di rete suggerite durante le lezioni

LIBRI CONSIGLIATI:
- Carlo Ghezzi, Mehdi Jazayeri, Dino Mandrioli - Ingegneria del software. Fondamenti e principi - Pearson
- Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra - Head First Design Patterns - O'Reilly Media
- Albert Endres, Dieter Rombach , H. Dieter Rombach - A Handbook of Software and Systems Engineering: Empirical Observations, Laws and Theories - Addison-Wesley
Periodo
Secondo semestre
Periodo
Secondo semestre
Modalità di valutazione
Esame
Giudizio di valutazione
voto verbalizzato in trentesimi
Docente/i
Ricevimento:
su appuntamento
ufficio 5006 Via Celoria 18 - Milano
Ricevimento:
Su appuntamento.
Studio 5007 - via Celoria, 18