Software Maintenance and Evolution

Software maintenance is a substantial part in the life-cycle of a software system. Typical studies show that more than 2/3 of the efforts are invested into modifications after delivery to correct faults, to improve performance, or to adapt to various other requirements such as platform or business changes. It seems obvious, therefore, that we need effective techniques and tools to support these activities to save costs and personnel resources in development and testing.


In this course, students will learn the foundations of software evolution and maintenance. This includes successful but aged software systems (i.e. legacy software), object-oriented reengineering, refactoring, change patterns, empirical analysis of software, classification/prediction models, software quality analysis. We will also discuss analysis platforms and tools.

Learning Goals

Learn theories, models, tools, and processes for the maintenance and evolution of large software systems and cloud applications.


This course offers a combination of lectures and exercises. The exercises are required for the course as they will provide a better understanding of how the theory (published in research works) can be applied in practice. This way the students actively learn during the lecture and through preparation before and after the lecture based on concrete examples. There will be exercises for the students to do individually and a project that will be done in groups of 3-4 students. 

Final Evaluation

Grading will be based on (i) the written exam (50% of the grade), the (ii) exercises by the students during the course  (30% of the grade), and (iii) the group project (20% of the grade).

The topics of the written exam are (i) the required reading list and (ii) the content of the slides of each lecture, and (iii) questions related to the exercises and group project.

The additional/optional reading list is not required for the written examination.

Topics covered

  • Motivation, challenges and definitions in the field of software evolution
  • Variants of software maintenance, relations to software engineering life-cycle
  • Techniques of software evolution
  • Quantitative analyses, empirical analyses, qualitative analyses of software
  • Evolution dynamics
  • Case studies and assignments


Type: Vorlesung mit integrierter Übung

Dr. Sebastiano Panichella


Dr. Josef Spillner

Schedule: Fri, 12:15-13:45, AND-4-02
Language: Lecture in English, Materials in English
ECTS credits: 3.0
Prerequisites: BSc Informatik: Assessmentstufe, Module Software Engineering und Software-Praktikum
Target audience: Students in BSc Informatics (4+ Semester) and in MSc Informatics
Link to Online Course Catalogue: Obligatory course information
OLAT-Resource: OLAT for Software Maintenance and Evolution

Course Materials and OLAT Course

All complementary material will be made available in the OLAT-Resource for Software Maintenance and Evolution. All course materials, for example, slides, exercises, tools, etc., can be found there. It also contains a forum, where we will post announcements and answer questions related to the lecture in a timely fashion. Since, for technical reasons sometimes it is not possibile to update/upload data in the OLAT platform we provide all the essential materials (slides, exercises, tools) in this web page of the course.


The list of weekly topics may be subject to change. The slides will be updated on a week by week basis. NOTE: Please check back to this table, as lecture units may change on short notice!

Date Topics Notes

- Introduction to the course.

- Lecture of  "Foundations of Software Evolution (Leman Laws + Reengineering I)":
Challenges of software maintenance, software evolution, Laws of Software Evolution, Reverse engineering and Reengineering

Self-study of the following papers:

The following are seminal papers that constitute the foundation of software evolution dating back into the 80s and the influential works of Manny Lehman.
M.M. Lehman, "Programs,Life Cycles, and Laws of Software Evolution", 1980 - required reading 
D.L. Parnas, "Software Aging", 1994 - recommended reading 
M.M. Lehman et al., "Metrics and Laws of Software Evolution", 1997 - required reading 


Dr. Panichella /

Dr. Spillner



Empirical Software Engineering  

A change is requested by users/customers of a mobile application. They should be translated in software changes by the Product Owner.

Is it possible to automate this process?

Learning goals: We will learn how software engineering researchers conduct empirical investigations aimed at learning new concepts and/or conceiving novel tools/prototypes to support developers evolve their (mobile) applications.


Required reading:

How can I improve my app? Classifying user reviews for software maintenance and evolution. ICSME 2015: 281-290

(Optional, but not required) reading:

What would users change in my app? Summarizing app reviews for recommending software changes. SIGSOFT FSE 2016: 499-510

Exploring the integration of user feedback in automated testing of Android applications.SANER 2018: 72-83

An Empirical Investigation on Documentation Usage Patterns in Maintenance Tasks. ICSM 2013: 210-219


Dr. Panichella




Mining (un)Structured Data (1) 

Learning goals: We will learn what types of "unstructured software data" software engineering researchers analyze to conceiving novel tools/prototypes aimed at

- supporting developers during maintenance and evolution tasks;

- profiling developers/experts to help newcomers interested to perform such maintenance and evolution tasks.

Required reading: 

 On the role of the nouns in IR-based traceability recovery" (ICPC 2009).

(Optional) Recommended (but not required) reading:

On the Equivalence of Information Retrieval Methods for Automated Traceability Link Recovery. ICPC 2010: 68-71

Reducing the effort of bug report triage: Recommenders for development-oriented decisions. ACM Trans. Softw. Eng. Methodol. 20(3): 10:1-10:35 (2011)

Who is going to mentor newcomers in open source projects? SIGSOFT FSE 2012: 44

How Developers' Collaborations Identified from Different Sources Tell Us about Code Changes. ICSME 2014: 251-260


Dr. Panichella




Mining (un)Structured Data (2) 

