Details Year 2

SLR 201 Advanced Programming and Project Management (Java-based)

24h, 2,5 ECTS, Ada Diaconescu


This course offers more advanced notions of Java programming, compared to what was seen in the 1st year courses (INF103). Mastering these notions is essential for comprehending the main concepts of distributed systems (SLR203). The course also provides more detailed notions of project management, including the management of software versions, of library interdependencies, and of agile development processes.


This course includes the following subjects:

- Java Threads, synchronisation, object serialisation, Input/Output interfaces and Sockets;

- version management via advanced git (e.g. branches, conflict management, SmartGit platform);

- automated software compilation, packaging and execution via the Apache Ant (or Maven) tool;

- introduction to the agile method (e.g. Scrum) for software project development.


A good understanding of Object Oriented Programming (OOP) and basic experience with Java programming

SLR 202 Software System Modelling and Design (Object-Oriented)

24h, 2,5 ECTS, Ada Diaconescu, Vadim Malvone, Dominique Blouin


This course offers an introduction to the software development process, focusing on software system modelling and design tools. The course mainly discusses object-oriented approaches, but may also include component- and service-oriented architectures. Notably, the course includes a set of design patterns, some of most commonly used (GoF), while emphasising their usage in the design of large-scale distributed systems. The UML standard notation, one of the most commonly employed in the industry, will be used to illustrate and apply the theoretical modelling concepts presented.


This course will address the following topics:

  • Requirements specification via scenarios and Use Case diagrams;

  • Object-Oriented architectural modelling via Class diagrams, refined by common design patterns (GoF);

  • Illustrative examples of the use of design patterns for developing large-scale distributed systems (e.g. application servers);

  • Interaction modelling viaSequence diagrams;

  • Behavioural modelling via state-chart diagrams.


Good understanding of Object Oriented Programming (OOP)

SLR 203 Introduction to technologies of distributed software development

24h, 2,5 ECTS, Ada Diaconescu


This course introduces essential notions for comprehending distributed systems and their development based on middleware (using Java as an example). It offers several concrete middleware examples, including: based on a remote method invocation model; on a remote passing model; and on an "actor" model. A comparison amongst presented middleware examples will enable a better understanding of their applicability to different application domains.


This course includes the following topics:

  • Basic notions of distributed systems and middleware

  • RMI as a middleware example for remote method invocation;

  • JMS (and/or MQTT) as middleware example for remote message passing;

  • Akka as middleware example for actor models;

  • Comparison of presented middleware examples, highlighting their applicability to different domains


  • SLR201

  • Good knowledge and experience with Object-Oriented programming (preferably Java)

SLR 204 Basics of verification of distributed systems

24h, 2,5 ECTS, Vadim Malvone, Gérard Memmi


The aim of this module is to introduce key concepts related to the formal verification of concurrent and distributed systems.


This module presents the basis of two approaches for verification: Model Checking and Petri Nets. The following aspects are addressed:

  • Introduction and role of verification in the development process.

  • Kripke structures for modeling systems.

  • Temporal logics (LTL and CTL) for expressing verifiable properties.

  • Model Checking verification: solving LTL model checking via Buchi Automata.

  • Model Checking verification: solving CTL model checking via Labeling procedure.

  • Petri Nets, modeling of concurrency, basic properties.

  • Verification of behavioral properties and invariants.

No prerequisites

SLR 206 Distributed algorithms (Part 1 and Part 2)

48h (2x24h), 5 (2x2,5) ECTS, Petr Kuznetsov


Students who complete this module (organized in two UEs de 24h each) will learn how to design distributed algorithms, reason about their correctness, and derive matching complexity bounds.


The primary focus of the module is on understanding of the foundations of distributed computing. The module will discuss basics of synchronization, fault-tolerant shared-memory computations, consensus and transactional memory.


basic knowledge of mathematics and classical algorithms, including complexity analysis, basic programming skills

SLR 207 Technologies of large-scale parallel computing (24h, 2,5 ECTS) (Rémi Sharrock)


This Learning Module presents distributed computing and large scale technologies. An illustration will be given by implementing a real large scale distributed system.


  • Knowing large scale concepts, parallelization, virtualization, elasticity, overlay networks, autonomic computing and their applications for cloud computing.

  • Manipulating cloud services with a particular provider (for example Amazon)

  • Understanding MapReduce concepts

  • Implementing MapReduce with a local simulation and an Amazon cloud deployment


  • SLR201

  • Be capable of implementing distributed applications in Java.

SLR 210 Blockchain: algorithmic basics

24h, 2,5 ECTS , Petr Kuznetsov, Matthieu Rambaud


Understanding of the algorithmic foundations behind the blockchain technology.


We study the algorithmic basics behind decentralized and consistent storage systems that tolerate churn and malicious behavior of participating nodes. We begin with the study of classical protocols for reconfigurable storage and Byzantine fault-tolerance. Then we explore the protocols designed for "open" systems, exemplified by the prominent blockchain technology.

Prerequisites: SLR206 (for theory), SLR203 (for practice)

SLR 209 SLR seminar

24h, 2,5 ECTS, Petr Kuznetsov, Patrick Bellot


This module allows the students to deepen the understanding of distributed software systems gained in the SLR track. Each student will study a topic and present it at the seminar organized at the end of the period. The outcome of the project can include a “proof of concept “ implementation.


Teachers offer different study subjects with a basic bibliography. These topics concern the large-scale distributed computing: modelling, verification, distributed algorithms, blockchain, architecture, middleware, virtualization, parallelization, methodology, etc.

Each student chooses a topic to study, discusses it with the topic supervisor in several scheduled meetings, writes a short report and prepares a presentation.