Nome insegnamento: INGEGNERIA DEL SOFTWARE
Articolazione in moduli: NO
Settore Scientifico Disciplinare: ING-INF/05
Docente responsabile:
ANGELO FURFARO
Crediti formativi universitari: 9
Numero ore lezioni: 57
Numero ore riservate attività didattiche assistite: 84 Numero ore esercitazioni: 27
Numero ore attività di laboratorio: 0
Tipologia di attività formativa (TAF): caratterizzante
Lingua di insegnamento: Italiano
Anno di corso e Periodo didattico di erogazione: II ANNO, II SEMESTRE
Insegnamento/i Propedeutico/i: PROGRAMMAZIONE ORIENTATA AGLI OGGETTI
Risultati d’apprendimento previsti e competenze da acquisire:
Il corso è incentrato sulle problematiche di modellazione, analisi, progetto, implementazione e collaudo
di sistemi software orientati agli oggetti, in ambiente centralizzato e distribuito. Per gli aspetti di
modellazione si fa riferimento prevalentemente alla notazione UML. Qualche cenno è dato, comunque, ai
linguaggi di specifica formale e ai problemi di verifica. Java è utilizzato come linguaggio di
implementazione. Come ausilio alle attività di sviluppo si propongono i pattern di progetto sequenziali,
concorrenti, basati su componenti e per applicazioni su rete. Il corso discute, infine, aspetti di gestione e
controllo dei progetti.
A fine corso l’allievo dovrebbe aver acquisito competenze relative a:
−
abilità nell'utilizzo di diagrammi UML per rendere “visibile” un progetto software
−
abilità nel formalizzare le specifiche di un problema
−
abilità nel passaggio da un modello di specifica ad un modello concettuale di classi
−
abilità a raffinare un modello di analisi in un modello di progetto
−
capacità di trasformare di un modello di progetto in codice Java (o altro linguaggio ad oggetti)
−
capacità nella definizione ed organizzazione dei test sia di unità che di sottosistemi integrati
−
capacità di individuare ed utilizzare pattern di progetto in uno sviluppo software
−
abilità a sviluppare sistemi software in ambiente centralizzato e distribuito
−
capacità di analisi di questioni di pianificazione e controllo delle attività di un progetto software.
Argomenti delle lezioni:
Concetti Introduttivi
Processo di produzione del software. Parametri di qualità. Fasi del ciclo di vita. Processo a cascata.
Limitazioni. Introduzione ai processi iterativi e incrementali.
Specifica, analisi e progettazione
Analisi e progetto di sistemi software ad oggetti. Il linguaggio di modellazione UML. Aspetti strutturali.
Diagramma delle classi. Classi e oggetti. Stereotipi. Classi astratte e interfacce. Relazioni tra classi. Ruoli e
molteplicità. Oggetti associativi. Aggregazione e composizione. Generalizzazione. Implementazione di
interfacce. Invio di messaggi. Diagrammi di collaborazione tra oggetti. Diagrammi di sequenza. Messaggi
sincroni e asincroni. Notifica di eventi e callback. Gestione del tempo e timer. Aspetti comportamentali.
Diagrammi di stato. Stati, eventi, transizioni e azioni. Statechart. Decomposizione and/or degli stati.
Semantica delle transizioni di stato. Diagrammi di attività. Diagrammi di casi d’uso. Utilizzo di casi d’uso
per pianificare i test e come ausilio nella fase di identificazione delle classi di un progetto. Attribuzione
delle responsabilità e diagrammi di interazione. Oggetti attivi e thread. Componenti e loro
rappresentazione. Architetture a componenti. Diagrammi di deployment. Strumenti di sviluppo integrato
(es. Eclipse, NetBeans) a supporto delle attività di progettazione e implementazione.
Progetto rigoroso di classi, convalida e fase di testing
Sostituibilità dei tipi in una gerarchia di inheritance. Design-by-contract. Invariante di classe. Pre/post
condizioni sui metodi. Formule di correttezza di Hoare. Vincoli/benefici sul cliente e sull’implementatore
di una classe. Cenni ai linguaggi OCL (Object Constraint Language) e JML (Java Modeling Language).
Gerarchie di classi e subcontracting. Richiami di logica (proposizionale e del primo ordine). Il linguaggio Z
per la specifica modulare e rigorosa di sistemi software. Problemi di verifica. Fase di testing. Testing di
unità. Junit.
Design Pattern
Progettare per il cambiamento. Principi open/closed, low coupling, high cohesion. Schemi risolutivi di
sottoproblemi ricorrenti. Catalogo completo dei pattern GoF modellati in UML e implementati in Java.
Architetture software basate su pattern. Pattern per sistemi concorrenti e distribuiti. Sviluppo
sistematico di software basato su pattern.
Progettazione, viste architetturali, strati middleware
Progettazione e viste architetturali. Architetture per applicazioni su rete. Client/server, peer-to-peer,
publish/subscribe, agenti mobili. Strati middleware e tecnologie Java. Java Socket e Java RMI.
Componenti e applicazioni web/enterprise basate su J2EE. Struttura multi-strato di un’applicazione J2EE.
Servlet, Java Server Pages, componenti EJB e sistema di persistenza. Cenni ai web service.
Processi di sviluppo e gestione di progetti
Processi evolutivi. Modello a spirale. Il processo unificato (UP). Pianificazione e controllo delle risorse.
Diagrammi di scomposizione delle attività. Diagrammi di Gantt, PERT, CPM. Gestione dei rischi. Controllo
di qualità di un processo di sviluppo.
Casi di studio
Progettazione e messa a punto di sistemi software in ambiente centralizzato e distribuito.
Argomenti delle esercitazioni:
 Uso di strumenti software di supporto alla progettazione con UML.
 Sistemi di gestione delle versioni.
 Strumenti di debbuging/testing.
 Sviluppo di progetti didattici basati su UML, sui design pattern, su schemi architetturali distribuiti,
