Bidirectional Model Transformations
Description
Model transformations constitute a key technology for model-driven software engineering. Languages for model transformations rely on different computational paradigms, support batch or incremental, in-place or out-place transformations, etc. Model transformations may also be classified with respect to their direction. A unidirectional transformation receives a source model as input and returns a target model. In contrast, a bidirectional transformation may be executed in both directions.
In software engineering, a strict forward engineering process requires a chain of unidirectional transformations, which transform requirements eventually into code. In contrast, roundtrip engineering calls for bidirectional transformations that propagate changes back and forth. Bidirectional transformations have been studied also in a wide range of other application domains, including e.g. view-update problems in databases or bidirectional data exchange.
Developing bidirectional transformations in a conventional programming language is awkward and error-prone: Both transformation directions have to be programmed explicitly at a low level of abstraction, taking algorithmic details of change propagation into account. Therefore, domain-specific languages (DSLs) and theoretical approaches tailored towards bidirectional transformations have been developed.
Research on bidirectional transformations has often focused on the development of declarative approaches that guarantee consistent behavior of forward and backward transformations. Consistency has been formalized by a number of bidirectional transformation laws of different kinds.
However, these approaches have a major drawback which is shared by all of them: While they guarantee certain bidirectional transformation laws, they lack expressiveness: Certain bidirectional transformation problems cannot be solved at all, or they can be solved only partially, or they can be solved but with a considerably higher specification effort than expected. In previous work, this claim was substantiated by a number of benchmarks and case studies (see publications below).
The results from our case studies motivated us to set up a project dedicated to creating a light-weight framework for assisting developers in programming bidirectional transformations using an imperative programming language: BXtend.
In a later project, we added a declarative language on top of the BXtend framework, to support the declarative specification of model correspondences and automatic code generation for transformation code from this declarative specification: BXtendDSL
Publications
- Benchmarking bidirectional transformations: theory, implementation, application, and assessment
- The Families to Persons Case
- Bidirectional Transformations with QVT-R: A Case Study in Round-trip Engineering UML Class Models and Java Source Code
- Round-trip Engineering UML Class Models and Java Models: A Real-world Use Case for Bidirectional Transformations with QVT-R
- Using triple graph grammars to realise incremental round-trip engineering
- Towards Incremental Round-Trip Engineering Using Model Transformations