• Non ci sono risultati.

INGEGNERIA DEI SISTEMI DISTRIBUITI E LABORATORIO

N/A
N/A
Protected

Academic year: 2022

Condividi "INGEGNERIA DEI SISTEMI DISTRIBUITI E LABORATORIO"

Copied!
6
0
0

Testo completo

(1)

DIPARTIMENTO DI MATEMATICA E INFORMATICA Corso di laurea magistrale in Informatica

Anno accademico 2019/2020 - 1° anno - Curriculum Sistemi di Rete e Sicurezza

INGEGNERIA DEI SISTEMI DISTRIBUITI E LABORATORIO

9 CFU - 1° semestre

Docenti titolari dell'insegnamento

EMILIANO ALESSIO TRAMONTANA - Modulo INGEGNERIA DEI SISTEMI DISTRIBUITI - INF/01 - 6 CFU Email: tramontana@dmi.unict.it

Edificio / Indirizzo: Blocco 3 del Dipartimento di Matematica e Informatica Telefono: 0957383008

Orario ricevimento: Mercoledì dalle 15:00 alle 17:00

ANDREA FRANCESCO FORNAIA - Modulo LABORATORIO - INF/01 - 3 CFU Email: fornaia@dmi.unict.it

Edificio / Indirizzo: blocco 3 DMI Telefono: 0957383008

Orario ricevimento: Mercoledì 15:00 - 17:00

OBIETTIVI FORMATIVI

INGEGNERIA DEI SISTEMI DISTRIBUITI

Obiettivi formativi generali in termini di risultati di apprendimento attesi.

1. Conoscenza e capacità di comprensione (knowledge and understanding): lo studente conoscerà meccanismi di programmazione avanzata, inclusi programmazione ad aspetti, parallela, asincrona, distribuita.

2. Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente avrà la capacità di progettare sistemi software distribuiti e complessi.

3. Autonomia di giudizio (making judgements): lo studente acquisirà la capacità di analizzare sistemi distribuiti e complessi.

4. Abilità comunicative (communication skills): lo studente imparerà a descrivere in linguaggio tecnico le caratteristiche fondamentali dei sistemi distribuiti e paralleli.

5. Capacità di apprendimento (learning skills): lo studente potrà affrontare e risolvere problemi di progettazione e implementazione in ambiti realistici, studiando, valutando e utilizzando, nuove tecnologie per i sistemi distribuiti.

LABORATORIO

Obiettivi formativi generali in termini di risultati di apprendimento attesi.

(2)

Conoscenza e capacità di comprensione (knowledge and understanding): lo studente 1.

conoscerà meccanismi di sviluppo avanzati, inclusi sviluppo collaborativo e distribuito, analisi dei dati relativi al processo di sviluppo, validazione di sistemi concorrenti, automatizzazione del processo di rilascio, progettazione e implementazione di sistemi distribuiti a microservizi.

Capacità di applicare conoscenza e comprensione (applying knowledge and understanding):

2.

lo studente avrà la capacità di adoperare strumenti avanzati di sviluppo, validazione e rilascio per applicazioni distribuite.

Autonomia di giudizio (making judgements): lo studente acquisirà la capacità di analizzare 3.

sistemi di sviluppo, validazione e rilascio per applicazioni distribuite.

Abilità comunicative (communication skills): lo studente imparerà a descrivere in linguaggio 4.

tecnico le caratteristiche fondamentali dei sistemi sistemi di sviluppo, validazione e rilascio per applicazioni distribuite.

Capacità di apprendimento (learning skills): lo studente potrà affrontare e risolvere problemi 5.

di utilizzo e implementazione in ambiti realistici, studiando, valutando e utilizzando, nuove tecnologie per lo sviluppo, la validazione e il rilascio di applicazioni distribuite.

MODALITÀ DI SVOLGIMENTO DELL'INSEGNAMENTO

INGEGNERIA DEI SISTEMI DISTRIBUITI

Lezioni frontali per concetti e soluzioni, spiegazione di esempi di codice per le tecniche esaminate.

LABORATORIO

Lezioni frontali per concetti e soluzioni, prove pratiche con esempi di codice per le problematiche esaminate.

PREREQUISITI RICHIESTI

INGEGNERIA DEI SISTEMI DISTRIBUITI

Capacità di progettare ed implementare sistemi ad oggetti in C++ o Java.

LABORATORIO

Capacità di progettare ed implementare sistemi ad oggetti in C++ o Java.

