Anno Accademico 2023/2024

  • Docente: Mirko Viroli
  • Crediti formativi: 6
  • SSD: ING-INF/05
  • Lingua di insegnamento: Inglese
  • Modalità didattica: Convenzionale - Lezioni in presenza
  • Campus: Cesena
  • Corso: Laurea Magistrale in Ingegneria e scienze informatiche (cod. 8614)

Conoscenze e abilità da conseguire

The goal of this course is to enhance the abilities of prospective software architects to construct models of software systems in a variety of contexts (including cyber-physical systems and the IoT), and turn them into concrete designs of reliable and effective systems and applications. The student will learn to: - model and design computational systems featuring non-determinism, stochasticity, large-scaleness, and intelligence; - adopt advanced programming language constructs, techniques and design patterns to address complex software system development; - rigorously address system requirements adopting techniques of software testing, simulation and verification.


The content of the course is organised around a selected set of topics that concern sound modelling and design (and implementation thereof) of modern, complex software systems that include:

  • large-scale distributed systems
  • software systems featuring complex domains
  • software systems with intelligent components
  • simulation of distributed cyber-physical systems

Such topics are covered by the following didactic modules:

  1. high-level patterns of system programming in Java and Scala: component programming, monads, effects
  2. full test-driven system development: testing coverage, TDD, Acceptance TDD and Behavioural-Driven Development, property-based testing
  3. systematic validation: model-checking (MC), probabilistic MC, approximate MC, simulation
  4. large-scale system modelling: Petri-nets, non-determinism, networks of devices, chemical-oriented models
  5. probability and adaptiveness: discrete-time markov chains (DTMC), continuous-time markov-chains (CTMC)
  6. self-organisation and macro-programming: patterns and aggregate computing
  7. decision processes and learning: markov decision processes, reinforcement learning (RL), deep RL, multiagent RL
  8. program synthesis with AI: LLMs, role in testing, role in program completion


- Selected set of scientific papers

Metodi didattici

The course is developed by means of a set of lectures and activities in lab.

Lectures are based on presentation of high-level topics, possibly with discussion of a selected set of reference papers, and of the notes/slides provided by the teachers.

Laboratory activities concern activities devoted to practice with models, techniques, technologies and tools discussed in the theory.

Modalità di verifica e valutazione dell'apprendimento

Two modalities (students' choice):

- development of some of the tasks proposed in laboratory activities;

- writing a paper, either an original contribution or survey/deepening about some course topic -- possibly in small teams.

In both cases, at the exam the student is expected to well present the developed activity, and to properly discuss its technical details and its connection with theoretical/practical parts of the course.


Strumenti a supporto della didattica

- Selected set of scientific papers

- Notes/slides provided by the teachers

Orario di ricevimento

Consulta il sito web di Mirko Viroli