LDenominazione dell’insegnamento: Ingegneria del Software CFU: 5 Settore Scientifico Disciplinare: ING-INF/05 Collocazione: 3 anno, 1° periodo Propedeuticità: Tutti gli esami del biennio Obiettivi del corso: Il modulo introduce le problematiche di analisi, progetto, implementazione e collaudo di sistemi software orientati agli oggetti, utilizzando UML come linguaggio di modellazione e Java come linguaggio di implementazione. Come ausilio alle attività di sviluppo si propongono i pattern di progetto della “Gang-of-Four”, pattern per la concorrenza e per le applicazioni su rete. Il modulo introduce altresì il progetto rigoroso di classi basato sul “Design-by-Contract” utilizzato anche come guida alla fase di testing. N° di ore di lezione: 32 N° di ore di esercitazione: 12 N° di ore di laboratorio (specificare attività): Argomenti delle lezioni: ore: 2 Concetti Introduttivi Processo di produzione del software. Parametri di qualità. Fasi del ciclo di vita. Processo a cascata. Limitazioni. Processi iterativi e incrementali. 12 UML 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. Aspetti comportamentali. Diagrammi di stato di oggetti. Stati, eventi, transizioni e azioni. Gerarchie di stati. Transizioni di gruppo. Transizioni su memoria superficiale e profonda. Cenni agli stati concorrenti e punti di sincronizzazione. 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à (metodi) alle classi assistita dai diagrammi di collaborazione e sequenza. Oggetti attivi e thread. Sviluppo di semplici progetti con UML e loro implementazione in Java. Strumenti CASE di supporto, es. Poseidon Community Edition. Cenni al processo unificato. 12 Design Pattern Progettare per il cambiamento. Principi open/closed, low coupling, high cohesion. Schemi risolutivi di sottoproblemi ricorrenti. Principali pattern della “Gang-of-Four” modellati in UML e implementati in Java: ADAPTER, FACADE, PROXY, FACTORY, SINGLETON, STRATEGY, OBSERVER, STATE, COMPOSITE, BUILDER, VISITOR, FLYWEIGHT, COMMAND, CHAIN OF RESPONSIBILITY, TEMPLATE METHOD, ITERATOR, BRIDGE, MEDIATOR, MEMENTO. Pattern per sistemi concorrenti. Stili architetturali per sistemi distribuiti. 6 Progetto rigoroso di classi e fase di testing Sostituibilità dei tipi in una gerarchia di inheritance. Il 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. Uno schema di riferimento per il supporto di Design-by-Contract in Java. Fase di testing. Testing di unità. JUnit. Totale ore lezione: 32 Argomenti delle esercitazioni: ore: • Sviluppo di semplici progetti didattici basati su UML, sui Design Patterns e sul Design- 12 by-Contract. Organizzazione della fase di testing. Totale ore esercitazione: 12 Modalità di svolgimento delle lezioni: In aula, con metodologie tradizionali e con l’uso di trasparenze e proiettore collegato al PC. Modalità di svolgimento delle esercitazioni: In aula, con metodologie tradizionali e proiettore collegato al PC. Modalità di svolgimento dell’esame: L’esame consiste nella verifica e correzione di progetti didattici assegnati durante le lezioni, nello sviluppo completo di un progetto finale individuale, e in una prova orale obbligatoria. Matriali didattici: L. Nigro, Appunti dalle lezioni di Ingegneria del Software. A. Binato, A. Fuggetta, L. Sfardini, Ingegneria del Software-Creatività e metodo. Pearson Education Italia S.r.l., 2006 L. Baresi, L. Lavazza, M. Pianciamore, Dall’idea al codice con UML 2, Pearson-Education Italia S.r.l., 2006 M. Grand, Patterns in Java: A catalog of reusable design patterns illustrated by UML, Vol. 1, Wiley Testi suggeriti per la consultazione: S. Bennet, J. Skelton, K. Lunn, Introduzione a UML, McGraw-Hill, Collana Schaum’s. S.J. Metsker, Design Patterns Java Workbook, Addison-Wesley. B. Meyer, Object Oriented Software Construction, 2nd Edition, Prentice-Hall E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns: Elementi per il riuso di software a oggetti, Addison-Wesley C. Ghezzi et al., Ingegneria del Software, 2/E, Pearson-Education Italia S.r.l.