INGEGNERIA DEL SOFTWARE
Anno accademico 2016/2017 - 2° annoCrediti: 9
Organizzazione didattica: 225 ore d'impegno totale, 153 di studio individuale, 72 di lezione frontale
Semestre: 2°
Prerequisiti richiesti
Capacità ad implementare un algoritmo in C++ o Java.
Frequenza lezioni
La frequenza delle lezioni è indispensabile per la comprensione degli argomenti trattati.
Contenuti del corso
Processi di sviluppo del software: cascata, evolutivi e agili (spirale, XP, RUP). Gestione dei progetti: pianificazione, percorso critico. Gestione dei requisiti del software: raccolta ed analisi. Notazione UML: diagrammi di casi d’uso, attività, stati, classi, sequenza e collaborazione.
Progettazione ad oggetti, ereditarietà e polimorfismo. Qualità del software. Stili architetturali. Riflessione computazionale. Design Pattern illustrati tramite obiettivi, contesto, problema, esempi, soluzione con diagrammi e codice: Singleton, Factory Method, Abstract Factory, Adapter, Bridge, Composite, Decorator, Facade, Chain of Responsibility, Mediator, Observer, State. Concorrenza in Java: uso dei thread e sincronizzazione.
Metriche sul software.
Tecniche di test per convalidare il software.
Testi di riferimento
- Ian Sommerville. Ingegneria del Software. Pearson Addison-Wesley. 2007.
- Gamma, et al. Design Patterns – Elements of Reusable Object-Oriented Software. Pearson Addison-Wesley. 2002.
- Martin Fowler. UML Distilled. Pearson. 2010
Programmazione del corso
* | Argomenti | Riferimenti testi | |
---|---|---|---|
1 | Caratteristiche del software e dell’ingegneria del software. | 1 | |
2 | * | Fasi per lo sviluppo del software: raccolta e analisi requisiti, progettazione, codifica, convalida, evoluzione. | 1 |
3 | * | Processi di sviluppo del software: cascata, evolutivi e agili (XP, spirale, RUP). | 1 |
4 | * | Gestione dei progetti: pianificazione, percorso critico, uso delle risorse. | 1 |
5 | * | Gestione dei requisiti del software: raccolta ed analisi. Tipi di requisiti, linee guida per la scrittura dei requisiti. Documento SRS. Revisione dei requisiti, fattori sociali, convalida dei requisiti. | 1 |
6 | * | La notazione UML: introduzione, diagrammi dei casi d’uso, diagrammi delle attività (con corsie e dati), diagrammi degli stati (stati composti concorrenti e sequenziali), diagrammi delle classi, diagrammi di sequenza, diagrammi di collaborazione. | 3 |
7 | * | Identificazione e progettazione classi, uso di interfacce, ereditarietà e polimorfismo. Creazione di istanze di classi. Visibilità di classi, attributi e metodi. Concetti di comportamento, override e overload. Information hiding, coesione, coupling. | 1, 2 |
8 | * | Progettazione del software: identificazione di sottosistemi. Stili architetturali: client-server, blackboard, pipe-filter, repository, event-driven, a macchina astratta. | 1, 2 |
9 | * | Riflessione computazionale e classi Java Class, Method e Field. | |
10 | * | Progettazione di sistemi concorrenti in Java: classe Thread, costrutti synchronized. | |
11 | * | Design Pattern (illustrati tramite idee guida, diagrammi e codice). Creazioni: Singleton (e metodi statici), Factory Method (inclusa variante riflessiva), Abstract Factory. | 2 |
12 | * | Design pattern: Adapter (versione Object e Class), Façade, Composite, Decorator, Observer, Mediator, State, Bridge e Chain of Responsibility. | 2 |
13 | Anti-pattern: God Class, Lava Flow, Functional Decomposition, Spaghetti Code, Cut-and-Paste programming, Excessive Dynamic Allocation. | ||
14 | * | Evoluzione del software, categorie di cambiamenti e gestione dei cambiamenti. Leggi di Lehman. | 1 |
15 | * | Metriche sul software: complessità ciclomatica, linee di codice. Metriche per sistemi ad oggetti: suite di Chidamber e Kemerer. | 1 |
16 | * | Fase di test. Test di componenti, partizionamento degli input, test black-box e white-box, test del percorso, metriche di copertura del codice e bug trend. Test di integrazione, test di stress, test regressivi. | 1 |
N.B. La conoscenza degli argomenti contrassegnati con l'asterisco è condizione necessaria ma non sufficiente per il superamento dell'esame. Rispondere in maniera sufficiente o anche più che sufficiente alle domande su tali argomenti non assicura, pertanto, il superamento dell'esame.
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L'esame è strutturato in: un miniprogetto da consegnare cinque giorni prima dell'appello ufficiale scelto dallo studente per sostenere l'esame; un compito scritto consistente in un test a risposta multipla e due domande aperte; una prova orale.