Capacità ad implementare un algoritmo in C++ o Java.
La frequenza delle lezioni è indispensabile per la comprensione degli argomenti trattati.
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.
www.dmi.unict.it/~tramonta
* | 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 |
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.
Le prove in itinere sono due, una i primi di maggio e l'altra a metà giugno, e consistono ciascuna di un compito scritto con test a risposta multipla e una domanda aperta.
L'accesso alla seconda prova in itinere è subordinato al superamento della prima prova; e solo il superamento di entrambe le prove in itinere permette di accedere direttamente all'orale. I risultati delle prove verranno mantenuti validi per l'anno accademico corrente.