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