INGEGNERIA DEL SOFTWARE+TECNOLOGIE INTERNET
cod. 1010128

Anno accademico 2023/24
3° anno di corso - Primo semestre
Docente responsabile dell'insegnamento
Agostino POGGI
insegnamento integrato
12 crediti
sede: PARMA
insegnamento
in ITALIANO

Insegnamento strutturato nei seguenti moduli:

Obiettivi formativi

Ingegneria del Software

Il corso intende fornire una conoscenza approfondita sulle metodologie e tecniche per lo sviluppo del software, sul linguaggio di programmazione Java e sugli strumenti che possono semplificare lo sviluppo e la gestione di sistemi software.
Inoltre, il corso ha l’obiettivo di fornire la capacità di utilizzare la conoscenza acquisita e l’esperienza accumulata durante le esercitazioni per individuare le migliori soluzioni per progettare dei sistemi software e per realizzarne delle implementazioni soddisfacenti sia per quanto riguarda la qualità dei sistemi realizzati e sia per quanto riguarda il costo dello sviluppo.

Ingegneria delle Tecnologie Informatiche

Conoscenze e capacità di comprendere - Mediante le lezioni frontali tenute durante il corso, lo studente apprenderà le principali tecnologie Web e il linguaggio di programmazione JavaScript. Lo studente apprenderà inoltre i principi e le tecnologie delle architetture orientate ai servizi. Lo studente acquisirà competenze sulle principali architetture e protocolli dei sistemi peer-to-peer e blockchain. Infine, lo studente apprenderà le basi della crittografia e dei protocolli per la comunicazione sicura.
Capacità di applicare conoscenza e comprensione - Mediante le lezioni frontali e le esercitazioni pratiche svolte in classe relativamente ad alcuni argomenti del programma, lo studente apprenderà come applicare le conoscenze acquisite in un contesto reale di progettazione. In particolare, lo studente imparerà a: sviluppare pagine Web dinamiche, sviluppare applicazioni Web, progettare e realizzare servizi Web, progettare e realizzare applicazioni di tipo peer-to-peer, con attenzione alle problematiche legate alla sicurezza.
Autonomia di giudizio - Lo studente dovrà essere in grado di comprendere e valutare in maniera critica le principali tecnologie legate al mondo di Internet.
Capacità comunicative - Tramite le lezioni frontali e il confronto con il docente, lo studente acquisirà il lessico specifico delle tecnologie Internet. Ci si attende che, al termine del corso, lo studente sia in grado di trasmettere, in forma orale e in forma scritta, i principali contenuti del corso, quali idee, problematiche ingegneristiche e relative soluzioni.
Capacità di apprendimento - Lo studente che abbia frequentato il corso sarà in grado di approfondire le proprie conoscenze in materia di tecnologie Internet attraverso la consultazione autonoma di testi specialistici, riviste scientifiche o divulgative, anche al di fuori degli argomenti trattati strettamente a lezione, al fine di affrontare efficacemente l’inserimento nel mondo del lavoro o intraprendere percorsi di formazione successivi.

Prerequisiti

Ingegneria del Software

Fondamenti di informatica, Fondamenti di programmazione.

Contenuti dell'insegnamento

Ingegneria del Software

Il corso presenta le principali tecniche e metodologie per lo sviluppo di sistemi software con particolare riferimento ai sistemi orientati agli oggetti e introduce il linguaggio di programmazione Java. In particolare, il corso affronta i seguenti argomenti:
Introduzione
Processi e modelli di sviluppo
Ingegneria dei Requisiti
Progettazione
Implementazione e il test
Installazione e manutenzione
Gestione dei progetti
Java

Ingegneria delle Tecnologie Informatiche

1. Tecnologie Web
2. Architetture orientate ai servizi
3. Sistemi peer-to-peer
4. Blockchain
5. Cybersecurity

Programma esteso

Ingegneria del Software

Introduzione
Processi e modelli di sviluppo
- Processi di sviluppo del software
- Modelli per lo sviluppo del software
- UML
Ingegneria dei Requisiti
- Introduzione
- UML e OCL per l'ingegneria dei requisiti
- Raccolta dei requisiti
- Analisi dei requisiti
- Valutazione e gestione dei requisiti
Progettazione
- Processo di progettazione
- Principi di progettazione
- Progettazione architetturale - Progettazione interfacce utente
- Software Pattern
- Progettazione orientata agli oggetti
Implementazione e il test
- Implementazione del software
- Test del software
Installazione e manutenzione
- Installazione del software
- Manutenzione deò software
Gestione dei progetti
Java
- Introduzione
- Classi e interfacce
- Eccezioni
- Input e output
- Tipi generici
- Collezioni di oggetti
- Interfacce grafiche
- Programmazione funzionale
- Programmazione riflessiva e concorrente

Ingegneria delle Tecnologie Informatiche

