Immigration [November – December]: Introductory modules on the basics, main topics and research trends in the area (30 hours).
Core [January – April]: Detailed modules on selected topics of interest, with a strong focus on research results, techniques, and challenges (14 hours).
Advanced [April – July]: Advanced modules on specific topics of interest for each pillar, with a strong focus on research results, techniques, and challenges (6-10 hours).
Pillar
Title
Instructor
Syllabus
ALG
Design and Analysis of Algorithms
Alkida Balliu, Michele Flammini, Dennis Olivetti
Basic notions of algorithms and complexity; Divide-and-Conquer; Dynamic Programming; Basic data structures: heaps, hash tables; Greedy; Local Search; Network Flow; All-pairs Shortest Paths; NP-complete problems and intractability; PSPACE
FM
Introduction to Formal Methods
Omar Inverso, Catia Trubiani, Emilio Tuosto
Basics on formal models of (concurrent) computations, operational semantics and (labelled) transition systems, regular expressions, basic process algebras. Preliminary concepts of software verification, typical verification flow, common program analysis techniques, decision procedures. Basic concepts of software modelling and analysis with stochastic processes, discrete-time markov processes, and petri nets.
SE
Introduction to Software Engineering
Francesco Basciani, Martina De Sanctis, Amleto Di Salle, Ludovico Iovino, Roberto Natella, Patrizio Pelliccione, Gian Luca Scoccia
Basic concepts of software development paradigms, application domains, the software life cycle, design of software systems and modeling, software architectures. The course also provide some basic knowledge of the tools used to generate software programs from models.
*
How to - Introductory Lectures
Catia Trubiani
How to write a paper. How to give a scientific talk. How to referee a scientific paper.
*
Induction into CS@GSSI
Emiio Tuosto
An overview of the teaching part of the course and the support that the group offers to students
Pillar
Title
Instructor
Syllabus
ALG
Algorithmic Game Theory
Michele Flammini
Basic notions of equilibrium: dominant versus Nash; computational issues of equilibria; performance of equilibria (price of stability and anarchy). Congestion games: congestion games, cost sharing games, load balancing; price of anarchy and stability; PLS-completeness; speed of convergence. Mechanism design and strategyproofness in coalition games. Learning in coalition games.
ALG
Approximation Algorithms
Gianlorenzo D'Angelo
Introduction to linear programming; the set cover problem; greedy algorithms and local search; rounding data and dynamic programming; deterministic rounding of linear programs; random sampling and randomized rounding of linear programs; the primal-dual method; techniques to prove the hardness of approximation.
ALG
Distributed Graph Algorithms
Alkida Balliu, Dennis Olivetti
This course is about theory of distributed computing. We will learn about some of the most studied models of distributed computing, with focus on synchronous and fault-free models. We start from the basics: we formally define the distributed setting and what is a distributed algorithm, illustrating the formal definition with some simple examples. Then we slowly build up on this, focusing at the beginning on simple networks such as rings, and learning how to solve, in this setting, simple fundamental tasks such as coloring, maximal independent set, and maximal matching. Next, we will discuss the topic of decidability: given a problem, can we automatically decide what is its asymptotic distributed complexity? We will see that for a large class of problems, on ring networks, this is actually possible. After that, we switch to more general network topologies, and we will see how to solve some tasks in this setting. Finally, we will see some impossibility results. In particular, we will see how to prove lower bounds for the distributed complexity of some classical problems. A basic knowledge about graph theory and big-O notation is assumed.
ALG
Advanced Algorithms
Alkida Balliu, Dennis Olivetti
In the Advanced Algorithms course we will see advanced methods of algorithmic design in different models of computation.
Some of the topics that we will see are:
* Introduction to the PRAM model (Parallel RAM)
* Parallel algorithms for the Maximum Matching problem
* Prime numbers, testing from primality, quantum algorithms for factorization
* Multiplication of polynomials and Fast Fourier Transform
* Advanced Data Structures
* Randomized Algorithms
FM
Formal Methods at Work
Catia Trubiani
Modelling, analysis, and testing of probabilistic systems: Stochastic Process Algebras, Markov Decision Processes, Timed Automata, Queueing Networks. Software Performance: uncertainty and learning of quantitative software properties.
FM
Introduction to Blockchain and Smart Contracts
Maurizio Murgia
Preliminary notions of cryptography and distributed systems. Consensus in distributed systems. Bitcoin blockchain and contracts. Ethereum blockchain and contracts. Vulnerabilities of smart contracts. Formal methods for smart contracts.
FM
Model Checking
Clemens Grabmayer, Emilio Tuosto
Modelling of reactive systems, review of the model checking approach, temporal logics (LTL, CTL, and CTL*), safety and liveness properties of reactive systems, fairness conditions.
FM
Verification of concurrent programs
Omar Inverso
TBA
FM
Satisfiability Problems and Applications
Franco Raimondi
This course introduces the notion of Boolean Satisfiability (SAT) and Satisfiability Modulo Theories (SMT). The course will provide an overview of decision procedures and it will be mainly concerned with the implementation and the application of SAT and SMT to concrete problems. The course will cover the issue of encoding problems into appropriate SAT and SMT instances, and it will present examples from various research and industry domains, exploring the solutions currently available.
FM
Principles of concurrent and distributed programming
Rocco De Nicola, Emilio Tuosto
This course introduces models of concurrent and distributed programming. The course will explore this topic presenting different paradigms of coordination of concurrent and distributed systems (including shared-memory, message-passing, and tuple spaces) as well as related linguistic constructs. The theoretical underpinning will be reinforced by showing how popular programming languages feature concurrency.
SE
Autonomous and Self-Adaptive Systems
Martina De Sanctis, Patrizio Pelliccione
The course will discuss the motivation for self-adaptation, the basic principles and system properties of autonomous and self-adaptive systems and how to engineer these kinds of systems. The course will also present concrete systems in the domain of e-Health, smart mobility, robotics, and recent advances in the literature.
SE
Continuous Evolution of Software and Artifacts
Amleto Di Salle Franco Raimondi, Patrizio Pelliccione
Software change is inevitable due to several factors like new requirements, business environment changes, errors to be repaired, underlying technologies changes, and the performance or reliability of the system may have to be improved. When a system evolves, there are forces (obstacles) that may cause friction (slow down), even beyond the primary causes (e.g., new requirements) for which the system is evolving. These forces can be more localized/superficial (bad smells) or more pervasive/deeper (technical debt). However, identifying, addressing, and managing these forces can ensure a smoother and more effective system evolution.
In this course, we will explore approaches, challenges, and open research directions on identifying, facing, and managing these forces as part of the continuous evolution of software and, in general, development artifacts.
SE
Engineering of Human-Centric and Smart Systems
Martina De Sanctis, Paola Inverardi, Patrizio Pelliccione, Gian Luca Scoccia, Nicolas Troquard
Modern systems are becoming more and more human-centric and smart. In this course we will explore approaches, challenges, and open research directions in the engineering of human-centric and smart systems. We will give special attention to quality aspects, but also to values that are important to take into account when humans are involved not only as users but also as entities in the decision-making loop.
SE
Theory and Applications of Model-Driven Engineering
Francesco Basciani, Ludovico Iovino
This course will explore model-driven Engineering methodologies applied to practical case studies.The course will cover the basic knowledge of modeling, metamodeling, transformations, and code generation.
SE
Software Testing
Antonella Bertolino
General concepts and techniques of software testing. Main concepts of dependability and reliability testing. Most interesting research challenges in software testing.
SE
Software Security
Roberto Natella
This course will discuss challenges and key techniques to enhance the security of software systems. Topics will include: The role of software vulnerabilities in cybersecurity. The most common classes of software vulnerabilities. Vulnerability disclosure and management. Vulnerability assessment through fuzzing and static analysis. The Secure Software Development Lifecycle. Software Supply Chain Security.
*
Knowledge Representation and Ontology Engineering
Nicolas Troquard
Ontologies are explicit, formal, and shared conceptualizations of a domain of interest. Description Logics are formal languages for knowledge representation used to define ontologies. The Web Ontology Language (OWL) and its profiles are based on Description Logics. We introduce the discipline of knowledge representation and reasoning. We motivate and present the syntax and the semantics of the main Description Logics, and their computational complexity for reasoning tasks. We use Protégé for a hands-on session on semantic technologies. Additionally, we discuss selected topics that occupy researchers and practitioners in the field, e.g.: ontology-based data access, concept learning, ontology repairs, etc.
Pillar
Title
Instructor
Syllabus
ALG
Experimental Algorithmics and Algorithm Engineering
Gianlorenzo D'Angelo
Experimental design; Measures in algorithmic experiments; Algorithm and code tuning; Building test environments; Analysis of experimental data.
FM
Software Verification for Safety and Security
Omar Inverso
Motivation and regulations for (cyber)security; Preliminary concepts; Coding standards and vulnerability databases; Examples.
FM
Models of Computation
Clemens Grabmayer
The course aims at familiarizing attendees with basic concepts of computability theory and with several diverse models of computation. Following the historical development, three classical models will be presented first: Turing machines, recursive functions, and Lambda Calculus. Subsequently, more recent models in computer science and other fields like science and biology will be explained.
The focus will be on understanding underlying intuitions rather than on exhaustively formal presentations. Specific attention will be directed to the comparison of the computational power of different models by finding, whenever possible, simulations between them, modulo `reasonable' encodings. By recognizing that some quite disparate models are computationally equally powerful, we will survey some of the ample empirical evidence that ‘computability’ is a fundamental concept, the Church-Turing Thesis: every `informally computable' function is Turing-computable (and equivalently, is definable in Lambda Calculus), modulo reasonable encodings.
ALG, FM
Introduction to Parameterized Complexity
Clemens Grabmayer
Parameterized complexity theory is concerned with a refined analysis of computational problems. The computational effort needed to decide a problem is described by (1+k)-ary functions that depend not only on the size of problem instances, but also on k >= 1 parameters that quantify relevant structural properties of instances. Many intractable problems can be classified to be `Fixed-Parameter Tractable' (FPT) for appropriate choices of parameter(s). Such FPT problems are frequently tractable in practice for instances with small parameters.
The course is an interleaving of two parts, which focus on Algorithmic (A) aspects, and on Formal Methods (FM) viewpoints, respectively. The algorithmic part (A) covers methods for designing FPT-algorithms (kernelization, and dynamic programming with graph-width parameters). The formal methods part (FM) introduces algorithmic meta-theorems for obtaining FPT-results such as Courcelle’s theorem, and classifications of `FPT-intractability' by means of concepts from mathematical logic (the W/A-hierarchies of complexity classes based on model checking problems).
SE
Mining Software Repositories
Gian Luca Scoccia
Nowadays, there are vast amounts of data available in software-related repositories, such as source control systems, defect trackers, code review repositories, app stores, question-and-answer sites, and package registries. Mining this information can help to understand software development and evolution, software users, and runtime behavior; support the maintenance of software systems; improve software design/reuse; support predictions about software development; and exploit this knowledge in planning future development. This course will provide an overview of how to conduct an Mining Software Repositories (MSR) study, including setting up a study, formulating research goals and questions, identifying repositories, extracting and cleaning the data, performing data analysis and synthesis, and discussing MSR study limitations.
Interdisciplinary
Elements of Cybersecurity
Rocco De Nicola
TBA