SysML v2建模元素解析
随着MBSE在国内各行业落地实施,越来越多的领域开展应用系统建模语言建立系统模型、扩展特定域Profile以及系统模型与各专业模型集成等实践。系统建模语言为了适应MBSE需要也在不断更新版本升级,SysML v2版本相较v1.x,多处有了显著的变化,可能会对语言使用者工作产生影响。本文尝试对SysML v2中的建模元素概念进行分析,与SysML学习使用者一起交流学习 。
SysML v2预计什么时候可以正式发布,目前还无从得知,其相关里程碑事件如下表所示:
表1 SysML V2里程碑事件
2017年12月 | 发布 SysML v2 RFP |
2018年6月 | 发布 SysML v2 API&Services RFP |
2020年8月 | 首次提交 |
2021年2月 | 利益相关方评审 |
2021年8月 | 修改后的提交文件 |
2021年11月 | 第二次修订提交(OMG评估启动) |
2022年第二季度 | 最终提交(日期待定) |
2023年第二季度 | 最终规范(待OMG批准) |
01 SysML v2 目标和实现途径
SysML v2 的目标是为提高 MBSE 的采用率和有效性。SysML v1.x由UML扩展来,存在着过于抽象、术语难理解、同义概念不一致、支持仿真分析能力不足等问题,通过SYSML v2的改进,在以下六方面有了很大的改善。
1)提高语言的精确性和表达能力
SysML V2除了图形符号表示,也同步支持文本表示,既可以是图形语言,也可以是代码语言,这就使得模型有了更精确规范的描述。
这一点还体现在约束、表达式和约束需求的定义,例如在 v1.x中,约束不指定内置语言,或者说是文本的,只是描述性的表达,在SysML v2中,表达式有了正式的运算符和数量单位库,对数值运算的支持更准确。
2)增进语言概念之间的一致性和集成
这一点是系统建模语言发展必有的过程,SysML来源于UML,UML语言的出现是在类图的基础上集成了当时已有的各种传统系统建模语言。如Sequence diagram是源于 1980 年代,西门子、爱立信和阿尔卡特等大型电信企业中普遍使用的消息序列图 (MSC) ,状态机图历史更悠久,起源于1940年代的摩尔机和米勒机,UML语言将这些图中的元素互相映射后,会出现很多概念的含义很类似但是用的是不同的名称,SysML v1.x已经有所集成,SysML v2有了进一步的一致。
3)提升了与其他工程模型和工具的互操作性
MBSE首先离不开系统模型,但只有系统模型还不够,还要用系统模型集成其他的专业模型,一起构建所谓的“唯一真实来源”,支持数字转型。SysML v2提高了与其他工程模型的互操作性促进数据集成是MBSE发展的趋势。
4)提高了模型开发人员和用户的可用性
这一点感觉有所提高,但是提高的并不多,SysML v2抽象概念还是很多,这是系统工程的特点所决定的。系统工程师最重要的工作就是抽象,是和专业工程师不同的思维方式,语言里面的建模元素只是支持抽象的工具,SysML v2将很多的元素名称换成了更具体的名称,如Block对应到Part defination,但是Part和Part defination的这些关系并没有变,很多概念只是换了个名称并没有减少,学习还需要系统工程师投入一定的努力。
5)更好地支持特定领域应用程序的可扩展性
在v1.x中,特定域扩展是通过Profile实现的,Stereotype(原型)又是通过扩展元类和专门化已有的原型实现,要熟练掌握特定域扩展,至少要了解元类和引用元模型,再深入了解可能还需要了解UML语言规范,造成这个现状的是由于语言一层又一层的扩展,很多已经不用的概念去不掉,新的概念又不能和已有的概念冲突。SysML v2的特定领域扩展由已有库内语言元素的专门化实现,这是最简单的方式,其实应用SysML v1.x定义stereotype和profile的时候,很多也是只用到了专门化已有原型,很少去用专业的元类扩展。
6)支持v1.x用户和实现人员的迁移路径
对于SysML v1.x的使用者,会发现原有的建模元素和SysML v2新的元素基本都存在对应关系,很容易学习应用。对于SysML建模工具开发人员,SysML v2元模型与UML4SysML之间存在映射关系,有利于工具更新。
图1 术语映射
02 SysML v2语言功能
在新的支持功能描述中,强调了Analysis和Verification,这两点在后面的介绍中,可以发现内容并不多,也没有太深入。Analysis case和Verification case比较简单。就像v1.x从UML添加了需求图和参数图,需求图和参数图这两个图也是相对简单的,Analysis case和Verification case现在也比较简单。
图2 SysML V2语言功能
系统建模语言的核心在结构和行为的集成,也就是系统形式和功能的集成,这是应该关注的。需求、分析、验证、视点等是为了支持系统工程领域扩展的功能,MBSE基础的地方还是系统架构。
1)Package and Element Names/包与命名元素
这里的概念添加了递归导入以及过滤器的应用,在基本应用上,和v1.x比较变化不多,应用起来感觉不到明显不同。
2) Definition Elements 定义元素
定义元素有Part Definition、Attribute definition、Port definition、Item definition、Action definition、State definition,既然是定义,也就是原来在BDD/块定义图上出现的那些元素,换了名称。
如Attribute definition对应原来的Value type,Action definition对应原来的Activity。
涉及到定义,有几个概念总让人混淆,就是attribute、property、feature和characteristic、在SysML v2里,attribute限制给了值的定义,这一点点减少了概念模糊,property在v1.x中指的structure feature/结构特性,v2也尽量的不出现,特性出现时仍然一致的称为feature,也就是把property和feature统一到了feature,一致了概念。
说到定义,大部分初学者会想到字典或词典里对一个名词的描述性的文本定义,但是在语言中,定义是一种结构化规范化的定义。定义definition就是特性feature的集合,就像一个人的简历,每个要填的名字、性别、学历、技能、经验就是一个个的feature,这些feature的集合就是对一个人的定义。v1.x的BDD块定义图就是定义块的图,在其中定义类型/TYPE,在SysML v2中变成了相应的part definition等定义元素。
SYSML V2中的定义可以被专门化,这和v1.x中的Block用法一致。
3)Usage Elements用法元素
用法元素由默认的定义元素定义,Usage Elements defined By Default Definition Elements,与usage同级别的一个词是role,将定义的元素放到了一定的context/背景或上下文中,就变成了用法元素。
Defined by is a kind of specialization,被定义是一种专门化,这一点和v1.x直觉上有些区别,v1.x的专门化一般指增加了新的特性,从definition到usage并没有增加什么新的特性,既然不是这种的专门化,那就是其他类型的专门化,也就是SysML v2很强调的redefine和subset,并没有增加新的属性,只是放到具体背景下限制缩小了特性的范围,在这个角度上来说,被定义是一种专门化,或者具体说是子集化。
除了定义元素之间可以有泛化/专门化关系,用法元素之间也可以有泛化/专门化,可以理解为定义是一个大的集合,专门化到用法元素,然后用法元素之间再专门化,是在不断地缩小这个集合,但usage和definition还都是集合,不是individual,不是instance和object,如下图所示,part是有多重性的。
4) Part Decomposition 部分分解
分解有两种,一种是定义的分解,一种是用法的分解。Part definition之间可以建立如同bdd那样的块分解图,块定义图就是定义图,block可以对应到Part definition。定义的分解是一种黑盒的形式,并不是为了显示内部的结构。定义是具体的抽象,定义的东西都是虚的。
《part》之间可以建立分解图,这里可以理解为在具体的环境背景下的块定义图,具体环境下,part有了具体的角色,是角色之间的分解。
A part can be a subset of another part,在下图中可以看到subset是用的泛化的符号,也在强调子集化是一种泛化。
Part可以引用它所存储的Item,下面的例子里油箱引用汽油,这点和v1.x一样,只不过v1.x中fuel用Block来定义,这里用了独立的定义名称Item def。
5) Part Interconnection 部分连接
Parts部分之间可以通过端口连接,或者不通过端口连接。不通过端口连接这种连接称为connection,由connection definition定义,connection definition对应关联块;通过端口port连接,这种连接称为interface,interface 由interface definition定义,对应接口块。interface definition是一种的connection definition。
6) Variability可变性
《variant》用法很像原来的构造型,用来定义嵌套的一个part,例如一个手机有不同的红色黄色蓝色手机壳,形成不同型号的手机,这些各种颜色的手机壳就既是嵌套的part,也是variant,这时候手机壳就是variation point。当然手机可以有其他的可变点,如内存、尺寸等。
7) Actions
Action由action definitions定义,action definitions对应activity/活动,
Action在SysML v2中的用法,是很有亮点的一个地方。活动是行为图的基础,在SysML v2里,序列图和状态机图加深了这一点,更进一步的是,action将operation进行了统一,这也就实现了结构图上和行为图上描述功能的概念的一致。
8)Action Flow
Action Flow包含控制流和输入/输出流,这和v1.x的活动图一致,Flow是一种将item从源输出传输到目标输入的connection,这里注意的是flow不是item,就像v1.x中对象流不等于对象。SYSML v2提到succession flow,succession对应的是v1.x的non-streaming。
与流相关的Start action、Done action、Decision node、Merge node、Fork node、Join node等对应活动图中的控制节点,用法没有变化。
9) state 状态
States are defined by state definitions,State definition对应Statemachine/状态机,SYSML v2中去掉了region,也不再用orthogonal/正交这个词,改为了容易理解的concurrent states/并行状态。
在PART的feature中,也去掉了main behavior/classifier behavior的概念,直接用exhibit states,之前需要先将块拥有behavior,再把behavior指定为Statemachine,SysML v2用法简洁了很多,这里state应用的时候指的应该还是原来的分类器行为。
10) Interactions 交互
下面这张图上出现了一个有趣的地方,上面是perform action,下面是一个序列图,action和interaction混淆到了一起,这里的混淆其实是一种一致化。
v1.x中活动图和序列图是功能的两种表示法,他们其实都包含结构和功能的分解,v1.x中的message和operation这两个元素以及action和activation这两个元素也是对应的。在v1.x中,behavior常用的有三种,基于流的活动、基于消息的交互,基于事件的状态机。在SysML v2中,将活动和交互统一为基于功能的行为,与状态机并列成为了两种主要的behavior,这里可以看出SysML v2中交互图也基于action进行些一致化的尝试,action这个概念更多的体现了function/功能的含义。
11) Individuals 个体
Individual由individual definition定义,Individual是一种usage,individual definition含义上还是有集合的含义,只不过这个集合只有一个成员。
如上图中,Vehicle 有值属性 Vin/识别码,《individual def》Vehicle-1就是识别码vin=1的那辆车。这个individual definition,可以在不同的时间段赋值给不同的车,例如上午是A车,下午是B车,但A车和B车是不同的individual。
12) Timeslices & Snaphots 时间切片和快照
对应v1.x,Timeslices 有duration的含义,Snaphots有observation的含义,但在SysML v2中,切片和快照的关注点不是时间,而是时间约束下individual所具有的属性,描述关注的特性随时间的变化,切片适合描述离散量,快照适合描述连续量。Timeslices和Snaphots更确切的理解是将个体按照时间进行了分解,不同时间下的个体是不同的个体。
13) Expressions and Calculations 表达式和计算
Expression用来计算一个结果,拥有数学函数库,可以支持sum、max以及向量和张量的运算,提高了语言的精确性。在V1.X中,是不内置表达式语言的,一些建模软件的表达式是文本形式的。SYSML V2支持表达式的精确表达对于系统模型和分析模型的集成很有意义。
Calculations definition定义的是一个计算式,包含参数、表达式和返回结果,这和v1.x的约束很像,例如还表示为可重用计算式和不可重用计算式。SYSML v2的约束有了新的和v1.x不同的含义。
14) Quantities & Units 数量和单位
Quantity是一个attribute,是一个值,Quantity由Quantity kind定义,Quantity kind是一种 attributes definition,是一种值属性。
Units与Quantity kind一致,Units与值value连在一起。
在上图中m是Quantity/数量,MassValue是Quantity kind/数量种类,25是value/值,kg是unit/单位。
内置的数量和单位库有:International System of Quantities (ISQ)、International System of Units (SI)、US Customary Units (USCustomaryUnits)。
15) Constraints 约束
Constraint Expression在SysML v2中是布尔表达式,包含约束操作符/Constraint operators ,如(==), (>), (>=), (<), (<=), (!=),以及布尔操作符,如and (&), or (|), xor (^), not (!)。如果模型是有效的,那么需要assert/断言所包含的约束为真。
Constraint Definition为可以重用的约束表达式,约束使用时会跟随一个assert关键字。
在表示为定义的特性时,assert放在约束表达式前面,
在表示为单独的约束用法时,用《assert constraint》关键字。
约束参数与值的绑定用Bind 连接,如同v1.x的参数图。
16) Requirements 需求
在v1.x中,需求有ID和text两个属性,其实还是基于文本的。SYSML v2中的需求为基于属性的需求,如下图中,需求可以有值属性、约束表达式等,需求定义是一种约束定义,这种表示法在定义系统需求例如性能需求时会更精确有效。
Requirement Specification是一个需求树,包含需求与需求组。《requirement group》与《requirement》之间,类似v1.x的需求之间的包含关系,但不同的是SysML v2不再用包含关系,而是用的组成关系,这样需求树就可以对应结构树,再扩展一点,也可以映射到功能树,需求、功能、结构之间就可以建立分配关系。
17) Use Cases 使用用例
用例在SysML v2中也进行了基于属性的定义,如下图中,用例有objective属性,objective/目标是为一个或多个利益相关者提供价值,用文本表示;用例还有相关的actor属性,即参与用例的actor/参与者,利益相关者通常被建模为actor,但Stakeholder和actor是两个概念,有的Stakeholder不能建模为actor。
Include use case 含义和v1.x一样,只是图示有些变化,由虚线变成了实线。precondition、postcondition和v1.x的含义一样,在SysML v2中进行了结构化的表示。
18)Analysis Cases 分析用例/19)Verification Cases 验证用例
分析用例、权衡分析和验证用例,对分析和验证过程进行了结构化的表示,可以看成使用v1.x进行分析和验证过程在SysML v2中的固化。这两个用例是新的语言元素,只是比较初级地解决了有无的问题,没有太深入。
20) Dependency and Allocation Relationships 依赖与分配关系
依赖与分配含义变化不大,只是依赖还是用的虚线,分配变成了实线。依赖关系是最弱的一类关系,分配关系也是一种依赖关系,不过用实线好像意味着分配关系的联系比普通依赖关系稍微强了一点点,例如在一些使用中分配关系可以近似为泛化关系。
21) Annotations 注释
Annotating Element/注释元素对应v1.x的note图示,annotation也被定义成了一种正式的关系。
annotating elements可以有 Comment、Textual representation (e.g., opaque expression)、Annotating feature(用来添加结构化的metadata) 。
metadata的使用类似tagged value/标记值,元数据描述的是元属性。
22) Element Filters 元素过滤器
元素过滤器在示例中配合递归包导入和元数据使用,导入过滤后的元素。
23)View & Viewpoint 视图和视点
一个视点/viewpoint反映了一个或多个利益相关者对其关心的领域的关注/concern,视图/view指定要呈现给利益相关者以满足其视点的工件。视点和视图的含义没有变化,diagram是一种view,在SysML v2中体现得很好,除了diagram以外,Tabular、Matrix、Tree、document都可以是view。SYSML V2中图的命名和header的表示法都有很大的不同,正式规范发布后可以具体理解。
24) Language Extension 语言扩展
SysML v2提供扩展概念的能力,以应对特定域的概念和术语,方式很简单,用泛化专门化就可以,这也是之前定义stereotype最常用的方式。
03 总结
SysML V2相较V1.X,学习更简单容易,使用更适合系统工程的习惯,有了更精确的表示能力和丰富的表现力,语言扩展更简单灵活,并提高了与其他工具的互操作性,这些都助力于MBSE应用更加深入成熟。
04 附录-获取SysML v2更新的来源
Monthly release repository/每月发布存储库,下载地址如下:
https://github.com/Systems-Modeling/SysML-v2-Release
可以下载的资料有:
规范文档(用于 KerML、SysML和 API)
1)SysML文本符号的培训材料
2)SysML图形符号的培训材料
3)示例模型(文本符号)
4)试点实施
- Jupyter 工具的安装程序
- Eclipse 插件的安装站点
5)通过SysML v2 API Web访问原型存储库
6)对Tom Sawyer 可视化工具的Web访问
对于学习语言学习者来说,现在可以学习的主要是规范相关文档,可下载阅读的文档有;
其中Kernel_Modeling_Language 323页,OMG_Systems_Modeling_Language 1012页,Intro to the SysML v2 Language-Graphical Notation与Intro to the SysML v2 Language-Textual Notation相对简洁,可以大致理解v2的一些概况,可以先阅读这两个PPT,有需要再参考规范深入理解。
Kernel Modeling Language可以简单理解为对应UML语言的UML4SysML,也就是SysML v1.x语言的Reference Metamodel,只不过v1.x是通过扩展与专门化形成了系统工程域的Profile也就是SysML,现在通过Kernel,只是通过专门化里面的建模元素形成了新的SYSML v2元素。