Going from the Past back to the Future: Incrementally Reconstructing a Metamodel HistoryFT
In Model Driven Engineering (MDE) one of the most important software artifacts are metamodels. However, like many other software artifacts, they are expected to evolve and change over time. Consequently, their models, thus become invalid and need fixing. The usual strategy to solve this is to adapt those models based on changes made to the metamodel, i.e., co-evolution. Co-evolution, however, depends on correctly recorded changes since even small deviations can impact the models that will be evolved. One problem is that those changes are usually not preserved or complete. The reason is that the most common way to record the history of metamodels is by using text-based version control systems, i.e., Git. This, however, hinders the detection of the concrete changes made to the metamodel, which are used for co-evolution. This aspect leads to problems in maintaining and evolving metamodels and their models in practice. In this paper, we propose a novel approach that allows engineers to reconstruct the history of metamodels via the help of ChangeTrees. These ChangeTrees recommend possible sequences of changes between two metamodel versions, i.e., evolved metamodels. We conducted an empirical study where we detected changes to eight different metamodels of varying domains. The results show that our approach can correctly reconstruct the metamodel’s history by detecting all possible changes between the two versions. Furthermore, performance results show that, in the worst case, our approach required 15.65 seconds to detect and generate a ChangeTree of a metamodel with more than 351 changes applied to it (between two versions), leading to 11,268 branching change paths (alternative sequences of changes).