0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

特征模型和特征-这是什么?

经纬恒润 2022-01-05 11:16 次阅读

大家好,这是【产品线工程(PLE)专题】更新的第四篇,上一篇我们介绍了版本、变体和其他的基础定义,这一篇我们介绍特征模型和特征-这是什么

非正式地谈论可变性是很有趣的一件事,但最终还是需要以一种“标准”的方式来捕获可变性的信息。在研究和工业界中有很多方法来捕获可变性信息,其中较流行的方法被称为特征建模。本文将对特征模型的基本概念进行解释,并且对于回答“什么是特征?”这个有趣的问题给出一些提示。

© pure-systems GmbH

问题空间的特征

简而言之,特征模型是简单的、分层的模型,其可以捕获到产品线的共性和特异性。问题空间(Problem Space)中的每个相关特性都会成为特征模型中的一个特征。这意味着,特征是系统中与利益攸关者(Stakeholder)相关特性。根据利益攸关者的利益不同,一个特征可以是一个需求、一个技术功能、一个功能组,或一个非功能(质量)特征。坏消息是:特征模型是一个用于描述共性和特异性的抽象概念。需要为每条产品线单独决定特征究竟是什么。不过,特征的定义一般是与它们的实现是解耦的,即与解空间(Solution Space)解耦。

例如,如果汽车颜色是一个特征,其有个不错的名字“深海蓝”。这个名字永远不会提到特定的油漆供应商的订单号。这是因为特定的供应商与其订单号是存在于解空间的。对软件来说也是一样的:特征是映射到单个功能还是分布在数十个组件中,是无关紧要的。如果利益攸关者认为它是一个相干的属性并且其代表了特异性,那么它就是一个特征。

特征树和变形类型

特征模型有一个树状结构:特征构成树的节点,可变性由节点之间的弧及其通过变形类型分到的组中表示(译者注:特征是节点,特征之间的关系是边。特征的父节点可以有多个子节点,每个特征都具有变形类型并且会按照变形特征分组)。目前在大多数特征建模方法中,有四种的变形类型可供选择。“强制”(Mandatory)、“可行”(Optional)、“多选一”(Alternative)、“或”(Or)。每个特征可以有多个具有不同变形类型的特征组作为子组(假设某个变形类型子组中特征总数为n)。在进行某一个变体的特征选择时,规则为:当一个父特征在该变体中被选择时,其子特征中:

???? 所有“强制”类的子特征必须被包含(n from n)

???? 选择任何数量的“可选”类的子特征(m from n,0≤m≤n)

???? 必须从“多选一”类的子特征中准确地选择一个特征(1 from n)

???? 至少有1个类型为“或”类的子特征被选择(m from n,m≥1)

显然,所有这些术语(例如可选或多选一)都被映射到一个可以被有效选择的特征组的上下限上(译者注:可选,0≤m≤n,即上限n,下限0)。上述这四个特殊的例子是较常用的变形类型。一般来说,即使在没有看到形式化的定义时,也可以通过这些词的概念正确的理解(除了“或”,因为人们通常认为它与“多选一”是同义的)。

当层级结构和变形类型还不够的时候

???? 跨树约束

大多数方法都允许您指定附加的约束,譬如特征之间的互斥关系(“正式衬衫”与“粉红色”相冲突)以及需要关系(“正式衬衫”需要“白色”或“黑色”)。如果使用了多个特征模型,这些约束就会横跨树的不同层级,甚至跨树。根据不同的方法和工具,表达这种约束的语言可以是简单的专用语言或普遍可用的语言,如XPath或OCL。这些语言具有不同的表达能力和复杂性。但是,我们应该少用这些约束语言,这是因为约束条件越多,用户就越难可视化和理解模型中的关系。

???? 复用特征子树

一些方法有特征基数的概念,其允许表达特征模型子树的多重性规则。例如,如果您有一个系统,其连接多个可配置的传感器,那么不需要为每个传感器创建一个(结构相同的)特征子树,只需要创建一个特征子树,并给它一个类似于(1-3)的基数声明来表示需要传感器子树至少配置一个,最多配置三个。

特征模型的图形化表达

对于特征模型的图形符号,目前还没有一个统一的标准,因此有许多不同的符号,在文献中,较常用的是原始FODA方法的图形符号的扩展形式。但是在标准文本工具和图形库中使用这种符号时会导致困难,这就是为什么我们中的一些人更喜欢更简单的符号 - 就像我们在pure::variants中使用方式的原因。

什么是好的特征模型?

通过上面给出的特征定义(比较抽象),几乎所有的东西都可以作为一个特征。从某种意义上说,这确实是事实。接下来的问题是:什么是特征?如何才能知道哪些要被选入特征模型?

