Software Wartung und Evolution / Software Maintenance and Evolution - FS 14

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 we 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, defect prediction models, software quality analysis, or software evolution visualization. We will also present platforms and tools such as SOFAS, ChangeDistiller, or Software Evolution Facets.

Our group is among the international leading research groups in the areas of Mining Software Repositories(MSR), Software Maintenance, and Software Engineering.

Learning Goals

Learn theories, models, tools, and processes for the maintenance and evolution of large software sytems.

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
Lecturer: Prof. Dr. Harald Gall
Schedule: Fri, 13:00-14:45, BIN 2.A.10
Language: Lecture in German/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.


Date Topics Notes
21.02.2014 Foundations of Software Evolution Topics: Challenges of software maintenance, software evolution, Laws of Software Evoluiton, Reverse engineering and Reengineering

Required Reading:

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
D.L. Parnas, "Software Aging", 1994
M.M. Lehman et al., "Metrics and Laws of Software Evolution", 1997


Reengineering I


Reengineering II

The following website about Refactoring provides an in-depth overview of several refactoring patterns. Furthermore, the author of the website discusses pros and cons, pitfalls, relations between individual patterns, and other aspects of refactoring. The discussion of each pattern is illustrated with an exmaple.


Refactoring Exercise:
I. Read Chapters 9 (Redistribute Responsibilities) and 10 (Transform Conditionals to Polymorphism) from the book II. Then download this small The example provides some opportunities for refactoring. III. Check the code, find the refactoring opportunities, and then propose a solution to improve the code structure.
III. Hand in (1) a UML-Diagram and (2) the code snippets of the refactored solution. Additionally, the solution shall contain a *few* sentences explaining your refactoring(s) (Why was the old design bad? Why is your new design better? Was is the name of the refactoring pattern? etc.).
Submit via OLAT by March 13, 2014.
(If you have another code example that you would like to refactor, for instance, your SOPRA code, you are welcome to do so.)


Software Analysis Visualization: Required reading:

Martin Pinzger, Harald Gall, Michael Fischer, Michele Lanza, Visualizing multiple evolution metrics, In: Proceedings of the ACM Symposium on Software Visualization (SoftVis), ACM, 2005.

Michele Lanza, Stephane Ducasse, "Polymetric Views-A Lightweight Visual Approach to Reverse Engineering," IEEE Transactions on Software Engineering, vol. 29, no. 9, pp. 782-795, September, 2003.


Empirical Software Engineering

Papers required to read:

Christian Bird, Nachiappan Nagappan, Brendan Murphy, Harald Gall, Premkumar Devanbu, Don't touch my code! Examining the effects of ownership on software quality, In: Proceedings of the European Software Engineering Conference and the ACM SIGSOFT Foundations of Software Engineering (ESEC-FSE), ACM, 2011.

Christian Bird, Nachiappan Nagappan, Premkumar Devanbu, Harald Gall, Brendan Murphy, Does distributed development affect software quality? An empirical case study of Windows Vista, In: Proceedings 31st International Conference on Software Engineering (ICSE), IEEE, 2009.


Change Type Analysis with ChangeDistiller

Papers to read:

Beat Fluri, Michael Wuersch, Martin Pinzger, and Harald Gall. Change Distilling: Tree Differencing for Fine-Grained Source Code Change Extraction. IEEE Transactions on Software Engineering, Vol. 33(11):725-743, November 2007.

Christian Bird, David Pattison, Raissa D'Souza, Vladimir Filkov, and Premkumar Devanbu. Latent social structure in open source projects. In Proceedings of the 16th ACM SIGSOFT International Symposium on Foundations of software engineering (SIGSOFT '08/FSE-16). ACM, New York, pp. 24-35, 2008.

11.04.2014 SOFAS Platform and Facets
18.04. and 25.4.2014 No lecture due to Easter break
02.05.2014 HisMo - Modeling History of Software
09.05.2014 Code Clones
16.05.2014 No lecture!
23.05.2014 Defect Prediction Dual Ecological Measures of Focus in Software Development
30.05.2014 Exam Information: This lecture will be used to wrap up the course and prepare for the exam. We will discuss examples from previous years and how to prepare for it. FAQ: (1) As always, it is *not* mandatory to attend the lecture. (2) It will take ~1h, depending on how many questions are asked during the discussion.


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).

Update: There will be an oral exam (with individual exam dates) on the following days: June 13 and 16. A request for registration was sent out via OLAT.