INGEGNERIA DEL SOFTWARE

Crediti: 
9
Settore scientifico disciplinare: 
INFORMATICA (INF/01)
Anno accademico di offerta: 
2016/2017
Semestre dell'insegnamento: 
Primo Semestre
Lingua di insegnamento: 

Italiano

Obiettivi formativi

Proporre un percorso che, partendo dall'analisi della Software Crisis e passando per lo studio dei tradizionali modelli di sviluppo, arrivi a definire i fondamentali aspetti architetturali dei moderni sistemi software.
Il corso prevede, oltre a lezioni teoriche, una serie di esercitazioni in aula e in laboratorio sulla parte relativa al linguaggio Java.

Con riferimento agli Indicatori di Dublino:

Conoscenza e capacità di comprensione
Il corso introduce i primi concetti relativi all'ingegneria del software. Particolare enfasi è data alla comprensione delle metodologie classiche. Il testo di riferimento è in italiano, ma viene altresì utilizzata durante le lezioni la terminologia in lingua inglese come avviamento alla consultazione di letteratura scientifica internazionale.

Capacità di applicare conoscenza e comprensione
Le conoscenze teoriche presentate vengono sempre applicate alla risoluzione di problemi specifici. Le esercitazioni che affiancano il corso sono incentrate sulla risoluzione di esercizi e problemi, con particolare riferimento alla realizzazione di applicazioni Web in Java. Spesso i metodi risolutivi vengono presentati sotto forma algoritmica, sviluppando negli studenti la capacità di strutturare procedure utili in numerose parti dell'informatica e non solo nello studio dell'ingegneria del software.

Autonomia di giudizio
Gli esercizi, che vengono proposti relativamente alla parte teorica svolta a lezione, possono venire risolti individualmente o in gruppo. Il confronto con i compagni di corso, nel lavoro a casa o durante gli svolgimenti in aula, favorisce lo sviluppo di capacità specifiche per poter a chiarire ai compagni o ai docenti le proprie argomentazioni. Spesso gli esercizi proposti possono venire risolti in modi molto diversi e l'ascolto delle soluzioni proposte da altri permette di sviluppare la capacità di individuare strutture comuni, al di là delle apparenti differenze superficiali.

Abilità comunicativeTipo testo Testo
Le numerose discussioni sui diversi metodi per risolvere i problemi proposti consentono di migliorare le capacità di comunicazione. Vengono inoltre abitualmente utilizzate durante le spiegazioni (ed esplicitamente evidenziate in classe) alcune modalità di comunicazione specifiche della tecnologia informatica.

Capacità di apprendimento
Lo studio delle origini delle soluzioni tecnologiche e la loro introduzione motivata da considerazioni qualitative e quantitative contribuisce a realizzare negli studenti la capacità di apprendere in modo profondo e non soltanto superficiale e ripetitivo. Le conoscenze così acquisite non sono mai rigide e definitive, ma sono perfettamente adattabili ad ogni evoluzione e cambiamento di prospettiva e di contesto.

Prerequisiti

Esperienze di programmazione in Java, C++ o C#.

Contenuti dell'insegnamento

Parte 1 - Processi di Sviluppo del Software

Parte 2 - Linguaggi di Modellazione del Software

Parte 3 - Analisi dei Requisiti

Parte 4 - Architetture Software

Parte 5 - Ambienti di Sviluppo

Parte 6 - Progettazione di Software e Codifica

Parte 7 - Testing, Verifica e Validazione

Parte 8 - Metodologie di Gestione dei Progetti Software

Programma esteso

Processi di Sviluppo del Software
Il processo di sviluppo del software: aspetti economici, organizzativi e metodologici; il gruppo di lavoro; prodotto software e processo; il ciclo di vita dei sistemi software; modelli di sviluppo software: modello tradizionale a cascata; modello evolutivo e a fontana, altri modelli.

Linguaggi di Modellazione del Software
Modellazione del software: modelli e linguaggi di specifica; il linguaggio UML; uso di UML entro i progetti informatici; gli strumenti CASE.

Analisi dei Requisiti
Analisi e specifica dei requisiti:l'interazione con il cliente e la formalizzazione dei requisiti; il metodo dei casi d'uso e le sue applicazioni; risultati del processo di analisi.

Architetture Software
Le architetture software: architetture software per piccoli sistemi; architetture client-server, multi-tier e Web; il pattern MVC e le sue applicazioni; riuso delle componenti server e approccio multicanale.

Ambienti di Sviluppo
Il linguaggio Java; l'architettura di Java2; Java e le proprietà di oggetti; sistemi multi-tier in Java; sistemi Web in Java; cenni al linguaggio C# e all'architettura .NET.

Progettazione di Software e Codifica
Progettazione dei sistemi software: principi e metodi di progettazione; principi di modularità ed incapsulamento; la progettazione orientata agli oggetti; i design pattern ed il loro uso; regole di scrittura del codice.

Testing, Verifica e Validazione
La fase di test, sviluppi parziali e test parziali (scatola bianca e scatola nera); test di aggregazione; test su dati reali; test di regressione; collaudo; entrata in produzione e manutenzione ordinaria; case study.

Metodologie di Gestione dei Progetti Software
La conduzione operativa di un progetto: impostazione e definizione di obiettivi; analisi dei vincoli; scelta di strumenti e architetture; il lavoro in team; metriche e diagrammi utili (Gantt, PERT, ...); il problema della documentazione; comunicazione entro e fuori un team; evoluzione e manutenibilità dei sistemi, manutenzione evolutiva.

Bibliografia

C. Ghezzi, A. Fuggetta, S. Morasca, A. Morzenti, M. Pezze, Ingegneria del Software, Mondadori Informatica, II edizione
Simon Bennett, John Skelton, Ken Lunn, UML, McGraw-Hill
Bruce Eckel, Thinking in Java, disponibile presso http://www.mindview.net, II edizione
Bruce Eckel, Thinking in Patterns, disponibile presso http://www.mindview.net
E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns, Addison-Wesley

Metodi didattici

Lezioni frontali ed esercitazioni in laboratorio

Modalità verifica apprendimento

Risultati dell'apprendimento e modalità di verifica
Saper comprendere e utilizzare in modo appropriato le tecniche relative all'analisi, progettazione, realizzazione, testing e validazione del software. Saper lavorare in Java per la realizzazione di semplici architetture software. Conoscere le basi del project management. Conoscere e saper utilizzare le principali tecniche per la realizzazione di applicazioni Web in Java.

Modalità di verifica/esame
L'esame consiste in una prova scritta e un progetto a cui si accede
solo al superamento della prova scritta. E' possibile sostenere più volte la
prova scritta ma ogni scritto consegnato annulla lo scritto precedente.