Modern software development faces growing size and complexity of the systems that are being developed. To cope with this complexity, several languages and modelling formalisms are used during the development of a system in order to describe it from various view points and at multiple levels of abstraction. These languages and modeling formalisms are specific to the domain of the system under development, to the paradigms that are followed, and to the developer tools being used. For example, in a component-based process, the software architecture may be defined using a component metamodel, while class diagrams are used for the object-oriented design of the system; performance and reliability models express the extra-functional properties; program code in a general-purpose programming language defines the execution semantics, and is used for the implementation of the system. Although all these artefacts follow different concepts and formalisms, they express the same system from various view points and can thus be understood as views on the system under development. The entirety of these views can be identified as a complete definition of the system. Although the usage of multiple formalisms offers the advantage that different developers can describe the system from different view points, and in languages and models that are specially designed for this purpose, it introduces the problem of fragmentation of information across heterogeneous artefacts in different formats, concepts, and languages. With increasing complexity of the systems, this makes navigation through the system description difficult for developers and other roles in the development process. Furthermore, since the concepts and formalisms are managed independently, they can share semantic overlaps, so that a piece of information about the system under i Abstract development can be expressed in several ways and contexts. For example, while a component model may be used to express the prescriptive software architecture of a system, the implementation in a general-purpose programming language also determines an implicit architecture of the system, which leads to redundancies in the system descriptions. The independent evolution of these artefacts can lead to inconsistencies, which cannot be identified automatically if the semantic correspondances between the artefacts are not modelled explicitly.View-based software development processes offer two fundamental principles of adressing this problem: While synthetic approaches integrate the information of heterogeneous models to form a complete system description, projective approaches introduce a common formalism in which all view points of the system can be represented, and generate the views from this central model. While the pure synthetic approach suffers from a quadratic increase of interdependencies between the view types, which become very numerous with a growing number of formalisms that have to be supported, the projective approach faces the problem of providing a common formalism that is ab...