Obiettivi formativi OBIETTIVI GENERALI
Il corso ha come obiettivo principale quello di fornire le conoscenze di base per la progettazione e lo sviluppo di un sistema distribuito che sia in grado di soddisfare i principali requisiti di dependability (e.g., affidabilità, disponibilità del servizio, integrità dei dati, confidenzialità delle informazione etc.).
OBIETTIVI SPECIFICI
- Conoscenza e comprensione
I sistemi distribuiti sono alla base di qualsiasi applicazione informatica moderna e pertanto devono essere progettati e sviluppati tenendo in considerazione i principali requisiti non funzionale in grado garantire la qualità del servizio erogato a fronte di guasti, malfunzionamenti e intrusioni nel sistema.
Il corso si propone l'obiettivo principale di fornire agli studenti una chiara caratterizzazione della concorrenza in un sistema distribuito considerando le caratteristiche di tale sistema come guasti, latenza variabile nelle comunicazioni e assenza di un clock globale.
Successivamente si analizzeranno i principali modelli di sistema e le astrazioni di base per la comunicazione e la sincronizzazione, si introdurranno le primitive di base per la costruzione di un middleware, si forniranno i concetti di base di un sistema peer-to-peer con alcuni esempi di sistemi reali tra cui i var tipi di ledger e blockchain. Infine, verranno presentate agli studenti tecniche di base per l'analisi della dependability (modelli analitici e modelli di simulazione) che consentano di valutare il sistema stesso e la sua capacità di soddisfare i livelli di dependability e di qualità del servizio imposti dalle specifiche del sistema stesso.
- Applicare conoscenza e comprensione
Lo studente sarà in grado di progettare sistemi e algoritmi distribuiti al di sopra di diversi modelli di sistema da quelli sincrono, asincrono e parzialmente sincrono capendo impossibilità e limitazione nelle prestazioni. Inoltre avrà la capacita di astrarre sistemi e piattaforme reali in modelli astratti più facili da trattare.
Infine, lo studente sarà in grado di svolgere un'analisi delle dependability del sistema stesso e di svolgere un'analisi comparativa tra diverse soluzioni.
- Capacità critiche e di giudizio
Lo studente sarà in grado di valutare e comparare diverse soluzioni per la realizzazione di applicazioni distribuite. Sarà, inoltre, in grado valutare gli opportuni trade-off in considerazione dei vari aspetti che caratterizzano l'ambiente specifico in cui l'applicazione andrà in esercizio.
- Capacità comunicative
Lo studente acquisirà la terminologia propria del settore.
- Capacità di apprendimento
Lo studente apprenderà tecniche e metodologie di base per la progettazione e lo sviluppo di sistemi e applicazioni distribuite con requisiti di dependability.
|
Obiettivi formativi Obiettivi Generali.
1. Fornire una visione complessiva della sicurezza informatica, intesa come disciplina tecnica e culturale, essenziale nella società digitale contemporanea.
2. Formare professionisti consapevoli, in grado di valutare criticamente la sicurezza di sistemi, applicazioni e infrastrutture informatiche, anche in contesti reali e complessi.
3. Coltivare una mentalità progettuale orientata alla sicurezza, sensibilizzando alla necessità di integrare protezione, riservatezza, autenticità e resilienza fin dalle prime fasi dello sviluppo di tecnologie.
4. Promuovere l’autonomia nello studio e nella ricerca, fornendo strumenti concettuali e metodologici per approfondire temi avanzati o emergenti nel campo della cybersecurity.
Obiettivi Specifici.
1. Comprendere i fondamenti della sicurezza informatica, con particolare attenzione a:
• Crittografia simmetrica e asimmetrica
• Integrità e autenticazione dei messaggi
• Firme digitali e loro standard (PAdES, CAdES, XAdES, JAdES)
2. Studiare i protocolli e i sistemi di sicurezza reali, inclusi:
• HTTPS, IPsec, TLS/SSL, SSH
• Autenticazione tramite password, biometria, Kerberos, certificati X.509
• Sicurezza del sistema email
• Metodologie e sistemi per la sicurezza di rete
3. Analizzare minacce e modelli di attacco, sviluppando:
• Capacità di individuare vulnerabilità
• Comprensione delle tecniche di attacco e difesa
• individuare i pattern di attacco più comuni con particolare riferimento alle applicazioni web
4. Approfondire l’uso di generatori di numeri casuali sicuri, fondamentali per crittografia e protocolli.
5. Applicare la teoria alla pratica, mediante:
• Homework ed esercitazioni
• Progetti e tesi (per studenti interessati)
6. Sviluppare un pensiero critico rispetto alla sicurezza delle tecnologie digitali moderne.
- Conoscenza e Comprensione:
Al termine del corso, lo studente avrà acquisito una solida conoscenza dei principi fondamentali della sicurezza informatica, con particolare riferimento ai modelli teorici e agli strumenti pratici per garantire riservatezza, integrità, autenticazione e disponibilità delle informazioni. In particolare, sarà in grado di:
• comprendere il funzionamento e i limiti dei principali algoritmi crittografici, sia simmetrici che asimmetrici;
• riconoscere e valutare le minacce alla sicurezza nei sistemi di comunicazione, nei protocolli di rete e nelle applicazioni;
• analizzare i meccanismi di autenticazione, gestione delle identità e firme digitali, anche alla luce dei relativi standard internazionali;
• comprendere le architetture di sicurezza nei diversi livelli dello stack protocollare, inclusi HTTPS, TLS, IPsec, SSH e Kerberos.
• conoscere le pratiche di riferimento per la progettazione di stack applicativi sicuri.
La comprensione sarà supportata sia da esempi tratti dal mondo reale sia da attività applicative e discussioni critiche, in modo da favorire una visione sistemica e aggiornata del tema.
- Applicare conoscenza e comprensione:
Lo studente sarà in grado di applicare in modo efficace i concetti e gli strumenti acquisiti per analizzare, progettare e valutare soluzioni di sicurezza in ambito informatico. In particolare, sarà capace di:
• identificare vulnerabilità nei protocolli di comunicazione e nei sistemi informatici;
• selezionare e implementare tecniche crittografiche appropriate a specifici contesti applicativi;
• configurare e valutare protocolli di autenticazione, sistemi di gestione delle identità e infrastrutture di chiave pubblica (PKI);
• analizzare scenari reali di attacco e difesa, formulando strategie di mitigazione e miglioramento della sicurezza;
• comprendere e utilizzare standard e strumenti per la firma digitale e la protezione dei dati in transito e in archiviazione.
Le competenze applicative saranno sviluppate attraverso esercitazioni pratiche, analisi di casi studio e discussioni guidate su vulnerabilità e incidenti noti.
- Capacità critiche e di giudizio:
Al termine del corso, lo studente avrà sviluppato la capacità di analizzare criticamente problemi di sicurezza informatica, valutando in modo autonomo le soluzioni possibili alla luce dei vincoli tecnici, normativi ed etici. In particolare, sarà in grado di:
• riflettere sulle implicazioni dell’adozione (o mancata adozione) di misure di sicurezza nei sistemi digitali;
• confrontare approcci e tecnologie di sicurezza, valutandone efficacia, scalabilità e sostenibilità;
• formulare giudizi motivati su progetti e architetture di sistemi sicuri, tenendo conto di contesti reali e multidisciplinari;
• riconoscere i limiti delle tecnologie esistenti e la necessità di aggiornamento continuo in un settore in rapida evoluzione.
Il corso stimola il pensiero critico attraverso l’analisi di casi studio, discussioni su incidenti reali, e riflessioni sull’etica e la responsabilità nella progettazione di sistemi sicuri.
- Capacità comunicative:
Lo studente acquisirà la capacità di comunicare in modo chiaro, preciso e appropriato contenuti, problemi e soluzioni relativi alla sicurezza informatica, sia a interlocutori specialisti che non specialisti. In particolare, sarà in grado di:
• descrivere e motivare l’adozione di tecnologie e protocolli di sicurezza con linguaggio tecnico accurato;
• esporre in modo comprensibile rischi, contromisure e implicazioni della cybersecurity anche a stakeholder non tecnici (ad esempio in ambito aziendale, legale o istituzionale);
• partecipare attivamente a discussioni critiche su casi di attacco e difesa, anche in contesti collaborativi o interdisciplinari;
• redigere brevi report tecnici e documentazione chiara su configurazioni, analisi e risultati di laboratorio.
Il corso favorisce queste abilità attraverso esercitazioni orali, discussioni collettive, stesura di elaborati e interazione con materiali divulgativi e scientifici.
- Capacità di Apprendimento:
Al termine del corso, lo studente avrà sviluppato solide capacità di apprendimento autonomo e continuo, indispensabili per aggiornarsi in un ambito, come quello della sicurezza informatica, in costante evoluzione tecnologica e normativa.
In particolare, sarà in grado di:
• reperire e comprendere in modo critico documentazione tecnica, articoli scientifici e standard internazionali in materia di cybersecurity;
• approfondire autonomamente temi avanzati o emergenti (es. nuove vulnerabilità, protocolli post-quantum, normative sulla privacy);
• applicare strategie di studio flessibili per affrontare l’eterogeneità delle fonti (manuali, specifiche, white papers, codici di condotta);
• affrontare con metodo e spirito critico progetti di ricerca o sviluppo in sicurezza, anche in ambito accademico o professionale.
Il corso stimola l’apprendimento indipendente attraverso compiti aperti, letture consigliate, accesso a risorse online e un approccio orientato alla risoluzione di problemi reali.
|
Obiettivi formativi General Objectives.
The objectives of this course are to present a wide spectrum of Machine Learning methods and algorithms, discuss their properties, convergence criteria and applicability. The course will also present examples of successful application of Machine Learning algorithms in different application scenarios.The main outcome of the course is the capability of the students of solving learning problems, by a proper formulation of the problem, a proper choice of the algorithm suitable to solve the problem and the execution of experimental analysis to evaluate the obtained results.
Specific Objectives.
Knowledge and understanding:
Providing a wide overview of the main machine learning methods and algorithms for classification, regression, and unsupervised learning learning problems. All the problems are formally defined and theoretical bases as well as technical and implementation details are provided, in order to understand the proposed solutions.
Applying knowledge and understanding:
Solving specific machine learning problems starting from training data, through a proper application of the studied methods and algorithms. The development of small projects to be developed at home allows students to apply the acquired knowledge.
Making judgements:
Ability of evaluating performance of a machine learning system using proper metrics and evaluation methodologies.
Communication skills:
Ability of writing a technical report describing the adopted solution, thus showing abilities in communicating results obtained from the application of the acquired knowledge in solving a specific problem. Being exposed to examples of communication by discussing results obtained in practical cases. By working in team for home projects, students will learn how to effectively communicate at a technical level.
Learning skills:
By acquiring the basic vocabulary and the fundamentals of Machine Learning, students will develop the required skills to autonomously access specialised literature and learn new approaches and techniques, useful to carry out home projects. More in general, the course provides the basics required to successfully learn more advanced ML topics, such as Deep Learning and NLP, typically offered in advanced academic courses.
|
Obiettivi formativi Obiettivi generali.
Il corso introduce ai fondamenti dell’Intelligenza Artificiale, ponendo particolare enfasi sul ragionamento automatico e sul sequential decision-making.
Gli studenti acquisiranno familiarità con i principali formalismi e approcci per la rappresentazione della conoscenza e il ragionamento, sia in contesti statici che dinamici.
Apprenderanno inoltre le basi dei metodi di decisione per domini deterministici, non deterministici, avversari e stocastici.
Obiettivi specifici.
Conoscenza e capacità di comprensione:
Gli studenti acquisiranno le basi della Rappresentazione della Conoscenza per sistemi statici e dinamici tramite approcci formali: logica proposizionale e del primo ordine, situation calculus, MDP.
Verranno studiati i principali problemi logici (valutazione, soddisfacibilità, validità, implicazione logica) e le tecniche base per la loro risoluzione (DPLL, metodo dei tableaux).
L’obiettivo è comprendere l’importanza del modello formale e degli approcci indipendenti dal dominio come strumenti fondamentali per risolvere automaticamente i problemi.
Gli studenti apprenderanno come modellare un dominio di pianificazione tramite il linguaggio PDDL e come risolvere problemi di pianificazione in scenari deterministici, non deterministici, avversari e stocastici.
Saranno introdotte le principali tecniche di ricerca nello spazio degli stati: ricerca non informata, ricerca euristica, best-first search, ricerca A*, AND-OR search.
Per gli scenari stocastici verranno apprese Policy Evaluation e Policy Iteration.
Capacità di applicare conoscenza e comprensione:
Gli studenti impareranno ad astrarre e modellare formalmente scenari del mondo reale rappresentandoli come domini statici o dinamici, così come a identificare e formalizzare problemi reali. Saranno inoltre in grado di applicare le tecniche acquisite durante il corso per risolvere i problemi modellati.
Comprendendo come modellare e risolvere problemi, gli studenti acquisiranno la capacità di progettare e implementare semplici sistemi di ragionamento per una varietà di scenari e problemi reali.
Autonomia di giudizio:
Gli studenti saranno in grado di valutare l’adeguatezza e la qualità di un formalismo di rappresentazione rispetto a diverse classi di problemi e di selezionare la tecnica di soluzione più adeguata.
Abilità comunicative:
Il corso fornirà agli studenti le nozioni e il vocabolario di base per interagire efficacemente con i propri pari e con esperti del settore.
Le abilità comunicative orali saranno stimolate attraverso l’interazione durante le lezioni, mentre quelle scritte saranno sviluppate tramite l’analisi di esercizi e la risposta a domande aperte nella prova finale.
Capacità di apprendimento:
Il corso fornirà agli studenti gli strumenti essenziali per accedere alla letteratura specialistica. In questo modo, potranno rafforzare e ampliare in autonomia le proprie competenze.
Oltre a tali capacità di apprendimento, gli studenti acquisiranno competenze avanzate di modellazione e di problem solving in generale.
|
Obiettivi formativi Obiettivi generali.
Il corso propone un'introduzione a varie tecnologie di sviluppo software, anche distribuito, che potenzialmente possono essere utilizzate in altri corsi del percorso formativo. Inoltre vengono applicate, attraverso lo sviluppo di un progetto in gruppo, le moderne metodologie e tecniche di sviluppo software agile.
Obiettivi specifici.
Conoscenza e comprensione:
Programmazione di servizi Web in Java e Python. Programmazione di sistemi distribuiti con chiamate bloccanti e non bloccanti. SCRUM e metodi agili. Virtualizzazione e dockerizzazione.
Applicare conoscenza e comprensione:
Essere in grado di progettare una applicazione costituita da diversi componenti e microservizi.
Capacità critiche e di giudizio:
Essere in grado di valutare la qualità di una applicazione anche in termini di differenti scelte architetturali e di distribuzione.
Capacità comunicative:
Le attività progettuali e la presentazione del progetto in modalità pitch e con demo funzionante permettono allo studente di essere in grado di comunicare/condividere i requisiti di una applicazione software di media complessità, nonché le scelte progettuali e le metodologie di progettazione e sviluppo di tale applicazione.
Capacità di apprendimento:
Oltre alle classiche capacità di apprendimento fornite dallo studio del materiale didattico, le modalità di svolgimento del corso, in particolare le attività progettuali, stimolano lo studente all'approfondimento autonomo di alcuni argomenti presentati nel corso, al lavoro di gruppo, e all'applicazione concreta delle nozioni e delle tecniche apprese durante il corso.
|
Obiettivi formativi Il corso analizza il processo di sviluppo del software e presenta le metodologia, gli standard di qualità, le metriche e le tecniche comunemente usate per la stima economica, la pianificazione ed il test di applicazioni software di qualità professionale. Al fine di interpretare correttamente le misure utilizzate nel contesto dell'assicurazione della qualità del software, il corso presenta le nozioni di base della teoria della misura e della verifica di esperimenti tramite l'analisi della varianza.
Alla fine del corso lo studente sarà in grado di:
-scegliere un modello per lo sviluppo di una applicazione software,
-stimarne il costo,
-pianificare le attività di progetto,
-progettare i test ed indicare delle metriche per l'assicurazione qualità
-valutare la significatività statistica di esperimenti basati sulla raccolta di campioni numerici.
|
Obiettivi formativi Obiettivi generali:
L'obiettivo del corso è l'indagine sui concetti di base dei sistemi di gestione dei dati, facendo riferimento sia al modello relazionale, sia a modelli NoSQL. Vengono affrontate diverse questioni fondamentali relative alla teoria e alla progettazione di sistemi di gestione dei dati relazionali, tra cui controllo della concorrenza, ripristino, organizzazioni di file e indici, elaborazione delle query, OLAP e OLTP. È richiesta una buona conoscenza dei fondamenti di strutture di programmazione, linguaggi di programmazione e database (SQL, modello di
dati relazionali, modello di dati Entità-Relazione, progettazione di database concettuali e logici).
Conoscenza e comprensione:
Lo studente avrà una buona conoscenza di diversi modelli di dati, anche NoSQL, di come funziona un sistema di gestione dei dati, di come è strutturato e di come è progettato.
Inoltre, lo studente acquisirà conoscenza dell'architettura di un sistema di gestione di database e dei suoi moduli principali (gestore delle transazioni, gestore di recupero, analizzatore di query). Lo studente acquisirà inoltre una buona conoscenza di come progettare l'organizzazione fisica delle relazioni (file e indici) e di come funziona l'ottimizzatore di query di un sistema di gestione dati.
Applicare conoscenza e comprensione:
Gli studenti saranno in grado di progettare il proprio sistema di gestione dei dati, incluso il modulo di controllo della concorrenza, il modulo di ripristino, il modulo per i metodi accesso ai file e l'ottimizzatore di query.
Capacità critiche e di giudizio:
Lo studente sarà in grado di valutare le caratteristiche e la qualità di diversi modelli di dati utilizzati nel mondo reale e dei relativi sistemi di gestione dei dati. Inoltre sarà in grado di scegliere la tecnica giusta per gestire la concorrenza, il recupero e l'elaborazione delle query in contesti applicativi specifici.
Capacità comunicativa:
Gli studenti acquisiranno una buona conoscenza su come illustrare gli algoritmi e le tecniche alla base di un moderno Data Manager.
Capacità di apprendimento:
Lo studente sarà in grado di comprendere qualsiasi nuova architettura e approccio alla gestione dei dati che si affermerà in futuro.
|
Obiettivi formativi
L'obiettivo
del corso è quello di introdurre i concetti fondamentali della progettazione di
algoritmi per problemi polinomiali e problemi computazionali difficili. Il
corso presenterà i concetti di base di progettazione di algoritmi per problemi
di flusso nelle reti e problemi di matching. Tecniche generali come
greedy e programmazione e dinamica saranno applicate a problemi di
cammino minimo, spanning tree, knapsack. Algoritmi di approssimazione saranno
presentati per problemi computazionali difficili come TSP, vertex cover set
cover, sat, scheduling. Particolare enfasi sarà data ai metodi basati sulla
programmazione lineare e gli algoritmi randomizzati. Infine , il corso
introdurrà i principali problemi computazionali in teoria dei giochi.
|