INGEGNERIA DEL SOFTWARE
cod. 06015

Anno accademico 2021/22
3° anno di corso - Primo semestre
Docente
- Federico BERGENTI
Settore scientifico disciplinare
Informatica (INF/01)
Field
A scelta dello studente
Tipologia attività formativa
A scelta dello studente
72 ore
di attività frontali
9 crediti
sede:
insegnamento
in 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 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 di alcune tecniche classiche. I testi di riferimento sono in italiano, ma vengono altresì utilizzate durante le lezioni le terminologie 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 sistemi software 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à comunicative
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 aula) 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

- - -

Contenuti dell'insegnamento

Approfondimenti sulla programmazione orientata agli oggetti.
Approfondimenti sul linguaggio Java.
Approfondimenti sulla programmazione concorrente in linguaggio Java.
Tecniche di programmazione finalizzate al riuso del codice.
Tecniche per la realizzazione di framework software di uso generale.
Introduzione ai design pattern e relative notazioni.
Introduzione ad alcune architetture software di utilizzo comune.
Introduzione ai processi di sviluppo del software.
Approfondimenti sulle fasi di analisi e specifica dei requisiti e di testing.
Cenni alla gestione dei progetti software e alle relative notazioni.

Programma esteso

- - -

Bibliografia

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

Le lezioni verranno svolte presso il Campus di Scienze e Tecnologie.
Il docente riceve previo appuntamento fissato via e-mail.

Modalità verifica apprendimento

Sapere comprendere e utilizzare in modo appropriato le tecniche di base dell'ingegneria del software.
L'esame consiste in una prova scritta seguita da una prova di laboratorio a cui si accede se la prova scritta è sufficiente.
Gli studenti sufficienti alla prova di laboratorio potranno richiedere una prova orale.

Altre informazioni

- - -