- Docente: Danilo Pianini
- Credits: 6
- SSD: ING-INF/05
- Language: English
- Moduli: Danilo Pianini (Modulo 1) (Modulo 2) Giovanni Ciatto (Modulo 3)
- Teaching Mode: Traditional lectures (Modulo 1) Traditional lectures (Modulo 2) Traditional lectures (Modulo 3)
- Campus: Cesena
-
Corso:
Second cycle degree programme (LM) in
Computer Science and Engineering (cod. 8614)
Also valid for Second cycle degree programme (LM) in Computer Science and Engineering (cod. 6699)
-
from Sep 18, 2025 to Sep 19, 2025
-
from Sep 25, 2025 to Oct 17, 2025
-
from Oct 23, 2025 to Dec 19, 2025
Learning outcomes
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.
Course contents
MODULE 1
- 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
MODULE 2
- Domain-Driven Design
- Model-Driven Design
- External and Internal Domain-Specific Languages (DLSs)
- Containerization
- Orchestration
- Multi-Platform Programming (Kotlin)
- Bug hunting and Performance Engineering
Readings/Bibliography
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's 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
Teaching methods
Lectures and practical lab sessions.
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/.
Assessment methods
The discussion is based on a group‑developed project, which must be finalized at least two weeks 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 demonstrate the acquired ability of organizing a team workflow appropriately with version control tools; and automating the phases of building, testing, maintenance, verification, quality assurance, documentation and deployment of the product.
Students can rely on any tools 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 by case.
The course will be scored on a 30‑point scale. 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 attendance 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 (cum laude): 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.
Teaching tools
The teacher will provide:
- Notes and slides
- Code examples
- Template projects
- References to the tools' documentation
Links to further information
Office hours
See the website of Danilo Pianini
See the website of
See the website of Giovanni Ciatto