81614 - Laboratory of Software Systems

Academic Year 2020/2021

  • Docente: Danilo Pianini
  • Credits: 6
  • SSD: ING-INF/05
  • Language: Italian
  • Moduli: Danilo Pianini (Modulo 1) Angelo Croatti (Modulo 2)
  • Teaching Mode: Traditional lectures (Modulo 1) Traditional lectures (Modulo 2)
  • Campus: Cesena
  • Corso: Second cycle degree programme (LM) in Computer Science and Engineering (cod. 8614)

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;
  • 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 supporting DDD/MDD: creation of domain-specific languages (DSLs) and corresponding code generators (Xtext), development of language-internal DSLs in modern programming languages (Kotlin)
  • acquaintance with the design of cyber-physical systems, and in particular the ability to deal with real-time, multi-user, context-aware, distributed, proactive, and highly autonomous software systems.

 

Course contents

  • Quick course of Kotlin for Scala/Java programmers
  • Build automation, with Gradle as reference tool
  • Documentation as code (Markdown, Jekyll/Liquid, Orchid/Pebble)
  • Software versioning and licensing
  • Team work organization (git as reference tool)
  • Continuous integration (Travis CI as reference tool)
  • Software QA along the whole development process (Codacy, Codecov, Jacoco, Detekt, Ktlint as reference tools)
  • Continuous delivery
  • Containerization and deployment on the cloud (Docker, Kubernetes)
  • Patterns for distributed software engineering (Function as a Service, Serverless, Command Query and Responsibility Segregation)
  • Domain Driven Design and Model Driven Design
  • Domain-Specific Language design with Xtext
  • Human in the loop and context awareness
  • DDD/MDD applied to modern case studies (Healthcare 4.0, eXtended Reality)

Readings/Bibliography

Suggested books (not required for the course):

  • Domain-driven design - Eric Evans
  • Implementing Domain-Specific Languages with Xtext and Xtend - Lorenzo Bettini
  • 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

Teaching methods

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

All lessons can be followed via Internet, interactively.

Assessment methods

Discussion based on a group-developed project.

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.

Groups can ask for the development of a joint project with other optional courses of this master, by applying the aforementioned techniques to a project of another advanced course. This possibility is to be discussed case-to-case, in agreement with the professor of the other course(s).

Teaching tools

The teacher will provide:

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

Office hours

See the website of Danilo Pianini

See the website of Angelo Croatti