SCHEDA DELL'INSEGNAMENTO (SI)
SSD ING-INF/05
LAUREA MAGISTRALE IN INGEGNERIA INFORMATICA
ANNO ACCADEMICO: 2022-2023
INFORMAZIONI GENERALI - DOCENTE
DOCENTE: ANNA RITA FASOLINO
TELEFONO: 081 7683906
EMAIL: Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
INFORMAZIONI GENERALI - ATTIVITÀ
INSEGNAMENTO INTEGRATO (EVENTUALE): SOFTWARE ARCHITECTURE DESIGN
MODULO (EVENTUALE):
CANALE (EVENTUALE):
ANNO DI CORSO (I, II, III): I
SEMESTRE (I, II): II
CFU: 9
(se previsti dall'Ordinamento del CdS)
...................................................................................................................................................
EVENTUALI PREREQUISITI
Ingegneria del Software
Software Engineering
OBIETTIVI FORMATIVI
L’insegnamento si propone di introdurre il tema delle architetture software e di fornire agli studenti conoscenze e competenze specialistiche relative alla progettazione, modellazione, documentazione e sviluppo di tali architetture.
(Descrittori di Dublino)
Conoscenza e capacità di comprensione
Lo studente deve dimostrare di conoscere e comprendere le problematiche relative alla disciplina delle architetture software ed il loro ruolo nell’ambito dei moderni processi di sviluppo software; il percorso formativo intende fornire agli studenti le conoscenze necessarie per comprendere le caratteristiche dei diversi modelli e pattern architetturali e gli strumenti metodologici necessari per progettare, documentare, e sviluppare una architettura software. Tali conoscenze e strumenti consentiranno agli studenti di comprendere le principali relazioni che sussistono fra progetto architetturale e conseguenti caratteristiche di qualità del software e di cogliere le implicazioni delle diverse scelte di progetto sui requisiti posseduti dall’architettura risultante.
Capacità di applicare conoscenza e comprensione
Lo studente deve dimostrare di saper utilizzare le conoscenze e gli strumenti metodologici appresi per riuscire a progettare, documentare ed implementare architetture software in grado di realizzare tutti i requisiti funzionali e di qualità richiesti, implementando un processo di sviluppo ispirato ai moderni processi iterativi, evolutivi ed agili.
PROGRAMMA-SYLLABUS
Architetture Software: concetti fondamentali.
Definizioni di Architettura Software. Architettura come insieme di Viste: Vista dei Componenti e Connettori, Vista dei Moduli, Vista di Allocazione. Ruolo dell’architettura nei processi di sviluppo software.
Qualità delle Architetture Software.
Attributi di qualità osservabili a run-time (performance, security, availability, functionality, usability), Attributi non osservabili a run-time (modifiability, portability, reusability, integrability, e testability), attributi di qualità intrinseca dell’architettura (conceptual integrity, correctness, and completeness, buildability). Specificare gli attributi di qualità attraverso la tecnica degli Scenari di qualità.
Documentare le Architetture Software.
Documentare le diverse viste di una architettura software: stili di documentazione per la vista modulare, dei componenti e connettori, per la vista di distribuzione. Documentare il Contesto, il comportamento, le decisioni di progetto e le interfacce dei componenti di una architettura. Cenni allo Standard ISO/IEC 42010 (Systems and Software Engineering- Architecture Description).
Progettazione Architetturale.
Principi di progettazione architetturale, Progettazione basata sul riuso di esperienza, attraverso Stili, Pattern e Tattiche Architetturali.
Pattern Architetturali.
I Pattern Architetturali State-logic-Display, Sense-Compute-Control e Model-View-Controller (MVC). Esempi.
Stili Architetturali
Stile procedurale e object-oriented, Stile a Livelli (Macchine Virtuali e Client-Server), Data-Flow (Batch e Pipe-and-Filter), a Memoria Condivisa (Blackboard e Rule Based), basato su Interprete (Codice Mobile), ad Invocazione Implicita (Publish-Subscribe e Event-Based), Peer to Peer (P2P), C2 (Componenti e Connettori), Stile ad Oggetti Distribuiti, Stile Service Oriented (SOA), Stile a Microservizi. Ruoli fondamentali dei Connettori in una architettura software (comunicazione, coordinamento, conversione e facilitazione) e tipi di connettori fondamentali. Esempi.
Tattiche per realizzare gli attributi di qualità di una architettura
Tattiche per l’Availability, Deployability, Modifiability, Energy Efficiency, Performance, Security, Safety, Testability, Usability.
Analisi e Progettazione di architetture Object Oriented con Design Patterns.
Aspetti avanzati dell’Analisi e Progettazione O.O. I patterns della GoF: Singleton, Composite, Decorator, Proxy, Adapter, Facade, Observer, State e Strategy. Implementazioni in Java. I Pattern GRASP: Creator, Controller, Information Expert, Low Coupling,High Cohesion, Polymorphism, Repository.
Processi di Sviluppo Software Iterativi ed Incrementali.
Lo sviluppo iterativo ed Incrementale: differenze rispetto allo sviluppo waterfall. Unified Process (UP): le Fasi di Ideazione, Elaborazione, Costruzione e Transizione. Le discipline e le pratiche di UP.
Sviluppo Agile. I Principi dello Sviluppo Agile. Manifesto Agile e pratiche Agili. Il Test Driven Development (TDD) e il Refactoring. Continuous Integration (CI). Il framework SCRUM: i ruoli in Scrum, i Backlog, le pratiche di Scrum.
Processi di Gestione della Configurazione del Software
La gestione delle Versioni del software. Modello di Version Control Centralizzato e Distribuito. Il processo di Build e l’Agile Building, Continuous Integration, DevOps. I processi di gestione delle Richieste di cambiamento del Software. Gestione delle Release.
Sviluppo di architetture software mediante tecnologie open, uso di framework e librerie.
MATERIALE DIDATTICO
N. Taylor, N. Medvidovic, E. Dashofy. Software Architecture -foundations, theory and practice, Wiley 2010.
Len Bass, Paul Clements, Rick Kazman, Software Architecture in Practice, Fourth Edition, Addison Wesley, 2022
P. Clements, F. Bachmann, Bass, etc. Documenting Software Architectures- Views and Beyond, Addison Wesley, Second Ed., 2010.
C. Larman: Applicare UML e i pattern. Analisi e progettazione orientata agli oggetti. 4a ed. Pearson, 2016
Copia delle Slide proiettate durante le lezioni
Articoli scientifici e materiale integrativo dal Web
MODALITÀ DI SVOLGIMENTO DELL'INSEGNAMENTO
L’insegnamento verrà erogato prevalentemente attraverso lezioni frontali e sarà integrato da esercitazioni pratiche e da seminari di approfondimento. Lo sviluppo delle esercitazioni richiederà l’uso di ambienti integrati e software specialistico per la progettazione, la documentazione ed implementazione di architetture software.
Il docente utilizzerà a) lezioni frontali per circa 45 ore (pari al 62% delle ore totali), b) esercitazioni per approfondire praticamente aspetti teorici e applicare le conoscenze apprese per 15 ore (pari a circa il 21% delle ore totali) e c) seminari di approfondimento su tecnologie e metodologie da utilizzare per lo sviluppo degli elaborati per 12 ore (pari a circa il 17% delle ore totali).
VERIFICA DI APPRENDIMENTO E CRITERI DI VALUTAZIONE
a) Modalità di esame:
L'esame si articola in prova: | |
Scritta e orale | |
Solo scritta | |
Solo orale | |
Discussione di elaborato progettuale | |
Altro |
In caso di prova scritta i quesiti sono (*): | |
A risposta multipla | |
A risposta libera | |
Esercizi numerici |
La prova orale finale tende ad accertare le conoscenze apprese nel campo delle architetture software e dei fondamentali modelli, stili e pattern architetturali. La discussione dell’elaborato progettuale finale intende verificare la capacità di applicare le metodologie di progettazione, documentazione e sviluppo architetturale atte a realizzare i requisiti richiesti ad una architettura, e di utilizzare le indicazioni dei più moderni processi di sviluppo software.
b) Modalità di valutazione: