SOFTWARE ENGINEERING & LABORATORY

9 CFU - 1° semestre

Docente titolare dell'insegnamento

EMILIANO ALESSIO TRAMONTANA


Obiettivi formativi


Modalità di svolgimento dell'insegnamento


Prerequisiti richiesti



Frequenza lezioni



Contenuti del corso



Testi di riferimento


Altro materiale didattico



Programmazione del corso

LABORATORY
 ArgomentiRiferimenti testi
1Obiettivi dell’ingegneria del software. Caratteristiche del software: complessità, modificabilità, correttezza, specifiche, test[1] 
2Caratteristiche del software: astrazioni (classi). Principio di singola responsabilità per classi e metodi.[1, 2] 
3Qualità del codice e anti-pattern (God class, Spaghetti Code). Progettazione ed implementazione di test.[1, 2] 
4Tecniche di Refactoring: estrai metodo, sostituisci temp con query, dividi variabile temp.[6] 
5Design pattern Singleton. Creazione di istanze di classi. Metodi statici. Visibilità di classi, attributi e metodi. Concetti di information hiding, coesione, coupling. Concetti e meccanismi di ereditarietà e polimorfismo.[1, 2] 
6Design Pattern Factory Method (con varianti riflessiva, object pool, dependency injection).[2] 
7Identificazione e progettazione classi, uso di interfacce, ereditarietà e polimorfismo. Compatibilità di tipi. Dispatch di chiamate di metodo. Override e overload.[1, 2] 
8La notazione UML per i diagrammi delle classi, di sequenza, di collaborazione.[3] 
9Design pattern Adapter (versione Object e Class), e Façade.[2] 
10Diagrammi UML degli stati. Design pattern State[2, 3] 
11Design pattern Observer e Publish-Subscribe.[2] 
12Riconoscimento di design pattern dal codice e dai diagrammi UML delle classi[2] 
13Design pattern MVC, Mediator, e Decorator. [2] 
14Processi di sviluppo agili: introduzione alle pratiche del processo extreme programming (XP).[5] 
15Processo XP: pratiche di pianificazione (story card e CRC), pair programming, design semplice, refactoring, piccole release, standard di codifica, cliente in sede, test. Cenni di processo Scrum.[5] 
16Fasi per lo sviluppo del software: raccolta e analisi requisiti, progettazione, codifica, convalida, evoluzione.[1] 
17Processi di sviluppo del software: cascata, evolutivi e a spirale.[1] 
18Requisiti del software: raccolta, tipi di requisiti, linee guida per la scrittura dei requisiti.[1] 
19Progettazione ed implementazione con Java Stream e parallelismo. Filter, map, reduce. Tipi Predicate, Function, Supplier, Optional.[4] 
20Esempi di programmazione con Stream Java, e concorrenza con stream[4] 
21Design pattern Composite, Chain of Responsibility. Conseguenze sul codice dell'adozione di vari design pattern[2] 
22Design pattern Bridge. La notazione UML dei diagrammi dei casi d’uso, e delle attività.[2, 3] 
23Evoluzione del software, categorie di cambiamenti e gestione dei cambiamenti. Leggi di Lehman.[1] 
24Metriche sul software: complessità ciclomatica, linee di codice. Metriche per sistemi ad oggetti: suite di Chidamber e Kemerer. Fase di test. Test di componenti, metriche di copertura del codice. Test regressivi.[1] 
LABORATORY
 ArgomentiRiferimenti testi
1Obiettivi dell’ingegneria del software. Caratteristiche del software: complessità, modificabilità, correttezza, specifiche, test[1] 
2Caratteristiche del software: astrazioni (classi). Principio di singola responsabilità per classi e metodi.[1, 2] 
3Qualità del codice e anti-pattern (God class, Spaghetti Code). Progettazione ed implementazione di test.[1, 2] 
4Tecniche di Refactoring: estrai metodo, sostituisci temp con query, dividi variabile temp.[6] 
5Design pattern Singleton. Creazione di istanze di classi. Metodi statici. Visibilità di classi, attributi e metodi. Concetti di information hiding, coesione, coupling. Concetti e meccanismi di ereditarietà e polimorfismo.[1, 2] 
6Design Pattern Factory Method (con varianti riflessiva, object pool, dependency injection).[2] 
7Identificazione e progettazione classi, uso di interfacce, ereditarietà e polimorfismo. Compatibilità di tipi. Dispatch di chiamate di metodo. Override e overload.[1, 2] 
8La notazione UML per i diagrammi delle classi, di sequenza, di collaborazione.[3] 
9Design pattern Adapter (versione Object e Class), e Façade.[2] 
10Diagrammi UML degli stati. Design pattern State[2, 3] 
11Design pattern Observer e Publish-Subscribe.[2] 
12Riconoscimento di design pattern dal codice e dai diagrammi UML delle classi[2] 
13Design pattern MVC, Mediator, e Decorator. [2] 
14Processi di sviluppo agili: introduzione alle pratiche del processo extreme programming (XP).[5] 
15Processo XP: pratiche di pianificazione (story card e CRC), pair programming, design semplice, refactoring, piccole release, standard di codifica, cliente in sede, test. Cenni di processo Scrum.[5] 
16Fasi per lo sviluppo del software: raccolta e analisi requisiti, progettazione, codifica, convalida, evoluzione.[1] 
17Processi di sviluppo del software: cascata, evolutivi e a spirale.[1] 
18Requisiti del software: raccolta, tipi di requisiti, linee guida per la scrittura dei requisiti.[1] 
19Progettazione ed implementazione con Java Stream e parallelismo. Filter, map, reduce. Tipi Predicate, Function, Supplier, Optional.[4] 
20Esempi di programmazione con Stream Java, e concorrenza con stream[4] 
21Design pattern Composite, Chain of Responsibility. Conseguenze sul codice dell'adozione di vari design pattern[2] 
22Design pattern Bridge. La notazione UML dei diagrammi dei casi d’uso, e delle attività.[2, 3] 
23Evoluzione del software, categorie di cambiamenti e gestione dei cambiamenti. Leggi di Lehman.[1] 
24Metriche sul software: complessità ciclomatica, linee di codice. Metriche per sistemi ad oggetti: suite di Chidamber e Kemerer. Fase di test. Test di componenti, metriche di copertura del codice. Test regressivi.[1] 


Verifica dell'apprendimento


MODALITÀ DI VERIFICA DELL'APPRENDIMENTO

ESEMPI DI DOMANDE E/O ESERCIZI FREQUENTI



Apri in formato Pdf English version