81614 - Laboratory of Software Systems

Course Unit Page

Academic Year 2022/2023

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;
  • 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 supporting 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

  • Kotlin for Scala/Java programmers
  • Build automation, with Gradle as reference tool
  • Automated Quality Assurance
  • Software versioning and licensing
  • Teamwork organization via git
  • Advanced version control (submodules, rebasing, cherry-picking, squashing, stashing)
  • Continuous integration (via GitHub Actions)
  • Continuous delivery/deployment
  • Containerization

MODULE 2

  • Domain-Driven Design (principi, tecniche, applicazioni, pattern strategici e tattici, pattern avanzati)
  • Enterprise Software Architectures
  • Meta-modelling
  • External Domain-Specific Languages (DLS)

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 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

Laboratory lectures. 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 in e-learning mode.

Assessment methods

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.

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