Feature Models

### Program Information

Name: Feature Models
Domain: Algorithm
Functionality: Given an FM and its known set of products, a set of neighbour FMs together with their corresponding set of products are automatically generated and used for testing different analyses.
Input: Given a feature model, $FM$, we say that $FM'$ is a neighbour model if it can be derived from $FM$ by adding or removing a relationship or constraint $R$. $P$ is a set of product and $P'$ is a set of product derived from $P$. $C$ is the set of alternative subfeatures(in Alternative). $C$ is the set of  subfeatures add to the model(in Or). We denote with $\varphi(C)$ the powerset of $C$ i.e. the set of all subsets in $C$.(in Or) Let f and g be the origin and destination features of the new requires constraint added to the model.(in Requires) et f and g be the origin and destination features of the new excludes constraint added to the model.(in Requires)
Output: let $f$ be the mandatory feature added to the model and $pf$ its parent feature. $prods(FM)$, returning the set of products of an input feature models, and $features(P)$, returning the set of features of a given product. We use the symbol $'\ '$ to refer to the cardinality (i.e. number of elements) of a set. $filter(FM,S,E)$ that returns the set of products of $FM$ including the features of $S$ and excluding the features of $E$.

#### Reference

 Automated Test Data Generation on the Analyses of Feature Models: A Metamorphic Testing Approach https://doi.org/10.1109/ICST.2010.20

### MR Information

#### MR1------

Description:
Property: $\#prods(FM')=\#prods(FM) \wedge \forall P'(P'\in prods(FM') \Leftrightarrow \exists P \in prods(FM) \cdot (pf\in features(P)\wedge P' = P\cup \{f\})\vee (pf \notin features(P)\wedge P'=P))$
Source input:
Source output:
Follow-up input:
Follow-up output:
Input relation:
Output relation:
Pattern:

#### MR2------

Description:
Property: $\#prods(FM')=\#prods(FM) + \#filter(FM,\{pf\},\varnothing) \wedge \forall P'(P'\in prods(FM') \Leftrightarrow \exists P \in prods(FM)(P'=P\vee(pf\in features(P)\wedge P'=P\cup \{f\}))$
Source input:
Source output:
Follow-up input:
Follow-up output:
Input relation:
Output relation:
Pattern:

#### MR3------

Description:
Property: $\#prods(FM')=\#prods(FM) + (\# C-1)\#filter(FM,\{pf\},\varnothing) \wedge \forall P'(P'\in prods(FM') \Leftrightarrow \exists P \in prods(FM)\cdot (pf \in features(P)\wedge \exists c \in C \cdot P'=P\cup \{c\}) \vee (pf \notin features(P) \wedge P'=P))$
Source input:
Source output:
Follow-up input:
Follow-up output:
Input relation:
Output relation:
Pattern:

#### MR4------

Description:
Property: $\#prods(FM')=\#prods(FM) \backslash \#filter(FM,\{f\},\{g\})$
Source input:
Source output:
Follow-up input:
Follow-up output:
Input relation:
Output relation:
Pattern:

#### MR5------

Description:
Property:  $\#prods(FM')=\#prods(FM) \backslash \#filter(FM,\{f,g\},\varnothing)$
Source input:
Source output:
Follow-up input:
Follow-up output:
Input relation:
Output relation:
Pattern:
Insert title here