FREQUENZA LEZIONI

INGEGNERIA DEI SISTEMI DISTRIBUITI

La frequenza delle lezioni è fortemente consigliata.

LABORATORIO

La frequenza delle lezioni è fortemente consigliata.

(3)

CONTENUTI DEL CORSO

INGEGNERIA DEI SISTEMI DISTRIBUITI

Design pattern per sistemi distribuiti: Proxy, Broker, Forward-Receiver, Remote Facade, Data Transfer Object, Session State, Serialized Large Object. Progettazione ed implementazione del software orientato agli aspetti. Design pattern ad aspetti e Refactoring ad aspetti. Java 8 e Map Reduce. Reactive programming con design pattern Circuit Breaker, Bulkheads. Design pattern per la sicurezza e i sistemi distribuiti. Middleware orientato ai messaggi RabbitMQ.

LABORATORIO

Introduzione ai DevOps. Git Workflow e sviluppo distribuito. Mining Software Repository. Testing Combinatoriale. Model Checking per sistemi concorrenti. Infrastructure Automation con OpenStack.

Microservizi. Microservizi con Spring Boot.

TESTI DI RIFERIMENTO

INGEGNERIA DEI SISTEMI DISTRIBUITI

1. F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, M. Stal. Pattern-Oriented Software Architecture A System of Patterns. John Wiley and Sons, 1996

2. M. Fowler. Patterns of Enterprise Application Architecture. Addison-Wesley, 2003

3. M. Schumacher, E. Fernandez-Buglioni, D. Hybertson, F. Buschmann, P. Sommerlad. Security Patterns: Integrating Security and Systems Engineering. John Wiley and Sons, 2006

4. R. Laddad. AspectJ in Action: Enterpriese AOP with Spring Applications. Manning Publications.

2010.

5. R.-G. Urma, M. Fusco, A. Mycroft. Java 8 in Action: Lambdas, streams, and functional-style programming. Manning, 2015

6. G. Hohpe, B. Woolf. Enterprise Integration Patterns. Addison-Wesley, 2003 7. A. Videla, J.J.W. Williams. RabbitMQ in Action. Manning, 2012

LABORATORIO

G. Kim et al.: The DevOps Handbook 1.

S. Chacon and B. Straub: Pro Git 2.

A. Tornhill: Your Code As a Crime Scene 3.

D. R. Kuhn et al.: Practical Combinatorial Testing 4.

M. Young and M. Pezze: Software Testing and Analysis: Process, Principles and Technique 5.

V.C. Bumgardner: OpenStack in action 6.

S. Newman: Building Microservices 7.

M. Macero: Learn Microservices with Spring Boot 8.

ALTRO MATERIALE DIDATTICO

INGEGNERIA DEI SISTEMI DISTRIBUITI

(4)

http://www.dmi.unict.it/~tramonta/sdm/

LABORATORIO

http://www.cs.unict.it/~fornaia/#lectures

PROGRAMMAZIONE DEL CORSO

INGEGNERIA DEI SISTEMI DISTRIBUITI

Argomenti Riferimenti

testi 1 Presentazione del corso con obiettivi. Modularità per sistemi distribuiti e

paralleli

[1, 2]

2 Design pattern Proxy e Reference Monitor [1, 3]

3 Design pattern Remote Proxy e Forward-Receiver [1]

4 Design pattern Remote Facade e Data Transfer Object [2]

5 Design pattern Session State (Client, Server, Database), Serialized Large Object

[2]

6 Design pattern Broker [1]

7 Progettazione con Map Reduce in Java, Stream, espressioni lambda. Design pattern Builder. Test con JUnit

[5]

8 Tipi Java 8: Predicate, Function, IntStream, Supplier [5]

9 Progettazione con callback, Java chiamate asincrone, tipi CompletableFuture [5]

10 Programmazione ad aspetti: costrutti del linguaggio AspectJ. Pointcut e join point. Esempio di aspetto per la protezione degli accessi

[4]

11 Programmazione ad aspetti: pointcut per la cattura del contesto di esecuzione, passaggio di parametri agli advice

[4]

12 Refactoring ad aspetti. Crosscutting statico e dinamico. Pointcut cflow, declare warning

[4]

13 Design pattern ad aspetti: Adapter, Participant e Sincronizzazione. Gestione eccezioni con aspetti

[4]

14 Design pattern per la stabilità: Timeout, Circuit Breaker, Bulkheads

