Operations

Table of contents

  1. Concept of operations in flamapy
    1. Tied to a metamodel
    2. Transformations for operations
  2. Available operations

Concept of operations in flamapy

The concept of operations in the flamapy framework is a central component that defines the specific tasks or analyses that can be performed on feature models. Each operation is designed to extract useful information or metrics from the feature models, thereby aiding in various aspects of software product line engineering.

Tied to a metamodel

In flamapy , operations are intrinsically tied to the metamodel they are designed for. A metamodel provides the abstract syntax and semantic rules of the variability model, essentially defining the structure and constraints of the feature models it represents. Operations leverage these definitions to perform analyses that are specific to the type of variability model they are applied to. This ensures that the operations are context-aware and can handle the specific intricacies and rules of the underlying model.

For example, an operation designed to count the number of leaf features in a feature model must understand the hierarchical structure defined by the metamodel. Similarly, an operation to check the satisfiability of a configuration needs to interpret the constraints and dependencies specified by the metamodel.

Transformations for operations

To facilitate the execution of operations across different types of variability models, flamapy employs a series of transformations. These transformations are necessary to convert models between various representations, enabling the application of operations that might require different metamodels or computational paradigms. Take a look to transformations for more information

Available operations

Currently flamapy offers the following operations implemented in the marked plugins/metamodels and available in the interfaces shown.

Plugin Interface
Title FM SAT BDD Z3 SharpSAT SDD d-DNNF Diagnosis CMD Facade Python REST
All Feature Bounds ✘ ✘ ✘ ✔ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Atomic Sets ✔ ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Attribute Optimization ✘ ✔ ✘ ✔ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Average Branching Factor ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Backbone ✘ ✔ ✔ ✔ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Commonality ✘ ✔ ✔ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Configuration conflict ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔ ✔
Configuration repair ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔ ✔
Configurations ✘ ✔ ✔ ✔ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Number of Configurations ✘ ✔ ✔ ✔ ✔ ✔ ✔ ✘ ✔ ✔ ✔ ✔
Configurations With N Features ✘ ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Conflict ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔ ✔
Core Features ✔ ✔ ✔ ✔ ✘ ✔ ✘ ✘ ✔ ✔ ✔ ✔
Count Leafs ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Coverage ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Covering array ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Dead Features ✘ ✔ ✔ ✔ ✘ ✔ ✘ ✘ ✔ ✔ ✔ ✔
Diagnosis ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔ ✔
Estimated number of configurations ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Explain dead feature ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔ ✔
Explain false optional ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔ ✔
Explain void model ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔ ✔
False Optional Features ✘ ✔ ✔ ✔ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Feature Ancestors ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Feature Bounds ✘ ✘ ✘ ✔ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Feature explanation ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔ ✔
Feature Inclusion Probability ✘ ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Filter ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Generate Random Attribute ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔
Generate random feature model ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔
Homogeneity ✘ ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Language Level ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Leaf Features ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Max Depth ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Metrics ✔ ✔ ✔ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Minimal corrections ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔ ✔
Minimum configuration ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Product distribution ✘ ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Pure Optional Features ✘ ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Sample reduction ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Sampling ✘ ✔ ✔ ✘ ✔ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Satisfiable ✘ ✔ ✔ ✔ ✘ ✔ ✔ ✘ ✔ ✔ ✔ ✔
Satisfiable Configuration ✘ ✔ ✔ ✔ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
T-wise sampling ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Unique Features ✘ ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Variability ✘ ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Variable Bounds ✘ ✘ ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✘
Variant Features ✘ ✘ ✔ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔
Variation Points ✔ ✘ ✘ ✘ ✘ ✘ ✘ ✘ ✔ ✔ ✔ ✔

Table of contents