Anno Accademico 2023/2024

  • Docente: Danilo Pianini
  • Crediti formativi: 6
  • SSD: ING-INF/05
  • Lingua di insegnamento: Inglese
  • Moduli: Danilo Pianini (Modulo 1) Giovanni Ciatto (Modulo 2)
  • Modalità didattica: Convenzionale - Lezioni in presenza (Modulo 1) Convenzionale - Lezioni in presenza (Modulo 2)
  • Campus: Cesena
  • Corso: Laurea Magistrale in Ingegneria e scienze informatiche (cod. 8614)

Conoscenze e abilità da conseguire

By the end of the course, the student is expected to master advanced techniques for organising the software development process, and in particular: - ability to set up, evolve, and maintain an agile development process, including build automation, multi-platform and multi-target testing, continuous integration, and continuous delivery; - advanced knowledge of modern version control systems - understanding of the software licensing (with a focus on open source products) and of the existing models of software versioning; - capacity of performing a domain-first analysis in a technology-independent fashion, leveraging techniques of Domain-Driven (DDD) and Model Driven (MDD) development; - knowledge of supporting tools for DDD/MDD: creation of domain-specific languages (DSLs) and corresponding code generators, development of language-internal DSLs in modern programming languages.



  • Introduction to Kotlin
  • Internal domain-specific languages in Kotlin
  • Build automation (Gradle as reference tool)
  • Automated Quality Assurance
  • Software versioning
  • Software licensing
  • Teamwork organization via git
  • Advanced version control (submodules, rebasing, cherry-picking, squashing, stashing)
  • Continuous integration (GitHub Actions)
  • Continuous delivery/deployment


  • Domain-Driven Design
  • Model-Driven Design
  • External and Internal Domain-Specific Languages (DLSs)
  • Containerization
  • Orchestration
  • Multi-Platform Programming (Kotlin)
  • Bug hunting and Performance Engineering


The teachers' slides are freely available online, references are available on Virtuale, and in any case they can be retrieved from the GitHub profile of the course main teacher.

Suggested books (not required for the course):

  • Domain-driven design - Eric Evans
  • Fundamentals of Software Architecture. An Engineering Approach - Mark Richards, Neal Ford
  • Pattern, Principles and Practices of Domain-Driven Design - Scott Millett, Nick Tune

Additional suggested readings:

  • Mastering Kotlin - Nate Ebel
  • Kotlin in Action - Dmitry Jemerov, Svetlana Isakova
  • Practical Domain-Driven Design in Java - Vijay Nair
  • Model-Driven Software Development. Technology, Engineering, Management - Thomas Stahl, Markus Völter
  • Implementing Domain-Specific Languages with Xtext and Xtend - Lorenzo Bettini

Metodi didattici

Lectures with practice in lab. Any concept is immediately followed by a hands-on session, so that students rapidly grow confident with the techniques and tools.

Due to the kind of activity, attending the lectures requires the participation of all students to modules 1 and 2 on safety in workplaces. The course can be attended on the e-learning platform: https://elearning-sicurezza.unibo.it/.


Modalità di verifica e valutazione dell'apprendimento

Discussion based on a group-developed project. The project must be finalized at least one week prior to the discussion.

Discussion dates are to be fixed on a case-by-case basis, without pre-defined dates. In case a group needs an appointment before some specific date, the students should contact the teachers in advance to make sure a slot for the exam is available (3/4 weeks are recommended, there is no need for the project to be complete at the time the date is fixed).

At the beginning of the discussion, the candidates must present their project. They are allowed to use any material, including slides.

The project must be developed with the DDD/MDD philosophy, and may be in the context of the cyber-physical scenarios discussed during the course. The project must witness the acquired ability of organizing a team workflow appropriately using the version control tools; automating the phases of building, testing, maintenance, verification, quality assurance, documentation and deployment of the product.

Students can rely on any tool in the development phase of the project (libraries, framework, documentation...).

Groups can apply the aforementioned techniques to a project valid for other courses. This possibility is to be discussed case-to-case.

The course evaluation will be in thirtieth. The project will be evaluated by both teachers, which will reach an agreement through the average of their opinions. In case the project features some especially interesting aspects, or the presentation is exceptionally brilliant, some points could be added on top of the initial evaluation.

Attending the lectures is warmly recommended, but frequency won't directly impact the final evaluation.

The evaluation will be provided according to the following schema:

18-23: sufficient preparation and analysis capabilities; sufficient knowledge but limited use of the methodologies, techniques, and tools presented in the course; informative discussion overall.
24-27: fair technical preparation and analysis capabilities but with some limitations; good knowledge and large use of the methodologies, techniques, and tools presented in the course; informative discussion.
28-30: good technical preparation and analysis capabilities; extensive knowledge and large use of the methodologies, techniques, and tools presented in the course; mastery of the terminology and involving discussion.
30L: excellent technical preparation and analysis capabilities; extensive knowledge and state-of-the-art use of the methodologies, techniques, and tools presented in the course; mastery of the terminology and insightful discussion.

Strumenti a supporto della didattica

The teacher will provide:

  • Notes and slides
  • Code examples
  • Template projects
  • References to the tools' documentation

Link ad altre eventuali informazioni


Orario di ricevimento

Consulta il sito web di Danilo Pianini

Consulta il sito web di Giovanni Ciatto