FOSD程序立方体
在面向功能的软件开发中,面向功能的软件开发程序立方体( FOSD程序立方体)是代表N维产品线的n维数组(程序转换)。程序是功能的组成:基本程序以程序功能(称为功能)的增量增强,以产生复杂的程序。软件产品线(SPL)是一个相关程序家族。典型的产品线具有F 0作为基本程序,而F 1 ..f n作为可以添加到F 0的功能。功能的不同组成产生不同的程序。令 +表示特征组成操作。 SPL中的程序P可能具有以下表达式:
- p = f 8 + f 4 + f 2 + f 1 + f 0
也就是说,P在此顺序使用功能f 1 ,f 2 ,f 4和f 8的程序f 0 。
我们可以根据1维数组的投影和收缩来重铸p。令f i = [f 0 .. f n ]表示产品线使用的特征数组。 f的投影消除了不需要的功能,产生了一个较短的数组(称为) g i 。 g i的收缩以特定顺序列为每个g i ,以产生标量表达。 P的表达变为:
索引值完成投影和求和的地方是数组收缩。这个想法概括为对多维产品线进行建模的n维数组。
多维产品线
多维产品线通过多个相互作用的特征集来描述。作为基础2D示例,很容易创建一个计算器的产品线,其中变体提供了不同的操作集。另一种变化可能会为计算器提供不同的前端,一个没有GUI,另一个带有Java GUI,三分之一的带有Web GUI。这些变化相互作用:每个GUI表示都引用一个特定的计算器操作,因此每个GUI功能不能独立于其计算器功能设计。这样的设计导致矩阵:列代表计算器功能的增量,行表示不同的前端。此类矩阵M向右显示:列允许一个将基本的计算器功能(基本)与可选的对数/指数(LX)和三角(TD)功能配对。行允许一个人将核心功能与没有前端(核心),可选的GUI(GUI)和基于Web(Web)前端配对。
元素M IJ实现了列功能I和行功能J的相互作用J。例如,标有CB的元素是实现计算器核心功能的基本程序。 Element GB添加了将核心功能显示为GUI的代码;元素WB添加了通过Web显示核心功能的代码。同样,元素CT将三角代码添加到核心计算器功能。 Elements GT和WT添加代码以将三角功能显示为GUI和Web前端。
计算器由两个特征序列唯一指定:一个序列定义了计算器功能,另一个序列是前端。例如,在Web格式中提供基本和TRIG功能的计算器C由表达式定义:
- 注意:每个维度都是基本程序和功能的集合。并非所有的构图都是有意义的。功能模型定义了特征的法律组合。因此,每个维度都将具有自己的功能模型。沿一个维度的选定功能可能会排除或需要沿其他维度的功能。无论如何,这些功能模型定义了多维产品线中功能的法律组合。
立方体
通常,立方体是n维数组。立方体的等级是其维度。标量是等级0的立方体,向量是等级1的立方体,矩阵为等级2。遵循张量表示法:Cube指定其等级的索引数量。标量s是等级0(没有索引),v k是向量(等级1),m ij是矩阵(等级2),c ijk是立方体(等级3)。
程序立方体是代表n维产品线的函数的n维数组(程序转换)。立方体沿每个轴的值表示基本程序或可以详细说明基本程序的功能。产品线的排名是其立方体的等级。
n维SPL中的程序由n序列s 1 .. n序列唯一指定,每个维度一个。程序的设计是标量(表达式),它是由(1)投射其不需要元素的立方体形成的,并且(2)将所得的kcube收缩到标量:
程序生成正在评估标量表达以产生程序。
立方体设计的一个有趣的属性是,尺寸合同的顺序无关紧要- 收缩过程中的任何尺寸的置换都会导致标量表达式不同(即不同的程序设计),但所有表达式都会产生相同的值(程序) 。例如,另一个表达式(设计)以与原始规范相反的顺序产生计算器C合同尺寸:
- C = M CB + M WB + M CT + M WT
或更一般:
- 注意:基础立方体设计是一个交换图,因此从空程序0到程序。每个路径都表示多维数据集的特定收缩,并且对应于P。这些路径是立方体聚合,使用不同的维订单收缩立方体。
程序立方体的意义在于,它提供了一种结构化的方式来表达和构建SPL的多维模型。此外,它提供了可扩展的规格。如果每个维度具有K值,则程序的N-Cube规范需要O(kn)项,而不是O(k n )立方体元素,否则必须识别然后组成。通常,立方体提供了一种紧凑的方式来指定复杂程序。
申请
表达问题(又称“可扩展性问题)是针对类型系统的编程语言中的一个基本问题,该系统可以以类型安全的方式向程序中添加新的类和方法。这也是多维SPL设计中的基本问题。表达问题是等级2的SPL的一个示例。 EP实际上是〜30行计划的SPL;下面的应用程序显示了这些想法如何扩展到> 30k线的程序(10 3增加尺寸)。
此外, FOSD元模型可以看作是程序立方体的特殊情况。