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
  • Separate base models without modifications

  • MOF compliant
  • Variability over models in any language defined by means of a MOF-compliant metamodel

  • Standard
  • Proposed for standardization by the OMG

  • Several levels of abstraction
  • Variability Specifications (VSpecs), variation points, and resolutions

  • Features with attributes
  • Variable VSpecs with values of specified types

  • Clonable features
  • VClassifiers with instance multiplicity

  • Intricate relationships among VSpecs
  • Use of different constraint languages such as the Object Constraint Language (OCL)

  • Units of modularization
  • Composite VSpecs, Configurable Units,…

  • Great taxonomy of variation points
  • Object/Link Existence, Object/Link Substitution, Parametric Slot Assignment, Fragment Substitution, Opaque Variation Point (OVP),…

Use of CVL in last years.

CVL Variability model schema
Overview of the CVL approach

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.

CVL delegation engine to a M2M engine

Delegation Engine

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.

User custom M2M transformation with Opaque Variation Points (OVPs)

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.