Dipartimento: DIMES
Corso di Laurea: INGEGNERIA INFORMATICA
Indirizzo Internet Corso di Laurea: www.dimes.unical.it
Nome insegnamento: INGEGNERIA DEL SOFTWARE
Condivisione:
Articolazione in moduli: NO
Settore Scientifico Disciplinare: ING-INF/05
Docente responsabile: FURFARO ANGELO
Posizione docente responsabile:
RICERCATORE – UNIVERSITA' DELLA CALABRIA
Crediti formativi universitari: 9
Numero ore riservate attività didattiche assistite: 84
Numero ore lezioni: 57
Numero ore esercitazioni: 27
Numero ore attività di laboratorio: 0
Numero ore riservate studio individuale:
Tipologia: ATTIVITA’ CARATTERIZZANTE – INGEGNERIA INFORMATICA
Lingua di insegnamento: Italiano
Collocazione: III ANNO, II SEMESTRE
Prerequisiti:
Obiettivi formativi (risultati d’apprendimento previsti e competenze da acquisire – Descrittori di Dublino):
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:
Sviluppo di progetti didattici basati su UML, sui design pattern, su schemi architetturali distribuiti, su componenti.
Organizzazione della fase di testing.
Argomenti delle attività di laboratorio:
Modalità di frequenza: OBBLIGATORIA
Modalità di erogazione:
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.
Testi di riferimento:
Materiali didattici:
 L. Nigro. Appunti dalle lezioni di Ingegneria del Software.
 C. Ghezzi, M. Jazaheri, D. Mandrioli. Ingegneria del Software, Seconda Edizione, Pearson Education Italia
S.r.l., 2004.
 M. Grand, Patterns in Java: A catalog of reusable design patterns illustrated by UML, Vol. 1, Wiley, 2002.
Testi di consultazione:
 B. Meyer, Object Oriented Software Construction, 2nd Edition, Prentice-Hall, 2000.
 R. Pressman, Principi di Ingegneria del Software, Quinta edizione, McGraw-Hill Italia, 2008.
 A. Binato, A. Fuggetta, L. Sfardini, Ingegneria del Software: creatività e metodo, Pearson-Education Italia,
2006.
 L. Baresi, L. Lavazza, M. Pianciamore, Dall’idea al codice con UML 2, Pearson-Education Italia, 2006.
 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.
 P. Kuchana, Software architecture design patterns in Java, Auerbach Publications, CRC Press, 2004.
Orario e aule lezioni:
Calendario prove valutazione:
www.dimes.unical.it