Distributed systems engineering and LabModule LAB
Academic Year 2023/2024 - Teacher: ANDREA FRANCESCO FORNAIAExpected Learning Outcomes
General goals described according to the expected learning results.
- Knowledge and understanding: the student will be able to use advanced development mechanisms, i.e. on collabrative and distributed development, validation of complex systems, automation of the release process, design and implementation of distributed systems with microservices.
- Applying knowledge and understanding: the student will be able to design, and implement advanced development, validation and release tools for distributed applications.
- Making judgements: the student will be able to analyse advanced development, validation and release solutions for distributed applications.
- Communication skills: the student will be able to describe advanced development, validation and release solutions using a proper technical language.
- Learning skills: the student will be able to solve typical problems, by studying, analysing and using novel development, validation and release technologies.
Course Structure
Frontal lessons for concepts, techniques and code; practical tutorials with examples of code for the covered topics.
Should remote teaching be needed, then some adjustements to the above might be introduced, while honouring the programme outlined in the syllabus.
Required Prerequisites
Ability to design and implement object-oriented systems.
Attendance of Lessons
Detailed Course Content
Introduction to DevOps. Git Workflow and distributed development. Maven. Unit Testing. Automatic test generation. Mutation Testing. Combinatorial Testing. Microservices. Microservices with Spring Boot. Distributed Tracing.
Textbook Information
- 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
Course Planning
Subjects | Text References | |
---|---|---|
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] |
Learning Assessment
Learning Assessment Procedures
The exam consists of a project and an oral test.
Examples of frequently asked questions and / or exercises
Main characteristics of a DevOps approach
Describe fetch, pull, and push operations via transformations on the Commit Graph
Describe the concept of Covering Array
Describe the concept of Mutation Testing
What is the relationship between Dependence Injection and Unit Testing
Describe the concept of Session Affinity and how to avoid it in a Microservices context
Show the typical structure of a Microservices application implemented via Spring Boot
Discuss the difference between logging and tracing in a distributed application