Learning goals: We will learn what types of "unstructured software data" software engineering researchers analyze to conceiving novel tools/prototypes aimed at

- distilling important information from the different type of developers' communication means (issue tracking systems, e-mails, etc.);

- detecting defects/inconsistencies between APIs documentation and code of software projects.

Required reading:

Development Emails Content Analyzer: Intention Mining in Developer Discussions (T). ASE 2015: 12-23

(Optional, but not required) reading:

Choosing your weapons: On sentiment analysis tools for software engineering research. ICSME 2015: 531-535

Analyzing APIs documentation and code to detect directive defects. ICSE 2017: 27-37

Data Mining: Practical Machine Learning Tools and Techniques, Third Edition 



Dr. Panichella




Classroom Exercises (EX1)

The students can decide to perform one of the following exercises:

  1. “IR-based Traceability Recovery" (Theory explained in the lecture "Mining (un)Structured Data  for Supporting the  Software Evolution (1)")
  2. “Mining of user reviews data” (Theory explained in the lecture "Empirical Software Engineering")

Results of the individual exercise to submit via OLAT (or alternatively, send an e-mail to

Self-study of the following papers:
O.C.Z. Gotel, Anthony Finkelstein, "An analysis of the requirements traceability problem", In: Proceedings of the First IEEE International Conference on Requirements Engineering (ICRE), 1994. - recommended reading
Giovanni Capobianco, Andrea De Lucia, Rocco Oliveto, Annibale Panichella, Sebastiano Panichella, " On the role of the nouns in IR-based traceability recovery", In: Proceedings of the IEEE 17th International Conference on Program Comprehension (ICPC 2009). - required reading.


Dr. Panichella

  Project Intermediary Presentations


Dr. Panichella


Lecture on "Change Type Analysis and Defect Prediction"

For this lecture is recommended a self-study of the following papers/books:

Change Distilling: Tree Differencing for Fine-Grained Source Code Change Extraction.- required reading.

Cross-project defect prediction: a large scale experiment on data vs. domain vs. process - required reading.


Dr. Panichella



Lecture on "Summarization Techniques for Code, Changes, and Testing".

Required reading:

JSummarizer: An automatic generator of natural language summaries for Java classes.  

Automatic generation of release notes. 

(Optional, but not required) reading:

The impact of test case summaries on bug fixing performance: An empirical investigation. 

Summarization techniques for code, change, testing, and user feedback 



Dr. Panichella



Lecture on "Assisted Adaptation of Software to Evolving Platforms ".

Learning goals: Students will know and understand adaptation approaches at various levels including the interface and code levels. They will be able to apply basic code transformation tools and to analyze the resulting software in the form of portable cloud functions.

Concepts and tasks involving the exercise:

• static and dynamic code analysis
• interface description languages and schemas
• code transformation
• architectural models, such as function-based architectures

Required reading:

• Josef Spillner: Transformation of Python Applications into Function-as-a-Service Deployments. 


Dr. Spillner / Dr. Panichella



Lecture on "Dependencies and Artefact Quality " 

Learning goals: The lesson capacitates participants to understand and value the importance of considering dependencies as an integral contributor to software quality. Deterministic and heuristic dependency analysis will be considered at an abstract level before looking at the problem from a practical angle, involving artefacts from popular online repositories upon which millions of applications depend. Students will apply tools which calculate quality metrics of artefacts.
Concepts and tasks involving the exercise:
• dependency detection and resolution techniques
• manifestation of dependencies as digital artefacts
• analysis of artefacts according to quality and maintenance criteria
Required reading:
• Josef Spillner: Quality Assessment and Improvement of Helm-Packaged Composite Cloud Applications. TBP, August 2018. (submitted to Elsevier SoftwareX)
(Optional) Recommended (but not required) reading:
• Antony Martin, Simone Raponi, Théo Combe, Roberto Di Pietro: Docker ecosystem - Vulnerability Analysis. Computer Communications 122: 30-43 (2018).
• Jürgen Cito, Gerald Schermann, John Erik Wittern, Philipp Leitner, Sali Zumberi, Harald C. Gall: An empirical analysis of the docker container ecosystem on GitHub. MSR 2017: 323-333.

Dr. Spillner / Dr. Panichella


Lecture on "Peer Code Review: Theory and Practise"

For this lecture is recommended a self-study of the following papers/books:

Fagan, M. E. , Advances in Software Inspections, IEEE Transactions on Software Engineering, Vol. 12(7):744-751, July 1986.  - required reading.

Alberto Bacchelli, Christian Bird, "Expectations, outcomes, and challenges of modern code review," In: Proceedings 35th International Conference on Software Engineering (ICSE), IEEE, 2013.: 712-721. - required reading.

Lecturer: Dr. Panichella

Classroom Exercise (EX2) 


a) Advance reading:
In order to perform this exercise, it is required to read the papers included in the reading list of the lecture of the course “Peer Code Review: Theory and Practise”.

b) Project:
To perform the exercise each student should select a Java project implemented during his/her past academic/professional experience.

- Deadline for the exercise TBA.
- Submit the report via e-mail to

Lecturer: Dr. Panichella


  Final Project Presentations


Dr. Panichella

  Written Exam.
Dr. Panichella


At the end of the course there will be a written exam (in the usual lecture slot). In case of only few participants, there will be an oral exam (with individual exam dates).