15 Middleware orientato ai messaggi: RabbitMQ [6, 7]

16 Design pattern per i messaggi. Produttori e consumatori di messaggi. Code [6, 7]

(5)

LABORATORIO

Argomenti Riferimenti

testi 1 Introduzione ai DevOps: DevOps lifecycle, Continuous Integration, Continuous

Delivery, SCM e Pipeline

[1]

2 Git Workflow e sviluppo distribuito: commit graph, comandi base, git workflow, concetti avanzati, GitHub, GitLab, Travis, Code Coverage

[2]

3 Mining Software Repository: Hot Spot Analysis, Change Coupling, RepoDriller, PyDriller

[3]

4 Testing Combinatoriale: Test Suite & Scaffolding, Interaction Failures, 2-way interaction, Covering Array, ATGT, esempio su Java Card Verifier

[4, 5]

5 Model Checking per sistemi concorrenti: Logica Temporale (LTL, CTL), algoritmo di Model Checking, NuSMV, Oracolo, generazione automatica Test Suite, esempio Java Card Verifier

[5]

6 Infrastructure Automation con OpenStack: scalabilità, tassonomia cloud, middleware cloud, architettura OpenStack, servizi principali, DevStack, VM lifecycle, Floating Ip, Role Based Access Control, OpenStack APIs

[6]

7 Microservizi: Monolite vs Microservizi, Legge di Conway, Monolith First, Bounded Context, Coordinamento, Service Discovery, Load Balancing, API Gateway, Circuit Breaker, ELK, Stateless Microservices, Affinità di Sessione, VM e Container

[7]

8 Microservizi con Spring Boot: Spring Boot Initializr e Starters, Maven, Dependency Injection, Architettura Applicazione Web Spring, Vagrant e Provisioning, RESTful APIs, CRUD, Zuul

[8]

VERIFICA DELL'APPRENDIMENTO

MODALITÀ DI VERIFICA DELL'APPRENDIMENTO INGEGNERIA DEI SISTEMI DISTRIBUITI

L'esame consiste di un elaborato ed una prova orale.

LABORATORIO

L'esame consiste di un elaborato ed una prova orale.

ESEMPI DI DOMANDE E/O ESERCIZI FREQUENTI INGEGNERIA DEI SISTEMI DISTRIBUITI

Implementare un aspetto software per il caching dei dati

Implementare in modo parallelo la selezione e la somma di importi da un insieme di dati

(6)

riguardanti prodotti venduti.

Implementare in modo asincrono una chiamata ad un metodo.

Descrivere la gestione della sessione.

LABORATORIO

Caratteristiche principali di un approccio DevOps

Descrivere le operazioni di fetch, pull e push tramite trasformazioni sul Commit Graph Proporre alcuni esempi di problemi risolvibili con il Mining di repository Git

Descrivere il concetto di Covering Array

Mostrare un esempio di macchina a stati finiti per NuSMV

Spiegare come il pattern Role Based Access Control viene implementato in OpenStack Descrivere il concetto di Affinità di Sessione e come evitarlo in un contesto a Microservizi Mostrare la struttura tipica di un'applicazione a Microservizi implementata tramite Spring Boot

Riferimenti

Documenti correlati

Tramite la federazioni di enti (condivisione di modelli, applicazioni e banche dati) si sviluppa un approccio integrato di tipo collaborativo.. Pula, 28 Novembre 2006 Gestore

Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): Lo scopo di questo insegnamento è quindi quello di fornire allo studente

L'obiettivo del corso è presentare i principali modelli e tecnologie per la gestione di sistemi software distribuitiA. Verrà analizzata la situazione esistente ed in particolare

Nel primo caso, lo studente deve implementare un server che fornisca determinati servizi e client che, tramite una interfaccia grafica, accettano richieste dall’utente e contattano

24-26: Discreta conoscenza e comprensione degli argomenti; discreta capacità di analisi e sintesi e capacità di argomentare in modo rigoroso i contenuti richiesti; discreta capacità

30-30L: Ottimo livello di conoscenza e comprensione dei contenuti richiesti con un’ottima capacità di analisi e sintesi; ottima autonomia di giudizio e di

30-30L: Ottimo livello di conoscenza e comprensione dei contenuti richiesti con un’ottima capacità di analisi e sintesi; ottima autonomia di giudizio e di

Il corso trasferisce la capacità di applicare le conoscenze acquisite in processi di analisi e progettazione di sistemi ICT distribuiti nonché per la gestione di tali sistemi