1. Tecnologie Web (24 ore) - HTML; CSS; XML; JSON; Motori di Ricerca; JavaScript: basi del linguaggio, window object, DOM, eventi, AJAX, JQuery, storage, scripted graphics, tool di sviluppo; Node.
2. Architetture orientate ai servizi (8 ore) - HTTP; Concetti generali sulle SOA; Web Services; servizi RESTful; microservizi.
3. Sistemi peer-to-peer (10 ore) - Caratterizzazione qualitativa e quantitativa dei sistemi P2P; Problematiche di progettazione dei sistemi P2P; Modelli HM, DUM, DSM e LM; Sistemi peer-to-peer di tipo HM: SoulSeek, Napster, eMule, BitTorrent; Sistemi peer-to-peer di tipo DUM: Gnutella, Mute, Freenet; Sistemi peer-to-peer di tipo DSM: Kademlia, Chord; PeerJS.
4. Blockchain (6 ore) – Principi generali delle blockchain; Transazioni; Bitcoin; Smart Contract; Erthereum; Modelli di consenso: Proof of Work e Proof of Stake; Ouroboros, Ouroboros Praos e Cardano; Algorand; Tipologie di attacchi informatici alle blockchain.
5. Cybersecurity (24 ore) - Concetti generali di sicurezza informatica; Crittografia a chiave simmetrica; Funzioni di hash crittografiche; MAC; Crittografia a chiave pubblica; Firme digitali; Distribuzione di chiavi crittografiche; Autenticazione utente; TLS e HTTPS; Quantum Internet e crittografia quantistica

Bibliografia

Ingegneria del Software

Ian Sommerville. Ingegneria del Software, 10/ed, Pearson Education, 2017.

Ingegneria delle Tecnologie Informatiche

M. Amoretti, dispense in inglese sugli argomenti del corso.
J. Kurose, K. Ross, "Computer Networking: A Top Down Approach", ed. Addison-Wesley, 2016.
D. Flanagan, "JavaScript - The Definitive Guide", ed. O’Reilly, 2020.
W. Stallings, "Cryptography and Network Security: Principles and Practice", 7th edition, 2017.

Metodi didattici

Ingegneria del Software

Il corso si basa su lezioni teoriche ed esercitazioni in laboratorio. In particolare le attività di laboratorio, saranno dedicate allo sviluppo di alcuni sistemi software utilizzando il linguaggio Java e gli strumenti presentati durante il corso. In queste attività, gli studenti opereranno individualmente, chiaramente sotto la guida e con il supporto del docente del corso e senza precludere positive interazioni tra gli studenti.
Le slide utilizzate a supporto delle lezioni verranno caricate sulla piattaforma Elly prima di ogni lezione. Per scaricare le slide è necessaria l’iscrizione al corso on line. Le slide vengono considerate parte integrante del materiale didattico. Quindi gli studenti non frequentanti devono controllare il materiale didattico e le indicazioni fornite dal docente disponibili sulla piattaforma Elly.

Ingegneria delle Tecnologie Informatiche

Le lezioni si svolgeranno in presenza.
Il docente spiegherà gli argomenti mostrando delle slide.
Alcune ore saranno dedicate ad esercitazioni pratiche sullo sviluppo di software.
Il materiale didattico (comprendente slide, dispense, codice sorgente, articoli scientifici) verrà caricato sulla piattaforma Elly.
Si ricorda agli studenti non frequentanti di controllare il materiale didattico disponibile e le indicazioni fornite dal docente tramite la piattaforma Elly.

Modalità verifica apprendimento

Ingegneria del Software

Sono previste una prova scritta e una prova pratica. La prova scritta si basa su sette domande aperte a cui rispondere senza l'aiuto di appunti e libri. Cinque domande riguardano la valutazione della conoscenza acquisita sugli argomenti discussi durante il corso. Le restanti due domande riguardano la valutazione della capacità di applicare la conoscenza acquisita durante il corso. La durata della prova scritta è pari a 1 ora e trenta minuti e la prova è valutata con scala 0-30. il voto della prova scritta viene comunicato nell’arco di due settimane successive alla prova tramite pubblicazione su Elly. La prova pratica consiste nello sviluppo di un sistema software e può essere svolto dagli studenti in modo individuale o in gruppi con massimo due persone. La prova ha lo scopo principale di valutare la capacità di applicare la conoscenza acquisita durante il corso. Inoltre, la valutazione della prova dipenderà dalla qualità del sistema sviluppato, della relativa documentazione e della presentazione orale del sistema. La prova è valutata con scala 0-30 e il voto viene comunicato al termine della presentazione del sistema realizzato. L’esame è superato se il risultato di entrambe le prove è maggiore o uguale a 18. Il voto finale è uguale alla media aritmetica dei voti delle due prove. La lode può essere assegnata nel caso del raggiungimento del massimo punteggio su entrambe le prove.

Ingegneria delle Tecnologie Informatiche

La valutazione dell’apprendimento prevede due o tre momenti (a seconda che l'insegnamento sia da 6 o da 9 crediti):
1) una prova scritta della durata di 1 ora, articolata su domande aperte relative alle parti 2-3-4 del programma (solo per la versione da 9 crediti);
2) una prova scritta della durata di 1 ora, articolata su domande aperte relative alla parte di cybersecurity;
3) un progetto di sviluppo software basato sulle tecnologie illustrate nella parte 1 del programma; è prevista la stesura di una breve relazione e la presentazione orale del lavoro svolto.
Ciascuna prova scritta è valutata con scala 0-30. Il progetto è valutato con scala 0-30. I punteggi vengono mediati a formare il voto finale.
E’ prevista una prova scritta in itinere equivalente al momento 2) della valutazione dell’apprendimento, quindi relativa alla parte di cybersecurity. Lo studente che ottiene almeno 18 punti nella prova in itinere è esentato dal momento 2) della valutazione dell’apprendimento.

Altre informazioni

- - -

Obiettivi agenda 2030 per lo sviluppo sostenibile

- - -