Presentazione
Il corso di Architettura dei Sistemi Software (9 CFU)
per il Corso di Laurea Magistrale in Ingegneria Informatica è tenuto dal
Prof.
Luca Cabibbo, con il supporto
dell'Ing. Davide Orlando.
L'architettura del software è una disciplina interessata
alle strutture e alle qualità dei sistemi software:
- la strutturazione interna di un sistema software riguarda gli
elementi che lo compongono (come moduli, componenti, servizi e nodi di
elaborazione) e le relazioni tra di essi (ovvero, come interagiscono e
come sono messi in corrispondenza);
- inoltre, le qualità esterne del software (come prestazioni,
disponibilità, scalabilità, sicurezza e modificabilità) costituiscono un
fattore critico di successo per molti sistemi software;
- l'architettura del software si basa sull'osservazione che la
strutturazione interna di un sistema software ha un impatto
significativo sulle qualità esterne del sistema, e per questo si occupa
di studiare le relazioni tra le strutture e le qualità dei sistemi
software;
- questa conoscenza è fondamentale ai fini dell'analisi, della
progettazione, della valutazione e dell'evoluzione dei sistemi software
complessi, e costituisce l'argomento centrale di questo corso.
Il programma del corso di Architettura dei sistemi software,
in breve:
- fondamenti di architettura del software
- qualità del software e progettazione per le qualità
- pattern architetturali
- architettura dei sistemi distribuiti
- architettura a servizi e microservizi
- DevOps e rilascio del software
In pratica, questa edizione del corso enfatizza l'architettura a
microservizi e DevOps. Le esercitazioni del corso enfatizzano i microservizi
con Spring Boot, Docker e Kubernetes.
Il programma dettagliato del corso è descritto più
avanti in questa pagina.
Obiettivi formativi
Il corso di Architettura dei Sistemi Software ha
l’obiettivo di fornire competenze, sia metodologiche che tecnologiche,
relative all’architettura del software, la disciplina che studia le
relazioni tra le strutture dei sistemi software e le loro proprietà di
qualità (requisiti non funzionali); questa conoscenza è fondamentale ai fini
dell’analisi, della progettazione, della valutazione e l’evoluzione dei
sistemi software complessi.
Viene studiata anche l’architettura dei sistemi software distribuiti,
l’architettura a servizi e l’architettura del software per il cloud, e
vengono presentati anche aspetti tecnologici relativi al middleware.
Alla fine del corso, lo studente dovrebbe sapere impostare il progetto di
un’architettura software, analizzandone dettagli e problematiche
tecnologiche e metodologiche, e valutare l’architettura in termini di
raggiungimento di obiettivi di qualità.
Prerequisiti e interazioni con altri corsi
Il corso non prevede specifici prerequisiti: tutto ciò che è stato (e che
sarà) studiato sarà utile - ma niente indispensabile.
Un prerequisito importante è certamente il corso di
Analisi e
progettazione del software. Altri prerequisiti molto utili sono i
corsi di Sistemi informativi su web, Sistemi operativi e
Mobile computing. Utile anche Tecnologie e architetture per la
gestione dei dati.
I corsi di Big data, Cybersecurity, Imprenditorialità
digitale e Ingegneria dei dati
arricchiscono e completano i contenuti di questo corso.
È inoltre utile una buona conoscenza della lingua inglese.
Programma
Programma preliminare del corso di Architettura dei Sistemi software
relativo all'anno accademico 2024/2025. (I riferimenti, a secondo dei casi,
sono relativi al libro di testo oppure alle dispense del corso.)
- Fondamenti
- introduzione all'architettura del software (capitolo 1)
- architettura del software: definizioni e concetti (capitolo 2)
- viste e punti di vista architetturali (capitolo 3)
- qualità del software e progettazione per le qualità (capitolo 4)
- processo di definizione dell'architettura (capitolo 5)
validazione dell'architettura (no)
- Qualità e progettazione per le qualità
- progettare per gli attributi di qualità (capitolo 7)
- prestazioni (capitolo 8)
- modificabilità (capitolo 9)
- disponibilità (capitolo 10, di cui il paragrafo 10.2.5 solo
cenni)
sicurezza (no)
- verificabilità (cenni) (capitolo 12, cenni)
- scalabilità (capitolo 13)
monitorabilità e monitoraggio
- Pattern architetturali
- pattern software (capitolo 15)
- introduzione ai pattern architetturali (capitolo 16)
- pattern architetturale Layers (capitolo 17, escluso il paragrafo
17.2)
- pattern architetturale Pipes and Filters (capitolo 18, escluso
il paragrafo 18.2)
- altri pattern architetturali POSA: Model-View-Controller
(cenni),
Microkernel (no), Reflection (no),
Shared Repository (cenni) (capitolo 19, paragrafi 19.2 e 19.4, solo
cenni)
- architettura esagonale (capitolo 20)
- Architettura dei sistemi distribuiti
- introduzione ai sistemi distribuiti (capitolo 21, escluso il
paragrafo 21.2.1)
- stile client-server (capitolo 22, paragrafi 22.1, 22.2 e 22.4)
- stile peer-to-peer (cenni) (capitolo 22, paragrafo 22.3, solo
cenni)
- invocazione remota (capitolo 23)
- Broker (capitolo 24, escluso il paragrafo 24.3)
- comunicazione asincrona (capitolo 25)
- Messaging (capitolo 26)
- integrazione di applicazioni (cenni) (dispensa asw465, solo
cenni)
- architettura a componenti (capitolo 27)
- contenitori per componenti (cenni) (capitolo 28, cenni)
- Architettura a servizi
- architettura a servizi (capitolo 29)
- servizi web SOAP (cenni) (capitolo 30, paragrafo 30.2, cenni)
- servizi REST (capitolo 30, paragrafi 30.1, 30.3 e 30.4)
- architettura orientata ai servizi (cenni) (capitolo 31, cenni)
- architettura basata su servizi (cenni) (capitolo 32, cenni)
- architettura a microservizi (capitolo 33)
- Rilascio del software
- introduzione alla delivery del software e a DevOps (capitolo 34)
- macchine virtuali e virtualizzazione di sistema (capitolo 35)
- gestione di ambienti (cenni) (capitolo 36, cenni)
- cloud computing (capitolo 37)
- continuous delivery (capitolo 38)
- container e virtualizzazione basata su container (capitolo 39)
- orchestrazione di container (capitolo 40)
- Esercitazioni (su middleware e altre tecnologie per l'architettura
del software)
- introduzione ai connettori (dispensa asw810)
- connettori distribuiti e comunicazione client-server (dispensa
asw815)
- il framework Spring (dispensa asw820)
- Spring Boot (dispensa asw825)
- invocazione remota: gRPC (dispensa asw830)
- invocazione remota: REST (dispensa asw835)
- comunicazione asincrona: Kafka (dispensa asw840)
- strumenti per la gestione di ambienti virtuali (cenni) (dispensa
asw870, solo cenni)
- Spring Cloud (dispensa asw850)
- container: Docker (dispensa asw880)
- esecuzione di applicazioni Spring con Docker (dispensa asw885)
- orchestrazione di container: Kubernetes (dispensa asw890)
- Altri argomenti
Domain-Driven Design (cenni)