Evolution of metamodels can be represented at the finest grain by the trace of atomic changes such as add, delete, and update of elements. For many applications, like automatic correction of models when the metamodel evolves, a higher grained trace must be inferred, composed of complex changes, each one aggregating several atomic changes. Complex change detection is a challenging task since multiple sequences of atomic changes may define a single user intention and complex changes may overlap over the atomic change trace.In this paper, we propose a detection engine of complex changes that simultaneously addresses these two challenges of variability and overlap. We introduce three ranking heuristics to help users to decide which overlapping complex changes are likely to be correct. In our approach, we record the trace of atomic changes rather than computing them with the difference between the original and evolved metamodel. Thus, we have a complete and an ordered sequence of atomic changes without hidden changes. Furthermore, we consider the issue of undo operations (i.e. change canceling actions) while recording the sequence of atomic changes, and we illustrate how we cope with it. We validate our approach on 8 real case studies demonstrating its feasibility and its applicability. We observe that a full recall is always reached in all case studies and an average precision of 70.75%. The precision is improved by the heuristics up to 91% and 100% in some cases. HighlightsRecording the trace of atomic changes ensure the chronological order and the absence of hidden changes.Both issues of hidden changes and overlapping complex changes reduce the recall of the detection, if not considered.Our detection algorithm reaches 100% recall for the eight case studies.In the eight case studies, our heuristics never rank the correct overlapping complex changes with a lower priority than the incorrect ones.
['Djamel Eddine Khelladi', 'Regina Hebig', 'Reda Bendraou', 'Jacques Robin', 'Marie-Pierre Gervais']
Detecting complex changes and refactorings during (Meta)model evolution