81614 - LABORATORIO DI SISTEMI SOFTWARE

Anno Accademico 2022/2023

  • Docente: Danilo Pianini
  • Crediti formativi: 6
  • SSD: ING-INF/05
  • Lingua di insegnamento: Italiano
  • Moduli: Danilo Pianini (Modulo 1) Angelo Croatti (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

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

MODULO 1

  • Kotlin per programmatori Scala/Java
  • Build automation (via Gradle)
  • Automated Quality Assurance
  • Condivisione: attribuzione di versioni e licenze al software
  • Organizzazione pratica del lavoro di squadra (usando git)
  • Advanced version control (submodules, rebasing, cherry-picking, squashing, stashing)
  • Continuous integration
  • Continuous delivery/deployment
  • Containerizzazione

MODULO 2

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

Testi/Bibliografia

Le slide dei docenti sono liberamente accessibili online, i riferimenti sono pubblicati su Virtuale e sono comunque reperibili dalla pagina GitHub del responsabile del corso.

Testi suggeriti (acquisto non necessario):

  • 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

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

Metodi didattici

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

In considerazione della tipologia di attività e dei metodi didattici adottati, la frequenza di questa attività formativa richiede la preventiva partecipazione di tutti gli studenti ai moduli 1 e 2 di formazione sulla sicurezza nei luoghi di studio, in modalità e-learning.

Modalità di verifica e valutazione dell'apprendimento

Esame orale basato sulla discussione di un progetto da svolgersi gruppo, che va consegnato almeno 7 giorni prima della data del colloquio.

Le date del colloquio saranno fissate caso-per-caso, senza appelli predefiniti. Si fa notare che, nel caso in cui si necessiti di svolgere l'orale entro una precisa data, è bene contattare il docente con largo anticipo (3 o 4 settimane, anche prima di consegnare il progetto) per assicurarsi la disponibilità nella finestra temporale desiderata.

Il colloquio comincia con una presentazione da parte del gruppo di lavoro, e può essere svolto con l'ausilio di materiale preparato dallo studente (tipicamente, slides).

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.

Gli studenti possono adottare qualunque ausilio nella prova di progetto (librerie di terze parti, framework, documentazione...).

È aperta la possibilità, da valutarsi gruppo per gruppo, di impiegare le tecniche trattate in questo corso per lo sviluppo di un solo progetto per più esami.

La valutazione del corso sarà in trentesimi. Il progetto sarà valutato da entrambi i docenti, che valuteranno congiuntamente la qualità dell'elaborato. Il giudizio finale verrà formulato a seguito dello scambio di opinioni dei docenti, tramite media delle valutazioni proposte da ciascun docente. Tale media potrebbe poi essere aumentata, a discrezione dei docenti, per premiare aspetti particolarmente meritevoli, o presentazioni orali particolarmente brillanti.

La frequenza delle lezioni, pur essendo caldamente raccomandata, non ha alcuna influenza sulla valutazione finale.

La realizzazione dell'elaborato rientra nella verifica delle abilità (saper fare), mentre la discussione orale concorre alla verifica di conoscenze (sapere).

La gradazione del voto avverrà come segue:

18-23: preparazione e capacità di analisi sufficienti, conoscenza sufficiente e utilizzo di un numero limitato di metodi e strumenti affrontati nel corso, utilizzo di un linguaggio complessivamente corretto.

24-27: preparazione tecnicamente adeguata ma con alcuni limiti rispetto agli argomenti trattati; capacità di analisi buone; conoscenza elevata e utilizzo appropriato di un buon numero di metodi e strumenti affrontati nel corso.

28-30: preparazione tecnicamente elevata, conoscenza approfondita ed uso ampio di tecniche, metodi, e strumenti presentati nel corso; buone capacità di analisi e di critica, padronanza della terminologia specifica.

30L: conoscenza esaustiva e approfondita dei temi affrontati nel corso, capacità di analisi critica e di scelta di tecniche e strumenti adeguati in rapporto al progetto specifico, padronanza delle metodologie, tecniche, e strumenti discussi nel corso; padronanza della terminologia specifica.

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