- Docente: Mirko Viroli
- Credits: 6
- SSD: IINF-05/A
- Language: English
- Moduli: Mirko Viroli (Modulo 1) Gianluca Aguzzi (Modulo 2)
- Teaching Mode: In-person learning (entirely or partially) (Modulo 1); In-person learning (entirely or partially) (Modulo 2)
- Campus: Cesena
- Corso: Second cycle degree programme (LM) in Computer Science and Engineering (cod. 6699)
Learning outcomes
The goal of this course is to enhance the abilities of prospective software architects and engineers to construct reliable and dependable software systems in complex scenarios (including cyber-physical systems, smart cities, and large IoT systems) and featuring AI and Generative AI both in software components (e.g., intelligent agents) and in the software development process (e.g., AI-assisted programming). 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 specifications and development; - rigorously address system requirements adopting techniques of software testing, simulation and verification; - exploit Generative AI to assist and automate the software development process in its various stages.
Course contents
The course content is organised around a selected set of topics in modern software engineering, namely, focussing on the sound modelling, design, and implementation that is required due to recent trends in AI for Software Engineering (AI4SE) and Software Engineering for AI (SE4AI), including:
- large-scale distributed systems
- software systems featuring complex domains
- software systems incorporating intelligent, autonomous, or agentic components
- simulation of distributed cyber-physical systems
Such topics are covered by the following didactic modules:
- high-level patterns of system programming in Java and Scala: DSLs, monads, effects
- full test-driven system development: testing coverage, TDD, Acceptance TDD and Behavioural-Driven Development, integration testing, property-based checking
- AI-native software engineering: intent-driven design, personalisation and adaptation of coding agents for dependable software engineering, including best practices and human-agent development patterns
- large-scale system modelling and validation: Petri-nets, non-determinism, networks of devices, chemical-oriented models
- probability and adaptiveness, and their validation: discrete-time markov chains (DTMC), continuous-time markov-chains (CTMC), self-organisation and aggregate computing
- decision processes and learning: markov decision processes, reinforcement learning (RL), deep RL, multiagent RL
- advanced AI engineering: generative AI design patterns, validation of AI agents, and engineering AI agents within structured software frameworks
Readings/Bibliography
- Selected set of scientific papers
Teaching methods
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.
Assessment methods
Students will develop a selection of tasks proposed in laboratory activities, or negotiated with professors.
At the exam the student is expected to well present the developed activities, and to properly discuss its technical details and its connection with the other theoretical/practical parts of the course.
The typical range of graduation is:
[18-23] modest complexity of tasks, limited understanding of the concepts introduced in the course, limited application of those concepts to the developed tasks
[24-28] reasonable complexity of tasks, good understanding of the concepts introduced in the course, good application of those concepts to the developed tasks
[29-30L] very goood understanding of the concepts introduced in the course, with remarkable application to the tasks
Teaching tools
- Selected set of scientific papers or available documentation
- Notes/slides provided by the teachers
- Software tools: Java, Scala, Gradle, and other ad-hoc libraries
Office hours
See the website of Mirko Viroli
See the website of Gianluca Aguzzi