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 empiriche del software e utilizzare diversi strumenti di reverse engineering, di supporto alla comprensione, evoluzione e manutenzione del software e strumenti per la gestione del debito tecnico.
Conoscenza e capacità di comprensione
Al termine del corso, lo studente avrà acquisito una solida conoscenza sulla manutenzione ed evoluzione di progetti software complessi e sulla gestione del debito tecnico.
Conoscenza e capacità di comprensione applicata
Lo studente sarà in grado di effettuare diverse analisi del software, anche analisi di correlazione fra determinati problemi del software e analisi di predizione. Ogni studente dovrà conoscere ed utilizzare strumenti /tools molto noti nelle aziende per la comprensione del codice, gestione del debito tecnico e reverse engineering.
Autonomia di giudizio
Il corso promuove lo sviluppo del pensiero critico attraverso la valutazione comparativa di strumenti per l’analisi e manutenzione del software, e attraverso il contributo individuale nel progetto d’esame. Gli studenti avranno anche la possibilità di seguire uno o due seminari di aziende su tematiche di grande interesse per l’evoluzione dei sistemi software e reverse engineering che stimoleranno ulteriormente le capacità di giudizio.
Abilità comunicative
Lo studente sarà in grado di comunicare efficacemente attraverso una o due presentazione individuali in aula, attraverso il progetto d’esame relativo all’utilizzo di strumenti visti a lezione per effettuare analisi empiriche di progetti software, attraverso l’elaborato prodotto sul progetto d’esame e la prova individuale orale.
Capacità di apprendere
Il corso promuove lo sviluppo dell’autonomia nello studio attraverso un approccio didattico attivo. Al termine del percorso, lo studente sarà in grado di approfondire in modo indipendente tematiche avanzate sull’evoluzione e manutenzione del software che possono sfociare anche in una tesi, consolidando così le basi per un apprendimento continuo anche oltre il contesto curriculare.
Le tematiche delle tesi possono riguardare ad esempio la valutazione dell’impatto del refactoring di problemi architetturali sulla sicurezza, prestazioni, consumo energetico e su altre metriche di qualità o sulla migrazione verso architetture a microservizi, o sull’utilizzo degli LLM per il riconoscimento e refactoring di problemi architetturali nel codice.
Contenuti sintetici
Introduzione alle principali problematiche di reverse engineering, software evolution e program comprehension.
Object-oriented reverse engineering e reengineering patterns.
Analisi della qualità del software:metriche e tools.
Sperimentazioni e confronto di diversi tool di supporto alla reverse engineering e alla valutazione 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 Object-oriented patterns per la reverse engineering e reeengineering.
4 Metriche di Qualità del Software, software quality assessment. Application Portfolio Management: tools e tecniche .
-
Modernizazione dei sistemi legacy: Migrazione dei sistemi legacy verso sistemi a microservizi.
-
Tool e tecniche 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, sulle prestazioni e sul consumo di energia.
-
Esempi di diverse analisi empiriche: Analisi di correlazione fra diverse metriche di qualità del codice e violazioni/probelmi nel codice. Analisi della predizione 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 .
-
Tecniche e strumenti per l'identificazione e gestione del Technical Debt.
Prerequisiti
Conoscenza approfondita del linguaggio Java,
Modalità didattica
Le lezioni si dovrebbero svolgere tutte in presenza.
6 lezioni da 2 ore in modalità erogativa in presenza..
15 lezioni da 2 ore in modalità erogativa ed interattiva in presenza..
4 lezioni da 2 ore in modalità erogativa ed interattiva 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 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 online.
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 acquire skills related to the main issues of software evolution and reverse engineering, be able to perform empirical software analysis and use various tools for reverse engineering, supporting software understanding, evolution and maintenance, and tools for technical debt management.
Knowledge and Ability to Understand
By the end of the course, the student will have acquired a solid knowledge on maintenance and evolution of complex software projects and technical debt management.
Applied Knowledge and Ability to Understand
The student will be able to perform various software analyses, including correlation analysis between given software problems and prediction analysis. Each student will be expected to know and use tools well known in companies for code understanding, technical debt management and reverse engineering.
Autonomy of judgment
The course promotes the development of critical thinking through the comparative evaluation of tools for software analysis and maintenance, and through individual contribution in the examination project. Students will also have the opportunity to attend one or two company seminars on topics of great interest in the evolution of software systems and reverse engineering that will further stimulate judgment skills.
Communication Skills
The student will be able to communicate effectively through one or two individual classroom presentations, through the exam project related to the use of tools seen in class to perform empirical analysis of software projects, through the document produced on the exam project, and through the individual oral test.
Ability to learn
The course promotes the development of autonomy in study through an active teaching approach. At the end of the course, the student will be able to independently investigate advanced topics on software evolution and maintenance that can also result in a thesis, thus consolidating the basis for continuous learning beyond the curricular context. Thesis dissertation topics may concern, for example, evaluating the impact of refactoring of architectural problems on security, performance, energy consumption and other quality metrics, or on migrating to microservice architectures, managing technical debt or on using LLMs to recognize and refactor architectural problems in the code.
Contents
Introduction to the principal problematics of reverse engineering, software evolution, software quality assesment and program comprehension.
Deep study of some topics with different tools experimentations.
Software quality analysis: metrics and tools.
Object-oriented reeengineering patterns.
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 microservice architecture.
6 Tools and techniques for software architecture reconstruction.
7 Antipattern, code and architectural smell detection, their refactoring.
8. Impact of refactoring techniques on the code quality, on performance issues and energy consumption.
-
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.
11.. Tools and techniques for Managing Technical Debt.
Prerequisites
Knowledge of Java Language.
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. and their preferences.
6 lessons of 2 hours in presence
15 lessons of 2 hours in presence with student interactions
4 lessons with exercise and students interactions in presence
Textbook and teaching resource
Slides, papers, online books, survey and tutorial, Master and PhD thesis available online.
Software Engineering, Sommerville, only 3 chapters
Object Oriented Reeengineering patters, Oscar Nierstrasz -available online
Most of the material necessary to prepare the exam will be available online.
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.
Key information
Staff
-
Francesca Arcelli Fontana