Many software engineering problems of an existing code base can only be addressed by successive changes to the code that span multiple dispersed source code entities. Examples of this situation can be found when a bug has to be patched of which several occurrences exist throughout the source code (e.g., bugs related to the use of reference counting for memory-management), when the source code has to be refactored to improve its overall quality (e.g., all expressions that create an instance of a particular class might have to be replaced by calls to a corresponding Factory Method) or when the code base has to be migrated to a newer version of an API (e.g., a new method might have to be called in between two older API calls).

The sheer amount of changes that have to be made (e.g., adding a parameter to a method implies all of its invocations have to be modified accordingly) as well as the intricate nature of the changes themselves (e.g., the added parameter should not shadow a field of the class in which the method resides) often calls for specialized tool support. This is even more so when the same changes have to be repeated for different systems. When several systems have to be migrated to a newer version of the same API, for instance, or when a bug occurs throughout different branches of the same system. In these cases, support from a source-to-source program transformation tool is required. Such a tool would identify the source code entities that are subject to a change using a developer-provided specification of their characteristics and subsequently apply the change  ---again according to a developer-provided specification.

In this work package, we will therefore investigate source-to-source program transformation technology for repeating changes. We want to know whether it is feasible to create program transformations starting from a concrete sequence of changes to a system's source code, such that these changes can subsequently be repeated on closely-related, but diverging versions of the system.

Activities and their deliverables


All deliverables are available to members of the industrial steering boardPlease log in.

Activity 3.1: Intuitive specification of program transformations.

  • Deliverable 3.1.a Definition of a language for specifying a transformation’s subjects in an example-driven manner and its effects using first-class changes
  • Deliverable 3.1.b Instantiation of the language in a source-to-source program transformation tool

Activity 3.2: Change-aware transformations.

  • Deliverable 3.2.a Technique for determining the impact of changes on program transformations
  • Deliverable 3.2.b Operator-based tool support for applying transformations in a change-aware manner
  • Deliverable 3.2.c Experience report on the feasibility of program transformations in a change-centric context