SoftwareDynamics²: Fine-Grained Evolution of Software Behavior
This joint research project is funded by Deutsche Forschungsgemeinschaft (DFG) and Der Wissenschaftsfonds FWF as a collaboration between Fabian Beck, University of Duisburg-Essen and the Martin Pinzger, Alpen-Adria University Klagenfurt.
Project duration: 2018-2020
Software systems continuously evolve. While the evolution of static properties of software systems, such as expressed by software metrics, code clones, and static dependencies, has been studied in detail, the evolution of dynamic properties has been investigated only at the macroscopic level. Basic questions, such as, what are the effects of a particular code change on the execution of a software system, or, which code changes caused the degradation of the execution time, are currently not easy to answer by software developers and researchers.
This research project aims at investigating and developing novel methods and techniques to analyze and visualize the impact of specific code changes on the dynamic behavior of a software system, and to find causes for specific changes of dynamic behavior in the evolution of a software system. In contrast to previous research, we will analyze both, software evolution and software execution, on the level of program statements. We will integrate the methods into novel prediction and recommendation techniques to assist software developers in optimizing specific performance metrics of a software system, such as runtime or memory consumption. A major challenge of this research project will be the mapping of single code changes to individual differences in the dynamic behavior. In addition, all methods need to be scalable and support multiple levels of details to make the fine-grained data explorable and understandable to software developers and researchers.
The systematic and detailed analysis of the two time dimensions creates a unique research opportunity that has not yet been explored by researchers. The planned outcomes of the project promise to provide methods for researchers to gain a better understanding of software evolution beyond static properties of software systems, and for developers to ease software maintenance, in particular, optimizing the dynamic behavior of software systems.