INGEGNERIA DEL SOFTWARE

Anno accademico 2016/2017 - 2° anno
Docente: Emiliano Alessio TRAMONTANA
Crediti: 9
SSD: INF/01 - Informatica
Organizzazione didattica: 225 ore d'impegno totale, 153 di studio individuale, 72 di lezione frontale
Semestre:

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

  1. Ian Sommerville. Ingegneria del Software. Pearson Addison-Wesley. 2007.
  2. Gamma, et al. Design Patterns – Elements of Reusable Object-Oriented Software. Pearson Addison-Wesley. 2002.
  3. Martin Fowler. UML Distilled. Pearson. 2010


Programmazione del corso

 *ArgomentiRiferimenti testi
1 Caratteristiche del software e dell’ingegneria del software.
2*Fasi per lo sviluppo del software: raccolta e analisi requisiti, progettazione, codifica, convalida, evoluzione.
3*Processi di sviluppo del software: cascata, evolutivi e agili (XP, spirale, RUP).
4*Gestione dei progetti: pianificazione, percorso critico, uso delle risorse.
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.
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.
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.
12*Design pattern: Adapter (versione Object e Class), Façade, Composite, Decorator, Observer, Mediator, State, Bridge e Chain of Responsibility.
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.
15*Metriche sul software: complessità ciclomatica, linee di codice. Metriche per sistemi ad oggetti: suite di Chidamber e Kemerer.
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.
* Conoscenze minime irrinunciabili per il superamento dell'esame.

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.