Course Syllabus
Obiettivi
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 sintetici
Introduzione alle principali problematiche di reverse engineering, software evolution e program comprehension.
Analisi della qualità del software
Sperimentazioni e confronto di diversi tool di supporto alla reverse engineering e valutazone del debito tecnico.
Programma esteso
1 Introduzione alla Software evolution, Reverse Engineering, Sistemi Legacy. Comprensione e manutenzione del software.
2 Tecniche e tools per la Reverse Engineering.
3 Pbject-oriented patterns per la reverse engineering e reeengineering.
4 Metriche di Qualità del Software , software quality assessment. Application Portfolio Management: problemi, tools, tecniche e metriche.
-
Modernizazione dei sistemi legacy: Migrazione dei sistemi legacy verso micro services.
-
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.
-
Riconoscimento di antipattern, code smell e architectural smells nel codice, il loro refactoring. Impatto delle tecniche di refactoring sulla qualità del codice.
-
Esempi di diverse analisi empiriche: Analisi di correlazione fra diverse metriche di qualità del codice e violazioni del codice e del design; Analisi della prediction di problemi del software attraverso tecniche di machine Learning e data mining.
-
Introduzione a tecniche di hacking, decompiling and code obfuscation per la protezione del codice. Analisi statica e dinamica per la reverse engineering .
10. Tecniche e strumenti per l'identificazione e gestione del Technical Debt.
Prerequisiti
Conoscenza approfondita del linguaggio Java,
Conoscenza dei design patterns.
Modalità didattica
Le lezioni si dovrebbero svolgere in presenza.
Lezioni frontali ed esercitazioni, approfondimenti di alcuni contenuti e sperimentazione di alcuni strumenti in aula attraverso presentazione da parte degli studenti.
Il corso viene erogato se richiesto in italiano, ma se uno studente straniero è presente, il corso verrà erogato in inglese.
Materiale didattico
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.
Testi:
Ingegneria del Software, Sommerville, solo 3 capitoli.
Object Oriented Reeengineering patters, Oscar Nierstrasz -Disponibile online
La maggior parte del materiale su cui dovrete studiare sarà disponibile on line.
Periodo di erogazione dell'insegnamento
I semestre
Modalità di verifica del profitto e valutazione
Uno o due task assegnati durante il corso che prevedono una presentazione in aula. Valutazione nel range di 0-3 punti.
Un progetto finale singolo o al massimo in due studenti relativo alla sperimentazione di alcuni tool di reverse engineering e/o analisi empiriche sui dati raccolti dai tool utilizzati per il progetto. Valutazione 0-22 punti
Discussione orale sul progetto finale. Valutazione 0-8 punti.
Orario di ricevimento
Per appuntamento.
Aims
The student will learn all the principal techniques used to support software evolution and reverse engineering. The student will be able to use different tools useful for reverse engineering, program comprehension and software maintainability.
Contents
Introduction to the principal problematics of reverse engineering, software evolution and program comprehension. Deep study of some topics with different tools experimentations.
Detailed program
1 Introduction to Software evolution and Reverse Engineering. Legacy systems. Software comprehension and maintainability: principal problems.
2 Techniques and tools for Reverse Engineering. Introduction and application to model-driven reverse engineering.
3 Object-oriented patterns for reverse engineering and reengineering.
4 Software quality metrics and software quality assessment. Application Portfolio Management: problems, tools, techniques and metrics.
5 Modernization of legacy systems: Migration of legacy systems towards SOA architecture and microservice architecture.
6 Tools and techniques for design pattern detection in the code. Data mining techniques for design pattern detection. Tools for software architecture reconstruction.
7 Antipattern, code and architectural smell detection, their refactoring. Impact of refactoring techniques on the code quality.
-
Empirical analysis of different kinds: Correlation analysis among code smells and metrics, Prediction analysis of code anomalies or different other problems through machine learning techniques.
-
Introduction to techniques of hacking, decompiling and code obfuscation to protect code. Static and dynamic analysis for reverse engineering.
10.. Tools and techniques for Managing Technical Debt.
Prerequisites
Knowledge of Java Language.
Knowledge of design patterns.
Teaching form
The lessons will be given in presence.
Lessons, exercitations, students experimentatons of tools with an oral presentation.
The course can be offered in Italian or in English language, according to the students attending the course.
Textbook and teaching resource
Slides, papers, online books, survey and tutorial, Master and PhD thesis
Ingegneria del Software, Sommerville, only 3 chapters
Object Oriented Reeengineering patters, Oscar Nierstrasz -available online
Most of the material to prepare the exam will be available on line.
Semester
I semester
Assessment method
Final exam with a project or experimentation of some tools of reverse engineering.
Project done alone or in maximum two students. Evaluation 0-22 points.
Oral discussion on the project. Evaluation 0-8 points.
One or two tasks assigned during the course with a presentation. Evaluation 0-3 points.
Office hours
On appointment.