3.6. Deriving product variants

The family model captures both the structure of the solution space with its variation points and the connection of solution and problem space. Not only is the separation of these two spaces important, but also the direction of the connection, since problem space models in most cases are much more stable than solution spaces; the linkage of the solution space to the problem space is more meaningful than the selection of solution items by rules in the problem space. This also increases the potential for reuse, since problem space models can simply be combined with other (new, better, faster) solutions. In pure::variants the linkage between models is determined by creating a configuration space with the relevant feature and family models as members.

Now we have all the information needed to create an individual product variant. The first step is to determine a valid selection of characteristics from the feature model. In the case of pure::variants, the user is guided towards a valid and complete feature selection. Once a valid selection is found, the specified feature list as well as the family model serve as input for the production of a variant model. Then, as is described above, the rules of the individual model items are checked. Only items that have their rules satisfied are included in the finished solution.

Since all these activities are done on pure::variants model level only, no "real" product has been created at this point. The last step is to execute the transformation, which interprets the models and creates an actual product variant. In pure::variants this transformation is highly configurable. In this example, source code would be copied from a file repository to a variant specific location, the configuration header file and some makefile settings would be generated. Also the generation of product variant specific UML models is a possible transformation. See following parts of the documentation for more information on the transformation process.