Article Preview
Top1. Introduction
Software engineering, as any other engineering discipline, must provide the ability and means to build systems which are so large and complex that they have to be built by teams or even by teams of teams of engineers (Ghezzi et al., 2002). Today, not only code but also other artifacts like models play an important role in software engineering. All of these artifacts entail significant overhead to manage throughout the lifecycle, especially when practical concerns require parallel strands of development.
For this purpose, Software Configuration Management (SCM) provides key tools and techniques for making the parallel development of software systems more manageable (Tichy, 1988). Amongst others, SCM offers Version Control Systems (VCS), which allow reusing single-user modeling/programming environments for parallel development. Central repositories, to which developers can commit their changes and from which developers can update their local version to the latest version in the repository, support the management and administration of software artifacts under development such as code and models.
Of course, this holds true not only for traditional, code-centric software engineering, but also for model-driven software engineering (MDSE) (cf. Schmidt, 2006), which has recently gained momentum in academia as well as in practice, changing the way in which modern software systems are built. In MDSE, the task of programming, i.e., writing code in a textual programming language such as Java, is replaced by modeling in a graphical modeling language such as the Unified Modeling Language (OMG, 2010). The powerful abstraction mechanisms of models are not only used for documentation purposes, but also for compiling executable code directly out of models (Bézivin, 2005).
Software artifacts, code and models differ in key ways with implications for versioning and conflict management. In general, standard techniques established for text-based artifacts for handling software evolution like versioning perform poorly if directly used for models (cf. Chawate et al., 1996). From a technical point of view, these incompatibilities might be explained by the graph-based structure of models, which might be taken into account by dedicated algorithms for matching, comparing, and merging models. While there has been considerable work to understand and support conflicting approaches with code artifacts, the implications and issues when using model artifacts are less well understood.