su componenti.
Modalità di erogazione della didattica:
Lezioni frontali in aula, con metodologie tradizionali e con l’uso di trasparenze e proiettore collegato al
PC.
Metodi di valutazione:
L’esame consiste nella verifica di progetti didattici assegnati durante le lezioni, nello sviluppo completo di
un progetto finale, e in una prova orale obbligatoria.
Criteri di valutazione dell’apprendimento:
Raggiungimento dei risultati d’apprendimento previsti e maturazione delle competenze da acquisire.
Criteri di misurazione dell’apprendimento:
Voto finale
Criteri di attribuzione del voto finale:
Qualità del progetto realizzato e della prova orale sostenuta.
Testi di riferimento e materiale didattico utilizzato e consigliato:
Materiali didattici:
 C. Ghezzi, M. Jazaheri, D. Mandrioli. Ingegneria del Software, Seconda Edizione, Pearson
Education Italia S.r.l., 2004.

M. Fowler. UML Distilled: guida rapida al linguaggio di modellazione standard. Quarta
edizione, Addison-Wesley.

E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns: Elementi per il riuso di software a
oggetti, Addison-Wesley, Pearson Education Italia S.r.l., 2002.
Testi di consultazione:






M. Grand, Patterns in Java: A catalog of reusable design patterns illustrated by UML, Vol. 1,
Wiley, 2002. I. Sommerville, Software Engineering, 9th Edition, Pearson
B. Meyer, Object Oriented Software Construction, 2nd Edition, Prentice-Hall, 2000.
Binato, A. Fuggetta, L. Sfardini, Ingegneria del Software: creatività e metodo, PearsonEducation Italia, 2006.
L. Baresi, L. Lavazza, M. Pianciamore, Dall’idea al codice con UML 2, Pearson-Education Italia,
2006.
P. Kuchana, Software architecture design patterns in Java, Auerbach Publications, CRC Press,
2004.
L. Nigro. Appunti dalle lezioni di Ingegneria del Software.
Orario e aule lezioni:
Calendario prove valutazione:
http://www.dimes.unical.it/index.php/didattica