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.
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
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 |
7 | 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 |
5 | 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 |
0 | 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 ]


