The Velvet Modeling Language

Variability of a software product line (SPL) is often described with a feature model. Stakeholders often try to separate different variability dimensions, such as domain variability and implementation variability. This results in distinct variability models, which are easier to handle than one large model. On the other hand, it is sometimes required to analyze different variability dimensions in combination using a single model only.

Velvet is a language for multi-dimensional variability modeling. It integrates separate modeling and integrated analysis of variability, feature model composition, and configuration. Velvet allows stakeholders to model the variability dimensions of an SPL separately and to compose the separated dimensions on demand. This improves reuse of feature models and enables stakeholders to independently develop variability dimensions.

Feature Modeling with Velvet

In the Figure below, we show the source code of an example feature model. The definition of a variability model with Velvet is similar to an OOP class definition. It consists of a declaration of the described concept (i.e., the root of the feature model) using the keyword concept. Within a concept, we use a hierarchical definition of its features as known from a feature model. Each feature is defined with keyword feature and a name. There can be multiple features with the same name as long as they can be distinguished via there fully qualified name, which is the path in the feature tree.

itidb

We denote mandatory features with keyword mandatory, which is required to achieve consistency of language mechanisms that are based on separating generalization (adding features) and specialization (adding constraints). Without additional keywords, a feature is optional, which corresponds to unrestricted generalization.

Composition and Decomposition of Variability Models

Velvet provides means to decompose a feature model into separate models for different variability dimensions. The separated models can be composed on demand, which enables separate modeling of individual variability dimensions.

Multi Product Lines

With Velvet, we support modeling of interdependent software product lines, also known as multi product lines. Velvet provides mechanisms to describe dependencies between different SPLs and to configure the set of interdependent SPLs in a single configuration step.

Tool Support

itidb The fmview model viewer.

fmTools

We provide a set of tools to model, compose, and configure variability models. Beside the Velvet format, we provide support to read other kinds of variability models (such as FeatureIDE, SPLOT, etc.) and to configure multi product lines that consist of different kinds of models. We also provide import of various formats and export to the FeatureIDE format for editing in the FeatureIDE model editor.

The tools are developed as an SPL with FeatureC++ and are included in the FeatureC++ development kit (FCDK). The source code in zip archives below is FeatureC++ generated C++ code. For unprocessed sources of the FmTools SPL please mail to rosenmue (at) ovgu.de

fmView .exe, src View Velvet, FeatureIDE, SplConqueror, and SPLOT formats and export to Velvet and FeatureIDE format.
fmConfig .exe, src Command line configuration tool that takes a set of interdependent feature models and creates a configuration file for FeatureC++, AHEAD, or the C Preprocessor
fmCompose coming soon Model composition using superimposition.

Sample models

In the following table we provide a set of example models of SPLs that we use in practice. For the FmTools MPL you can see a screenshot of the composition model below.

Model Download
Screenshot
No. of Features Description
FameDBMS fame.v
fame.png
141  The FameDBMS data management system for resource-constrained devices.
BerkeleyDB BerkeleyDB.v
13  Feature model of Berkeley DB v4.4.20.
SQLite SQLite.v
85  Feature model of SQLite.
SnNode SnNode.v
25  A product line for nodes of a sensor network. It uses BerkeleyDB and SQLite for data storage.
env env.v
env.png
39  A model of frequently used external environment features for SPL development including the build process, the operating system, etc.
fcdk fcdk.v
fcdk.png
211  Model of the FeatureC++ development kit (FCDK)
CppApp CppApp.v
CppApp.png
Model of a generic C++ application that references the FCDK and env models and adds C++ specific constraints. It can be used as a basis for SPLs that make use of FCDK.
FmTools FmTools.v
FmTools.png
Model of the FmTools SPL that is used to implement the fmview and fmConfig applications above. It makes use of FOSD modeling and SAT solving capabilities of the FCDK. It specializes the CppApp model (using inheritance) to reuse C++ specific configuration knowledge and adds features to group configuration choices.
fmview fmview.v
fmview.png
The fmview specialization of the FmTools SPL. It represents a concrete product (for viewing SPL models) and does not contain any features. It specializes the FmTools model by adding constraints only.

Example Composition Model


Generated composition model of the FmTools multi product line shown in Microsoft Visual Studio. fmView and fmConfig are fully specialized variants of the FmTools SPL. The shown model was generated with fmConfig as C# code.

Grammar and Parser

The current Velvet grammar can be found here. Note that the grammar changes due to current development. The grammar can be used with Pitcher, an extensible parser generator, that generates FeatureC++ source code. Pitcher is part of the FeatureC++ development kit (FCDK). A windows binary of Pitcher can be found here. The source code is freely available on source forge as part of FeatureC++. A generated Velvet Parser in C++ (after processing with FeatureC++) for Windows can be found here.

Publications

Marko Rosenmüller, Norbert Siegmund, Thomas Thüm, and Gunter Saake. Multi-Dimensional Variability Modeling. In Proceedings of the Workshop on Variability Modelling of Software-intensive Systems (VaMoS), pages 11-20. Namur, Belgium. ACM Press, Jan. 2011.
[ bib | .pdf ]

modified: "May 3 2011"