Anno di corso: 1

Anno di corso: 2

Crediti: 6
Crediti: 12
Tipo: A scelta dello studente
Crediti: 33
Tipo: Lingua/Prova Finale

EVOLUZIONE DEI SISTEMI SOFTWARE E REVERSE ENGINEERING

Scheda dell'insegnamento

Anno accademico di regolamento: 
2017/2018
Anno di corso: 
2
Anno accademico di erogazione: 
2018/2019
Tipo di attività: 
Obbligatorio a scelta
Lingua: 
Italiano
Crediti: 
6
Ciclo: 
Primo Semestre
Ore di attivita' didattica: 
50
Prerequisiti: 

Conoscenza approfondita del linguaggio Java,

Conoscenza dei design patterns.

Moduli

Metodi di valutazione

Tipo di esame: 
Orale
Modalita' di verifica dell'apprendimento: 

Due task assegnati durante il corso che prevedono una presentazione in aula.

Un progetto finale singolo o al massimo in due studenti relativo alla sperimentazione di alcuni tool di reverse engineering e/o analisi empiriche.

Discussione orale sul progetto finale.

Valutazione: 
Voto Finale

Obiettivi formativi

Lo studente acquisirà competenze relative alle problematiche principali dell'evoluzione del software e della reverse engineering, sarà in grado di effettuare analisi e utilizzare diversi strumenti di reverse engineering e di supporto alla comprensione, evoluzione e manutenzione del software.

Contenuti

Introduzione alle principali problematiche di reverse engineering, software evolution e program comprehension. Approfondimenti di alcuni argomenti e sperimentazioni di diversi tool.

Programma esteso

1 Introduzione alla Software evolution, Reverse Engineering, Sistemi Legacy. Comprensione e manutenzione del software.

2 Tecniche e tools per la Reverse Engineering e l'Integrazione di sistemi. Introduzione e applicazione della model-driven reverse engineering.

3 Pattern object-oriented per la reverse engineering;

4 Metriche di Qualità del Software , software quality assessment. Application Portfolio Management: problemi, tools, tecniche e metriche.

5. Modernizazione dei sistemi legacy: Migrazione dei sistemi legacy verso micro services.

Approcio unificato alla reverse engineering dei dati e del software.

6. Tool e tecniche per la design pattern detection nel codice. Tecniche di data mining per la design pattern detection. Tools per la software architecture reconstruction.

7. Riconoscimento di antipattern, code smell e architectural smells nel codice, il loro refactoring. Impatto delle tecniche di refactoring sulla qualità del codice.

8. Esempi di diverse analisi empiriche: Analisi di correlazione fra diverse metriche di qualità del codice e violazioni del codice e design; Analisi della prediction di problemi del software attraverso tecniche di machine learning.

9. Tecniche di hacking, decompiling and code obfuscation. Analisi statica e dinamica per la reverse engineering .

10. Tecniche e strumenti per l'identificazione e gestione del Technical Debt.

Bibliografia consigliata

Slides del docente, articoli, survey e tutorial forniti dal docente, tesi di laurea e di dottorato svolte presso il laboratorio di ricerca Essere e presso altre Università straniere con cui il laboratorio collabora.

Metodi didattici

Lezioni frontali ed esercitazioni, approfondimenti di alcuni contenuti e sperimentazione di alcuni strumenti in aula attraverso presentazione da parte degli studenti.