Common Variability Language (CVL)
The Common Variability Language (CVL) has become one of the most used languages for the specification and resolution of variability in the last few years.
Software Product Lines (SPLs) approaches benefits of the several advantages of CVL to manage the variability of their products:
- Orthogonal variability
- MOF compliant
- Several levels of abstraction
- Features with attributes
- Clonable features
- Intricate relationships among VSpecs
- Units of modularization
- Great taxonomy of variation points
Separate base models without modifications
Variability over models in any language defined by means of a MOF-compliant metamodel
Proposed for standardization by the OMG
Variability Specifications (VSpecs), variation points, and resolutions
Variable VSpecs with values of specified types
VClassifiers with instance multiplicity
Use of different constraint languages such as the Object Constraint Language (OCL)
Composite VSpecs, Configurable Units,…
Object/Link Existence, Object/Link Substitution, Parametric Slot Assignment, Fragment Substitution, Opaque Variation Point (OVP),…
The CVL approach
CVL specifies, in separate models, the variability that can be applied to a base model. The base model is a model in the domain language that can be defined using a MOF-based metamodel and does not contain any information about variability.
The variability information is separately specified in a variability model, according to the CVL metamodel.
How the variability model can be resolved to produce a configured new model from the base model is described in the resolution models (or “configuration models” in the SPL terminology).
CVL provides an executable engine to automatically derive (materialize) a resolved model.
The resolved model is a fully configured product model with the variability resolved.
Variation points define the points of the base model that are variable and can be modified during the materialization process.
Variation points also specify how the elements of the base models are modified by defining specific modifications to be applied by means of model-to-model (M2M) transformations.
The semantics of these transformations is specific to the kind of variation point.
During CVL’s execution, the CVL engine delegates its control to an M2M engine in charge of executing the transformations defined by the variation points.
Opaque Variation Point (OVP)
Some of the variation points supported by CVL are the existence of elements of the base model (ObjectExistence) or the links between them (LinkExistence), the assignment of an attribute’s value (ParametricSlotAssignment), or the replacement of a set of elements with another set of elements (FragmentSubstitution).
An important type of variation point is the Opaque Variation Point (OVP) that enables defining new custom model transformations that are not pre-defined in CVL.