`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$.
Automated Test Data Generation on the Analyses of Feature Models: A Metamorphic Testing Approach https://doi.org/10.1109/ICST.2010.20

`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:`

`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:`

`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:`

`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:`

`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:`