Puzzle

Tool Support for Language Product Lines Engineering

View the Project on GitHub damende/puzzle

Language Product Lines Engineering in a Nutshell

The adoption of language-oriented software development relies on the availability of the DSLs needed to express all the aspects of a system under construction. This implies the development of many DSLs which is a challenging task due to the specialized knowledge and skills it requires. As a matter of fact, the ultimate value of DSLs has been severely limited by the cost of the associated tooling (i.e., editors, parsers, etc) [Jézéquel:2015].

To improve cost-benefit when using DSLs, the research community in software languages engineering has proposed mechanisms to increase reuse during the construction of DSLs. The idea is to leverage previous engineering efforts and minimize implementation from scratch [Krahn:2010]. These reuse mechanisms are based on the premise that “software languages are software too” [Favre:2011] so it is possible to use software engineering techniques to facilitate their construction.

In particular, there are approaches that take ideas from Component-Based Software Engineering (CBSE) and Software Product Lines Engineering (SPLE) during the construction of new DSLs. Indeed, the notion of language product line (a software product line where products are languages) has been recently introduced [Zschaler:2010]. We are facing an emerging approach in the construction of DSLs: Language Product Lines Engineering (L-PLE).

The figure below illustrates how the Software Product Lines Engineering approach can be adapted to the construction of software languages, in particular DSLs, by supporting Languages Modularization and Languages Variability Management.

Similarly to software product lines, language product lines can be built through two different approaches: top-down and bottom-up [Kuhn:2016]. In the top-down approach, a language product line is designed and implemented through a domain analysis process where the knowledge owned by experts and final users is used to define a set of language modules that implement the language features of the product line. Also, the domain knowledge is used to specify variability models capturing the rules that define the way in which the language features can be combined to produce valid DSL variants. In the bottom-up approach, the language product line is built up from a set of existing DSL variants through reverse-engineering techniques. Those techniques should provide mechanisms for: (1) recovering of a language modular design including all the language constructs existing in the DSL variants; and (2) synthesis of the corresponding variability models.

Contributions

Based on these different approaches for the construction of language product lines, we propose two contributions briefly explained below:

A top-down perspective for L-PLE

As a first contribution, we introduce a set of facilities to support the development of top-down language product lines. Concretely, we provide a language modularization approach that permits the decomposition of DSLs into interdependent language features. We also introduce a modeling strategy to represent the variability of a language product line. These facilities are accompanied with a set of methodological insights to guide language designers during the development process.

A bottom-up perspective for L-PLE

As a second contribution, we introduce a reverse-engineering process to automatically build up a language product line from a set of existing DSL variants. This process encompasses: (1) the recovering of a language modular design that defines the features of the language product line; and (2) the synthesis of variability models that represent the corresponding variability.

Scope

All the ideas that we will present in the remainder of this thesis are scoped to executable domain-specific modeling languages (xDSMLs) where the abstract syntax is specified through metamodels, and the dynamic semantics is specified operationally as a set of domain-specific actions [Combemale:2013]. Domain-specific actions are java-like methods that introduce behavior in the meta-classes of a given metamodel. Such injection is performed via weaving as the same as in aspect oriented programming [Jezequel:2015]. Concrete syntax, and hence concrete syntax variability, are out of the scope of this thesis.

Puzzle: A top supporting language product line engineering

Puzzle is a set of tools intended to support language product line engineering by consider both the top-down and the bottom-up approach. In the following, you will find some examples and tool demo showing the capabilities of Puzzle.

Tool demonstrations and experiments

Downloads

We have prepared a virtual machine image that includes all the tooling and configuration needed to use Puzzle. Just download it, open the pre-installed Eclipse IDE, and try the examples. You need VirtualBox.

Authors and Contributors

Publications

Articles in Refereed Journals

Articles in Refereed Conferences

Articles in Refereed Workshops and Symposiums

Acknowledgements

This work is supported by the ANR INS Project [GEMOC] (ANR-12-INSE-0011); the bilateral collaboration [VaryMDE] between Inria and Thales; the bilateral collaboration FPML between Inria and DGA; and the European Union within the FP7 Marie Curie Initial Training Network [RELATE] under grant agreement number 264840.