Feature model
# Feature model

En développement logiciel, les Feature model sont une technique de modélisation des gammes de produits logiciels (Software product lines). Ils ont été introduits pour la première fois dans la méthode de feature-oriented domain analysis par Kang en 1990.

## Objectif

Les feature models sont utilisés pour identifier les différences et similitudes entre tous les produits d'une même software product line. Chaque caractéristique, ou feature, peut être un préalable, un composant ou un morceau de code.

## Formalisme

Les feature models se présentent comme des arbres dans lesquels chaque nœud est une caractéristique et chaque arête peut avoir quatre valeurs possibles :

* Obligatoire : Si le nœud parent est présent, alors le nœud enfant aussi.
* Optionnel : Le nœud enfant peut ou peut ne pas être présent alors que le nœud parent l'est.
* Alternative : Si le nœud parent est présent, alors un seul des nœuds enfants reliés par une arête alternative l'est.
* Ou : Si le nœud parent est présent, alors au moins un des nœuds enfants reliés par une arête l'est.

À cela s'ajoutent des relations non hiérarchiques entre nœuds :

* Préalable : Si le nœud A est présent alors le nœud B aussi.
* Exclusion : les nœuds A et B ne peuvent pas être présents en même temps.

Dans les extended feature model, chaque caractéristique peut aussi avoir un ou plusieurs paramètres ou attributs ayant chacun un domaine de définition.

## Caractéristiques

Benavides et al. définissent deux caractéristiques des feature models : d'une part, la variabilité d'un modèle entier, définie comme le rapport entre l'ensemble des produits représentés par un feature model et l'ensemble des produits représentables en gardant les caractéristiques mais en supprimant les relations entre les deux ; la communalité d'une caractéristique, d'autre part, correspond au rapport entre l'ensemble des solutions où cette caractéristique est présente sur l'ensemble des solutions.

