FOSD program cubes
≈ 5 min read
Names in other languages
No names in other languages are held for this entry yet.
Article bodies are English and are not machine-translated. A name in another language is not a translation of the article.
In feature-oriented software development, feature-oriented software development program cubes (FOSD program cubes) are n-dimensional arrays of functions (program transformations) that represent n-dimensional product lines. A program is a composition of features: a base program is augmented with increments in program functionality, called features, to produce a complex program. A software product line (SPL) is a family of related programs. A typical product line has F 0 as a base program, and F 1 ..F n as features that could be added to F 0 . Different compositions of features yield different programs. Let + denote the feature composition operation. A program P in SPL might have the following expression: : P = F 8 + F 4 + F 2 + F 1 + F 0 That is, P extends program F 0 with features F 1 , F 2 , F 4 , and F 8 in this order. We can recast P in terms of a projection and contraction of a 1-dimensional array. Let F i = [F 0 .. F n ] denote the array of features used by a product line. A projection of F i eliminates unneeded features, yielding a shorter array (call it) G i . A contraction of G i sums each G i in a specific order, to yield a scalar expression. The expression for P becomes: : P = \sum_{i=(0,1,2,4,8)} \mathbf{F}_i where the index values accomplish projection and summation is array contraction.…
In feature-oriented software development, feature-oriented software development program cubes (FOSD program cubes) are n-dimensional arrays of functions (program transformations) that represent n-dimensional product lines. A program is a composition of features: a base program is augmented with increments in program functionality, called features, to produce a complex program. A software product line (SPL) is a family of related programs. A typical product line has F 0 as a base program, and F 1 ..F n as features that could be added to F 0 . Different compositions of features yield different programs. Let + denote the feature composition operation. A program P in SPL might have the following expression: P = F 8 + F 4 + F 2 + F 1 + F 0 That is, P extends program F 0 with features F 1 , F 2 , F 4 , and F 8 in this order. We can recast P in terms of a projection and contraction of a 1-dimensional array. Let F i = [F 0 .. F n ] denote the array of features used by a product line. A projection of F i eliminates unneeded features, yielding a shorter array (call it) G i . A contraction of G i sums each G i in a specific order, to yield a scalar expression. The expression for P becomes: P = \sum_{i=(0,1,2,4,8)} \mathbf{F}_i where the index values accomplish projection and summation is array contraction. This idea generalizes to n-dimensional arrays that model multi-dimensional product lines. C = M_{cb} + M_{ct} + M_{wb} + M_{wt} = \sum_{i=(core,web) \atop j=(base,td)} \mathbf{M}_{ij} Note: Each dimension is a collection of base programs and features. Not all of their compositions are meaningful. A feature model defines the legal combinations of features. Thus, each dimension would have its own feature model. It is possible that selected features along one dimension may preclude or require features along other dimensions. In any case, these feature models define the legal combinations of features in a multidimensional product line. P = \sum_ { i_1 = S_1 \dots i_n = S_n} \mathbf{K}_{i_1 \dots i_n} Program generation is evaluating the scalar expression to produce program P. An interesting property of cube design is that the order in which dimensions are contracted does not matter—any permutation of dimensions during contraction results in a different scalar expression (i.e. a different program design), but all expressions produce the same value (program). For example, another expression (design) to produce calculator C contracts dimensions in the opposite order from its original specification: C = M cb + M wb + M ct + M wt Or more generally: P = \sum_{ i_n = S_n \dots i_1 = S_1} \mathbf{K}_{i_1 \dots i_n} Note: Underlying cube designs is a commutative diagram, such that there are an exponential number of paths from the empty program 0 to program P. Each path denotes a particular contraction of a cube, and corresponds to a unique incremental design of P. Included among these paths are cube aggregations that contract cubes using different dimensional orders. The significance of program cubes is that it provides a structured way in which to express and build multi-dimensional models of SPLs. Further, it provides scalable specifications. If each dimension has k values, an n-cube specification of a program requires O(kn) terms, as opposed to O(k n ) cube elements that would otherwise have to be identified and then composed. In general, cubes provide a compact way to specify complex programs.
Text derived from https://en.wikipedia.org/w/index.php?oldid=1365678177 under CC BY-SA 4.0; modifications have been made.