Model-driven engineering (MDE) is evermore adopted in academia and industry for being a new paradigm helping software developers to cope with the ever increasing complexity of software systems being developed. In MDE, software models constitute the central artifacts in the software engineering process, going beyond their traditional use as blueprints, and act as the single source of information for automatically generating executable software.
Although MDE is a promising approach to master the complexity of software systems, so far it lacks proper concepts to deal with the ever growing size of software systems in practice. Developing a large software system entails the need for a large number of collaborating developers. Unfortunately, collaborative development of models is currently not sufficiently supported. Traditional versioning systems for code fail for models, because they treat models just as plain text files and, as a consequence, neglect the graph-based nature of models.
A few dedicated model versioning approaches have been proposed, which directly operate on the models and not on the models' textual representation. However, these approaches suffer from four major deficiencies. First, they either support only one modeling language or, if they are generic, they do not consider important specifics of a modeling language. Second, they do not allow the specification of composite operations such as refactorings and thus, third, they neglect the importance of respecting the original intention behind composite operations for detecting conflicts and constructing a merged model. Fourth, the types of detectable conflicts among concurrently applied operations is insufficient and not extensible by users.
To tackle these deficiencies, we present four major contributions in this thesis. First, we introduce an adaptable model versioning framework, which aims at combining the advantages of two worlds; the proposed framework is generic and offers out-of-the-box support for all modeling languages conforming to a common meta-metamodel, but also allows to be adapted for enhancing the versioning support for specific modeling languages. Second, we propose a novel technique, called model transformation by demonstration, for easily specifying composite operations. Besides being executable, these composite operation specifications also constitute the adaptation artifacts for enhancing the proposed versioning system. More precisely, with our third contribution, we present a novel approach for detecting applications of specified composite operations without imposing any dependencies on the employed modeling environment. Fourth, we present a novel approach for detecting additional types of conflicts caused by concurrently applied composite operations. Furthermore, we contribute additional techniques for revealing potentially obfuscated or unfavorable merge results. Besides introducing the contributions from a conceptual point of view, we provide an open source implementation of these concepts and present empirical case studies and experiments for evaluating their usefulness and ease of use.