INGEGNERIA DEI SISTEMI DISTRIBUITI E LABORATORIOModulo LABORATORIO
Anno accademico 2023/2024 - Docente: ANDREA FRANCESCO FORNAIARisultati di apprendimento attesi
Obiettivi formativi generali in termini di risultati di apprendimento attesi.
- Conoscenza e capacità di comprensione (knowledge and understanding): lo studente conoscerà meccanismi di sviluppo avanzati, inclusi sviluppo collaborativo e distribuito, validazione di sistemi complessi, automatizzazione del processo di rilascio, progettazione e implementazione di sistemi distribuiti a microservizi.
- Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente avrà la capacità di adoperare strumenti avanzati di sviluppo, validazione e rilascio per applicazioni distribuite.
- Autonomia di giudizio (making judgements): lo studente acquisirà la capacità di analizzare sistemi di sviluppo, validazione e rilascio per applicazioni distribuite.
- Abilità comunicative (communication skills): lo studente imparerà a descrivere in linguaggio tecnico le caratteristiche fondamentali dei sistemi sistemi di sviluppo, validazione e rilascio per applicazioni distribuite.
- Capacità di apprendimento (learning skills): lo studente potrà affrontare e risolvere problemi di utilizzo e implementazione in ambiti realistici, studiando, valutando e utilizzando, nuove tecnologie per lo sviluppo, la validazione e il rilascio di applicazioni distribuite.
Modalità di svolgimento dell'insegnamento
Lezioni frontali per concetti e soluzioni, prove pratiche con esempi di codice per le problematiche esaminate.
Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.
Prerequisiti richiesti
Capacità di progettare ed implementare sistemi ad oggetti.
Frequenza lezioni
La frequenza delle lezioni è fortemente consigliata.
Contenuti del corso
Introduzione ai DevOps. Git Workflow e sviluppo distribuito. Maven. Unit Testing e generazione automatica di test. Mutation Testing. Testing Combinatoriale. Microservizi. Microservizi con Spring Boot. Distributed Tracing.
Testi di riferimento
- G. Kim et al.: The DevOps Handbook. It Revolution Press, 2016
- S. Chacon and B. Straub: Pro Git. Apress, 2014
- Sonatype Company: Maven: The Definitive Guide. O'Reilly, 2008
- D. R. Kuhn et al.: Practical Combinatorial Testing. NIST Special Publication, 2010
- M. Young and M. Pezze: Software Testing and Analysis: Process, Principles and Technique. John Wiley and Sons, 2008
- B. Laboon: A Friendly Introduction to Software Testing. CreateSpace Independent Publishing, 2017
- S. Newman: Building Microservices. O'Reilly, 2015
- M. Macero: Learn Microservices with Spring Boot. Apress, 2017
- Yuri Shkuro: Mastering Distributed Tracing: Analyzing performance in microservices and complex systems. Packt Publishing, 2019
Programmazione del corso
Argomenti | Riferimenti testi | |
---|---|---|
1 | Introduzione ai DevOps: DevOps lifecycle, Continuous Integration, Continuous Delivery, SCM e Pipeline | [1] |
2 | Git Workflow e sviluppo distribuito: commit graph, comandi base, git workflow, concetti avanzati, GitHub, GitLab, Code Coverage | [2] |
3 | Maven: gestione dipendenze, compilazione e testing automatico, reportistica, integrazione con sistemi di CI/CD | [3] |
4 | Unit Testing: Test Suite & Scaffolding, JUnit, JaCoCo, Mockito | [6, note fornite] |
5 | Generazione automatica di test suite: generazione randomica con Randoop, generazione evolutiva con EvoSuite, cenni sul Model Checking | [note fornite] |
6 | Testing Combinatoriale: Interaction Failures, 2-way interaction, Covering Array, Coffee4j | [4, 5] |
7 | Mutation Testing: valutazione qualità di una test suite, PITest | [5, note fornite] |
8 | Microservizi: Monolite vs Microservizi, Legge di Conway, Monolith First, Bounded Context, Coordinamento, Service Discovery, Load Balancing, API Gateway, Circuit Breaker, ELK, Affinità di Sessione, VM e Container | [7] |
9 | Microservizi con Spring Boot: Spring Boot Initializr e Starters, Dependency Injection, Architettura Applicazione Web Spring, RESTful APIs, CRUD, Zuul | [8] |
10 | Distributed Tracing in applicazioni a Microservizi con Open Tracing e Jaeger | [9] |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L'esame consiste di un progetto ed una prova orale.
Esempi di domande e/o esercizi frequenti
Caratteristiche principali di un approccio DevOps
Descrivere le operazioni di fetch, pull e push tramite trasformazioni sul Commit Graph
Descrivere il concetto di Covering Array
Descrivere il concetto di Mutation Testing
Che relazione c'è tra Dependence Injection e Unit Testing
Descrivere il concetto di Affinità di Sessione e come evitarlo in un contesto a Microservizi
Mostrare la struttura tipica di un'applicazione a Microservizi implementata tramite Spring Boot
Discutere la differenza tra logging e tracing in un'applicazione distribuita