Review: using pure::variants

Usually in SCM, the specification of commonalities is the realm of identification, and produces configuration items, i.e. families of versions (dangerous, overloaded word) or members susceptible to represent the family in the context of a given software configuration. Members differ from each other in ways which may be format specific (e.g. limited to some lines of text files) or generic (e.g. based on dependencies if supported by the tool). The SCM tool usually provides a generic access to the specific methods needed to assess those differences.

Here, the commonalities and the differences are modeled separately. Differences link to features, commonalities to families. The grain of management is not quite clear yet, but refers to products (suspicious to me: 'product' feels like a soon-to-be-deprecated concept, in a world in which software environments build upon shared components, and are updated incrementally, almost continuously).
The concerns are surprisingly (difference makes only sense in the context of sharing) separated, and linked to perspectives (again surprisingly termed respectively 'customer or marketing' and 'engineering'—I don't reckon the relevance of such a universal breakdown of perspectives).

Looking forward at steps 2 and 3 brings the relief of the mention of automation (again), alleviating the threat linked to the word 'model', thus to the risk of having to assume the consequences of early (thus inevitably suboptimal) decisions. The mention of code-generation is on the contrary not one I welcome: in my experience, not directly producing executable machine code, but instead source code, brings no guarantee of supporting any higher-level language than this of the produced 'source'. I find for instance ludicrous, assertions that UML would be higher-level than C++. Such assertions are however often implicit, which saves them from having to offer a rationale.

-- MarcGirod - 17 Jun 2007

In fact the commonalities and differences are modeled in both Feature and Family models. Feature models model the commonalities and differences at a feature level e.g. whether particular product modules are optional, alternative or mandatory. Family models model the commonalities and differences in the solution e.g. whether a particular software component is shared between all products.

Perhaps product isn't the right term as you note, but it is common to use this term in the Software Product Line community. Other terms that get used are variant or work-product or system (or even release) - depending on the organisational setting.

Code Generation can be used in conjunction with pure::variants - although the tool itself does not presume this is present. Instead there are a variety of ways of using the tool and at its simplest this can simply involve pure::variants automatically selecting and configuring items from a CM repository or file system and then feeding the result into a make tool or similar.

-- MarkDalgarno - 21 Jun 2007