INGEGNERIA DEI SISTEMI DISTRIBUITI E LABORATORIO

9 CFU - 1° semestre

Docenti titolari dell'insegnamento

EMILIANO ALESSIO TRAMONTANA - Modulo INGEGNERIA DEI SISTEMI DISTRIBUITI - INF/01 - 6 CFU
ANDREA FRANCESCO FORNAIA - Modulo LABORATORIO - INF/01 - 3 CFU


Obiettivi formativi


Modalità di svolgimento dell'insegnamento


Prerequisiti richiesti



Frequenza lezioni



Contenuti del corso



Testi di riferimento


Altro materiale didattico



Programmazione del corso

INGEGNERIA DEI SISTEMI DISTRIBUITI
 ArgomentiRiferimenti testi
1Presentazione del corso con obiettivi. Modularità per sistemi distribuiti e paralleli[1, 2] 
2Design pattern Proxy e Reference Monitor[1, 3] 
3Design pattern Remote Proxy e Forward-Receiver[1] 
4Design pattern Remote Facade e Data Transfer Object[2] 
5Design pattern Session State (Client, Server, Database), Serialized Large Object[2] 
6Design pattern Broker[1] 
7Progettazione con Map Reduce in Java, Stream, espressioni lambda. Design pattern Builder. Test con JUnit[5] 
8Tipi Java 8: Predicate, Function, IntStream, Supplier[5] 
9Progettazione con callback, Java chiamate asincrone, tipi CompletableFuture[5] 
10Programmazione ad aspetti: costrutti del linguaggio AspectJ. Pointcut e join point. Esempio di aspetto per la protezione degli accessi[4] 
11Programmazione ad aspetti: pointcut per la cattura del contesto di esecuzione, passaggio di parametri agli advice[4] 
12Refactoring ad aspetti. Crosscutting statico e dinamico. Pointcut cflow, declare warning[4] 
13Design pattern ad aspetti: Adapter, Participant e Sincronizzazione. Gestione eccezioni con aspetti[4] 
14Design pattern per la stabilità: Timeout, Circuit Breaker, Bulkheads 
15Middleware orientato ai messaggi: RabbitMQ[6, 7] 
16Design pattern per i messaggi. Produttori e consumatori di messaggi. Code[6, 7] 
LABORATORIO
 ArgomentiRiferimenti testi
1Introduzione ai DevOps: DevOps lifecycle, Continuous Integration, Continuous Delivery, SCM e Pipeline[1] 
2Git Workflow e sviluppo distribuito: commit graph, comandi base, git workflow, concetti avanzati, GitHub, GitLab, Travis, Code Coverage [2] 
3Mining Software Repository: Hot Spot Analysis, Change Coupling, RepoDriller, PyDriller[3] 
4Testing Combinatoriale: Test Suite & Scaffolding, Interaction Failures, 2-way interaction, Covering Array, ATGT, esempio su Java Card Verifier[4, 5] 
5Model Checking per sistemi concorrenti: Logica Temporale (LTL, CTL), algoritmo di Model Checking, NuSMV, Oracolo, generazione automatica Test Suite, esempio Java Card Verifier[5] 
6Infrastructure Automation con OpenStack: scalabilità, tassonomia cloud, middleware cloud, architettura OpenStack, servizi principali, DevStack, VM lifecycle, Floating Ip, Role Based Access Control, OpenStack APIs[6] 
7Microservizi: Monolite vs Microservizi, Legge di Conway, Monolith First, Bounded Context, Coordinamento, Service Discovery, Load Balancing, API Gateway, Circuit Breaker, ELK, Stateless Microservices, Affinità di Sessione, VM e Container[7] 
8Microservizi con Spring Boot: Spring Boot Initializr e Starters, Maven, Dependency Injection, Architettura Applicazione Web Spring, Vagrant e Provisioning, RESTful APIs, CRUD, Zuul[8] 


Verifica dell'apprendimento


MODALITÀ DI VERIFICA DELL'APPRENDIMENTO

ESEMPI DI DOMANDE E/O ESERCIZI FREQUENTI



Apri in formato Pdf English version