UVL Reader
The Universal Variability Language (UVL) is a language designed to specify variability in software product lines (SPLs). It aims to provide a standardized way to describe the features and variations within a product line, facilitating the management of different configurations and enabling tool interoperability.
Key features
Key features of Universal Variability Language (UVL):
Standardization
UVL provides a common, standardized way to represent variability, making it easier to share and reuse models across different tools and organizations.
Expressiveness
It is designed to be expressive enough to capture complex variability, including hierarchical features, constraints, and dependencies between features.
Simplicity and Usability
UVL aims to be simple to use, with a syntax that is easy to understand for both humans and machines. This makes it accessible to a wide range of stakeholders, including developers, product managers, and other domain experts.
Tool Support
There is growing support for UVL in various SPL tools, which can interpret and manipulate UVL models. This includes tools for feature modeling, configuration, analysis, and visualization.
Interoperability
By using a common language like UVL, different tools and platforms can more easily interoperate, enabling a more integrated and efficient SPL engineering process.
flamapy relies on file extensions to identify which transformation is required. If you are not an expert we recommend to specify the correct extension for this file type. The file extension for this file is .uvl
A snipet of how it looks like
features
Sandwich
mandatory
Bread
optional
Sauce
alternative
Ketchup
Mustard
Cheese
constraints
Ketchup => Cheese
Code Examples
from flamapy.core.discover import DiscoverMetamodels
# Initiallize the dicover metamodel
dm = DiscoverMetamodels()
# Get the fm metamodel representation using the transformation
# required to get to the fm metamodel
# the transformation is identified by file extension .uvl
feature_model = dm.use_transformation_t2m("path/to/feature/model",'fm')
# Call the operation, no automatic transformations will be needed
print(feature_model)