比较重要的行动是要明确特征模型是针对利益攸关者而制定的。如果特征被终端用户用来定义他们所拥有的独特的产品变体,显然特征必须是容易理解的。一个很好的例子是在大多数汽车制造商在其网站上提供的汽车配置。除了特征名称之外,特征模型的结构也应该遵循终端用户的思路。虽然听起来很简单,但创建这样一个结构实际上是困难的。或者严格的说,这是不可能的。

???? 特征模型结构

创建一个结构较完美的特征模型之所以如此困难,原因在于很多情况下,有不同的方法来对系统进行配置。根据您的用户类型,您可能要寻找一些小的、专业的功能,或者您可能要做一些一般性的决定,例如发动机的类型和尺寸,汽车的颜色等等。虽然一个特征模型确实允许自由导航(它没有规定选择特征的具体顺序),但更一般性的决定是倾向于更接近模型树的根部的,这反过来又会引导用户深入到树的这个部分或那个部分。

???? 一个模型或几个模型

如果有不同的利益攸关者有不同的“语言”怎么办?我们是应该建立多个特征模型(为每一组利益攸关者)还是只为重要的利益攸关者群体建立一个模型(谁是重要的呢)?同样,针对这个问题给出一个明确的答案也是近乎不可能的。您使用的依赖关系越少,则模型越简单越好。对于许多产品线的应用,使用一个特征模型是一个很好的选择。然而,如果产品线的一部分本身形成了另一个独立的产品线,那么多个特征模型几乎是不可避免的。我们可以想象一下,一个在可配置的中间件上运行的应用。中间件的可变性必须使用应用开发者的语言来捕捉,并且应该对所有使用改中间件的应用使用相同的特征模型。在这种情况下,应用领域的变量与中间件领域的变量之间必须有一个映射关系。创建这种映射是应用产品线工程师的责任。在某些情况下,譬如中间件只在一个特定的配置中使用,因此可能没有映射;在其他情况下,映射可能是非常复杂的。例如,如果应用层提供了安全应用操作和非安全应用操作的选择,那么只要选择了“安全应用操作”特征,中间件中的某些功能(如加密支持、基于证书的认证和SSL支持)就必须被启用--除非该应用是为移动电话设计的,因为它不支持基于证书的认证。

???? 颗粒度

另一个需要考虑的方面是特征的颗粒度。如果特征的颗粒度太粗,有效配置的单个实例可能无法足够详细地描述系统,进而无法发挥预期作用;如果特征的粒度太细,那么特征的数量就会增加,管理和维护这些特征的复杂性和工作量也会增加。再一次地,我们考虑一下背景信息:自动产品配置比产品路线图规划和范围需要更详细的信息,同时也需要记得,后续增加细节比删除细节更容易。

???? 迭代的方法

根据我的经验,如果要获得一个好的特征模型,那么较简单的方法就是创建一个,并尝试用它来描述产品线中已知的/设想的产品变体。在大多数情况下,我们很快就会发现现有的一些决定并不是很明智:有时所选择的特征并不能很好地描述可变性(细节水平),或者树状结构是错误的,例如,建模中特征B是特征A的子特征,但是事实上,您也希望能够只选择特征B而不是特征A。

不要怕,这些错误有助于我们在下一轮创建更好的特征模型。在大多数情况下,有问题的是结构而不是特征本身。关于特征和特征模型,还可以写很多,此时我们按下不表,在后续文章中将会介绍。

特征模型的局限性

