A Feature represents a characteristic or trait of some object of consideration. The actual object of consideration depends on the particular purpose of the feature's containing feature model.<br/><br/>Example 1: The core technical feature model on vehicle level defines the technical properties of the complete system, i.e., vehicle. So its object of consideration is the vehicle as a whole and therefore its features represent characteristics or traits of the vehicle as a whole.<br/><br/>Example 2: The public feature model of some function F in the FDA defines the features of this particular software function. So its object of consideration is function F and therefore its features represent characteristics or traits of this function F.<br/><br/><br/>Semantics:<br/>Feature is a (non)functional characteristic, constraint or property that can be present or not in a (vehicle) product line.<br/><br/><br/>Extension:<br/>Class<br/>
Variability can be bound (determined, decided) at different stages in development. The actual binding time describes the chosen/actual binding time for the feature <br/>
Specifies the Feature's cardinality stating how often this feature may be selected during configuration.<br/><br/>Typical cardinalities include:<br/><br/>- A cardinality of 0..1 means that this Feature is optional, i.e. it can be selected or deselected during configuration.<br/><br/>- A cardinality of 1 means that this Feature is mandatory, i.e. it cannot be deselected but is always present in a configuration if its parent feature is present; mandatory root features are present in all configurations.<br/><br/>- A cardinality of 0 means that this Feature is abstract, i.e. it cannot be selected and is never present in any configuration. This can be used to completely disable a feature and, in the case of non-leaf features, the whole subtree below it, for example to tentatively remove a subtree without (yet) deleting it completely from the model.<br/><br/>- A cardinality with an upper bound greater than 1 or * (infinite), such as [0..2], [1..*], or [2..8], means that this Feature is cloned, i.e. it may be selected more than once during configuration. If such a feature is actually selected more than once in a particular configuration, then its entire subtree may be configured differently for each selection. Cloned features are in fact instantiated during configuration and each instance is provided with a name.<br/><br/>Note that using cloned features, i.e. features with cardinality having an upper bound greater than 1, has far-reaching consequences for how Features are applied. If this is not desired/needed in a certain project, cardinalities #gt;1 can be prohibited by specifying an appropriate complianceLevel in the FeatureModel. As a general guideline, cloned features should be avoided as far as possible. In some situations, however, they can prove extremely useful and elegant. For example, consider the feature model of a wiper system; in order to allow for an extremely flexible configuration of the interval modes, a single parameterized cloned feature can be used: "IntervalMode[2..*] : Float". With this single cloned feature, any number of intervals can be created (but at least 2) and for each interval a precise duration in sec can be configured; without cloned features, this degree of flexibility could not easily be achieved.<br/>
Variability can be bound (determined, decided) at different stages in development. The required binding time describes the binding time that the feature is intended to have. <br/>
Name: childFeature
FeatureGroups may only have Features as their children and must always have at least two children.
It is perfectly legal to have child features in a feature group that are mandatory or cloned. However, except for special use cases, this is discouraged and therefore all child features of a FeatureGroup should usually be optional, i.e. have cardinality [0..1].
Name: featureParameter
For parameterized features, this specifies the default value of the feature's parameter. The EADatatatype connected to the EAValue specifies the respective datatype.
Name: rootFeature
The root Features owned by the FeatureModel. Note that only root Features are directly contained in the model; non-root Features are contained in their parent Feature or parent FeatureGroup.