81614 - LABORATORIO DI SISTEMI SOFTWARE

Scheda insegnamento

Anno Accademico 2020/2021

Conoscenze e abilità da conseguire

Al termine del corso lo studente possiede conoscenze specialistiche avanzate nell'ambito della progettazione e della realizzazione dei moderni sistemi software. In particolare: - è in grado di impostare efficacemente processi di sviluppo, testing e manutenzione di software basati su approcci agili e meccanismi avanzati di Continuous Integration; - sa affrontare l'analisi e la progettazione del software in maniera technology independent seguendo approcci Model Driven (con riferimento, tra gli altri, ai meccanismi di definizione di linguaggi domain-specific e di generazione automatica di codice sorgente); - sa confrontarsi con le crescenti esigenze in termini di progettazione di sistemi software cyber-fisici (che rappresentano il principale contesto di applicazione delle conoscenze acquisite nel corso) con particolare riferimento alla loro natura di sistemi software real-time, multi-utente, cooperativi, context-aware e composti da elementi fortemente autonomi e/o proattivi.

Contenuti

  • Kotlin per programmatori Scala/Java
  • Build automation, usando Gradle
  • Documentazione come codice sorgente (Markdown, Jekyll/Liquid, Orchid/Pebble)
  • Condivisione: attribuzione di versioni e licenze al software
  • Organizzazione pratica del lavoro di squadra (usando git)
  • Continuous integration (usando Travis CI)
  • Controllo di qualità del software lungo tutto il processo di sviluppo (usando Codacy, Codecov, Jacoco, Detekt, Ktlint...)
  • Continuous delivery
  • Containerizzazione e deployment sul cloud (Docker, Kubernetes)
  • Pattern per l'ingegneria dei sistemi distribuiti (Function as a Service, Serverless, Command Query and Responsibility Segregation)
  • Domain Driven Design e Model Driven Design
  • Domain-Specific Language design usando Xtext
  • Human in the loop e context awareness
  • DDD/MDD applicata a casi di studio moderni (Healthcare 4.0, eXtended Reality)

Testi/Bibliografia

Testi suggeriti (acquisto non necessario):

  • 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

Letture consigliate:

  • 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

Metodi didattici

Lezione in laboratorio. Ogni concetto viene corredato da immediata sperimentazione pratica, al fine di acquisire rapidamente confidenza e manualità.

Tutte le lezioni vengono erogate in modalità mista, per consentire la fruizione e l'interazione a distanza.

Modalità di verifica dell'apprendimento

Esame orale basato sulla discussione di un progetto da svolgersi gruppo.

Il progetto dovrà essere sviluppato con filosofia DDD/MDD, potrà fare riferimento agli scenari sistemi cyber-phyisical presentati nel corso, e deve mostrare l'acquisita capacità di organizzare il flusso di lavoro usando il controllo di versione distribuito, la costruzione di un sistema di automazione della costruzione, manutenzione, verifica, e distribuzione del software, un processo di gestione della qualità del prodotto, un'infrastruttura per la generazione di documentazione.

È aperta la possibilità, da valutarsi gruppo per gruppo e a fronte di accordo con docenti di altri corsi opzionali della magistrale, di impiegare le tecniche trattate in questo corso per lo sviluppo di un solo progetto che copra entrambi gli esami.

Strumenti a supporto della didattica

L'insegnante fornirà quanto segue

  • Slide e appunti
  • Esempi di codice
  • Interi progetti template
  • Riferimenti alla documentazione degli strumenti in uso

Orario di ricevimento

Consulta il sito web di Danilo Pianini

Consulta il sito web di Angelo Croatti