还有一件事要提:虽然我确实认为特征模型是描述产品线可变性的一种比较重要的技术,但在某些情况下,仅仅靠特征模型是不够的。甚至在某些情况下,特征模型根本不是可行的方法!如果可变性是组合类型,即有许多基本元素(想想用于建造房屋的砖石)可以按照一些正式规则进行组合。这些规则允许使用潜在的无限数量的砖块。那么在这种情况下,特征模型根本不允许您有效地描述这一点。然而,当谈到描述砖石的潜在属性(颜色、砖材料等)时,特征模型就非常适合用于描述可变性。这些只是为了表明:在很多情况下,特征模型只是可行的方法。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏

    评论

    相关推荐

    Llama 3 模型训练技巧

    噪声和异常值,确保数据的一致性和准确性。 特征工程 :提取有助于模型学习的特征,可能包括特征选择、特征转换和
    的头像 发表于 10-27 14:24 222次阅读

    特征工程实施步骤

    1.为什么特征工程很重要?对于不同的数据科学家,特征工程可能呈现不同的意义。对于一些数据科学家,特征工程是我们如何缩减用于监督模型特征(例
    的头像 发表于 10-23 08:07 173次阅读
    <b class='flag-5'>特征</b>工程实施步骤

    音频特征描述

    电子发烧友网站提供《音频特征描述.pdf》资料免费下载
    发表于 10-10 11:37 0次下载
    音频<b class='flag-5'>特征</b>描述

    浅谈PLC编程软件的特征

    优秀的PLC编程软件通常具备以下特征
    的头像 发表于 09-20 14:59 243次阅读

    基本理想电路元件的三个特征是什么

    基本理想电路元件是构成电路的基本单元,它们具有三个基本特征:电压-电流关系、能量转换和电路参数。以下是对这三个特征的分析: 电压-电流关系 理想电路元件的电压-电流关系是其最基本的特征之一。这种关系
    的头像 发表于 08-25 09:38 904次阅读

    安宝特产品 3D Evolution : 基于特征实现无损CAD格式转换

    安宝特3D Evolution具有强大的3D CAD模型转换功能,可在保留模型特征参数、注释、约束的前提下,完成不同格式3D CAD模型的无损转换
    的头像 发表于 08-06 17:26 289次阅读
    安宝特产品   3D Evolution : 基于<b class='flag-5'>特征</b>实现无损CAD格式转换

    机器学习中的数据预处理与特征工程

    在机器学习的整个流程中,数据预处理与特征工程是两个至关重要的步骤。它们直接决定了模型的输入质量,进而影响模型的训练效果和泛化能力。本文将从数据预处理和特征工程的基本概念出发,详细探讨这
    的头像 发表于 07-09 15:57 286次阅读

    lp模型的要素、组成部分及特征

    线性规划(Linear Programming,简称LP)是一种数学规划方法,用于解决资源分配、生产计划、运输问题等实际问题。线性规划模型由目标函数、约束条件和变量组成,具有线性、有界、可行解等特征
    的头像 发表于 07-09 10:10 655次阅读

    人脸检测的五种方法各有什么特征和优缺点

    人脸检测是计算机视觉领域的一个重要研究方向,主要用于识别和定位图像中的人脸。以下是五种常见的人脸检测方法及其特征和优缺点的介绍: 基于肤色的方法 特征:基于肤色的方法主要利用人脸肤色与背景肤色的差异
    的头像 发表于 07-03 14:47 630次阅读

    特征工程与数据预处理全解析:基础技术和代码示例

    在机器学习和数据科学的世界里,数据的质量是建模成功与否的关键所在。这就是特征工程和数据预处理发挥作用的地方。本文总结的这些关键步骤可以显著提高模型的性能,获得更准确的预测,我们将深入研究处理异常
    的头像 发表于 06-26 08:28 422次阅读
    <b class='flag-5'>特征</b>工程与数据预处理全解析:基础技术和代码示例

    通过强化学习策略进行特征选择

    来源:DeepHubIMBA特征选择是构建机器学习模型过程中的决定性步骤。为模型和我们想要完成的任务选择好的特征,可以提高性能。如果我们处理的是高维数据集,那么选择
    的头像 发表于 06-05 08:27 317次阅读
    通过强化学习策略进行<b class='flag-5'>特征</b>选择

    如何提取、匹配图像特征

    我们习惯从图像中选取比较有代表性的点,然后,在此基础上,讨论相机位姿估计问题,以及这些点的定位问题。 在经典 SLAM 模型中,把它们称为路标,而在视觉 SLAM 中,路标则是指图像特征(Features)。
    的头像 发表于 04-19 11:41 604次阅读

    秒懂鸿蒙OS 生物特征识别

    鸿蒙OS 生物特征识别概述 提供生物特征识别认证能力,即基于人体固有的生理特征和行为特征来识别用户身份,供第三方应用调用,可应用于设备解锁、支付、应用登录等身份认证场景。 当前生物
    的头像 发表于 01-29 16:26 3623次阅读

    SENT总线的特征和优势

    SENT总线的特征和优势  SENT总线是一种常用于计算机和电子设备之间的通信接口。它具有许多特征和优势,使得它在现代电子领域中得到广泛应用。 首先,SENT总线是一种数字串行通信协议,它通过串行
    的头像 发表于 12-07 11:15 1147次阅读

    基于RGM的鲁棒且通用的特征匹配

    在一对图像中寻找匹配的像素是具有各种应用的基本计算机视觉任务。由于光流估计和局部特征匹配等不同任务的特定要求,以前的工作主要分为稠密匹配和稀疏特征匹配,侧重于特定的体系结构和特定任务的数据集,这可能在一定程度上阻碍了特定模型的泛
    的头像 发表于 11-27 11:32 509次阅读
    基于RGM的鲁棒且通用的<b class='flag-5'>特征</b>匹配