Variation Points

Home
About Ménage
People
Current Status
Publications
Downloads
Contact Us

Overview Problem & Approach Designing PLAs Variation Points

Optionality

Ménage supports the specification of three kinds of variation points: optional elements, variant types, and optional variant elements. Optional elements are added just as regular elements, simply by providing a Boolean guard at the time of creation of the element. Most Boolean guards will be of a rather trivial nature but the availability of a rich language allows architects to establish intricate relationships among different variation points.

Graphically, optional elements are shown using dashed lines. The component Print in the figure above, for instance is an optional component. Note that, because the Print component is optional, the link to the connector Bus1 is automatically optional as well. If the Print component is included in a particular product architecture, the link is included as well; otherwise, it is left out.

Ménage treats variant types in a special way. Instead of containing a subarchitecture of components and connectors, a variant type only contains references to other types. As shown in the figure above, references are guarded with mutually exclusive Boolean expressions to ensure that only one type can be selected at a type. In the case of the example, the guards are used to ensure that only a single spelling checker component can be selected that covers one particular language. Of note is that, in the case of the example, the interfaces on the variants are exactly the same to the interfaces on the overarching variant type. The general rule that is followed in Ménage is that interfaces may differ, but that optionality should be used to ensure compliance. For instance, suppose that the Dutch spell checker also has an interface for thesaurus functionality. Such an interface should be declared optional at the level of the variant type, since not all variant provide this interface. This guarantees compatibility within the remainder of the product line architecture, irrespective of which variant is eventually selected.

Of note is that, because optionality is expressed at the level of the structure of the product line architecture and because variability is expressed using types, the two seamlessly combine to create optional variant elements. To do so, an architect adds a new instance of a variant type and annotates it with a Boolean guard that determines its inclusion. Given that individual variants may have subarchitectures, an architect should carefully establish the layers of variation points that are introduced within the product line architecture.

Selection (Selector Homepage)

Once a number of variation points have been introduced in a product line architecture, it becomes necessary to be able to resolve those variation points in order to select one or more product architectures out of the overall product line architecture. Selection by hand can turn into an arduous task given that a product line architecture may have many variation points that each may have a complex Boolean expression as guard(s). Therefore, Ménage includes a Selector component to automate the process.

Given a set of desired properties, which are expressed as typed name-value pairs, and given a starting point in the product line architecture (e.g., the “top-level” component type from which selection should begin), Ménage iterates over the product line architecture and attempts to resolve each of the Boolean guards that it encounters. If it can fully resolve a Boolean guard to true, the respective element is included. If it can fully resolve a Boolean guard to false, the respective element is removed. If a Boolean guard can only be partially resolved, the element is included with the reduced Boolean guard attached. While an individual selection may only result in a smaller product line architecture, iterative use of the Selector will eventually result in the selection of a single product architecture.

Shown in , the selector can operate in three different modes. In the first (“Select”), it only attempts to resolve variation points, but it does not remove any non-used items. In the second (“Prune”), it removes any unused items from a product line architecture to clean up the specification. In the third (“Select+Prune”), it combines the two in one step to minimize manual involvement. Depending on the purpose of using the selector, an architect would use the desired mode.

Home | About Ménage | People | Current Status | Publications | Downloads | Contact Us

For problems or questions regarding this web contact Akash Garg.
Last updated: 03/02/03.