2. SysML语言基础回顾与质量视角

SysML 建立在 UML 之上,但它并不是“换一套图形的 UML”。在质量工程视角下,SysML 的每个图元都同时承担三重角色:语义载体(它到底描述系统哪一类事实)、语法约束对象(哪些连接、命名、类型是合法的)、以及质量风险点(一旦误用,会在哪一层引入不一致)。本节按“块—端口—流—活动—状态机—需求—参数”这条主线,把语义、约束与质量影响串成一条可检查的链条。

一、块(Block):结构语义的根,也是质量问题的根

块是 SysML 中描述系统、子系统、组件、外部实体的基本结构单元,等价于 UML 的 Class,但语义被扩展为可拥有值属性、部件属性、端口、约束和操作。块的语义核心是“类型—实例”二分:块是类型,其部件属性(part property)描述组合关系,引用属性(reference property)描述非拥有的关联。质量上最常见的错误是把“引用”写成“组合”,导致删除父块时误删被共享的子系统。

语法约束方面:块名在同一命名空间内必须唯一;部件属性的类型必须是块或值类型;组合关系(黑菱形)要求整体端多重度通常为 1,且部件生命周期受整体控制。质量检查时,应重点核对多重度与所有权是否与物理/逻辑事实一致。例如一个“飞行控制器”块包含 2 个“IMU”部件,若写成 imu: IMU [0..1],则与冗余设计意图矛盾,属于语义级缺陷,而非绘图错误。

二、端口与流:接口语义的精确表达

端口是块与外部交互的接入点。SysML 区分代理端口(proxy port)与完整端口(full port):代理端口把外部请求转发给内部部件,本身不实现行为;完整端口则直接由所属块实现行为。流端口(flow port)进一步区分输入、输出、双向,并规定流经它的项目类型(item flow)。

质量风险集中在“端口方向与流方向不一致”。例如一个“电源分配单元”的输入端口被声明为 out,而它实际接收来自电池的电流,这种方向错误在早期不会被工具报错,却会在集成阶段导致接口匹配失败。语法约束要求:流端口的类型必须与所连端口的类型兼容;原子流(atomic flow)与复合流(composite flow)不能混用在同一端口上。检查时可用“端口方向 × 流项目类型 × 连接对端”三列做一致性核对。

SysML 核心图元语义链与质量检查点 结构 → 接口 → 行为 → 状态 → 需求 → 参数:每一层都有对应的语法约束与质量风险 块 Block 类型 / 实例 · 组合 vs 引用 多重度 · 所有权 风险:引用误写为组合 端口 Port 代理 / 完整 · 输入/输出/双向 类型兼容 · 方向一致 风险:方向与流不匹配 流 Flow 项目流 · 原子/复合 流规格 · 速率/容量 风险:流类型与端口不符 活动 Activity 动作 · 控制流/对象流 令牌 · 分叉/汇合 风险:令牌不平衡 状态机 State 状态 · 转移 · 事件/守卫 进入/退出/do 行为 风险:不可达状态/死锁 需求 Requirement 需求文本 · id · 满足/验证 派生/包含/细化 风险:满足关系悬空 参数图 Parametric 约束属性 · 绑定连接器 单位 · 量纲 · 方程 风险:单位不一致 质量检查主线:命名唯一性 → 类型兼容性 → 方向一致性 → 令牌平衡 → 状态可达性 → 需求可追溯 → 单位量纲统一

三、活动图:行为语义与令牌流

活动图描述的是“行为如何一步步展开”,其语义基础是令牌(token)在动作节点之间的流动。控制流传递控制令牌,对象流传递对象令牌。质量上最典型的问题是令牌不平衡:一个分叉(fork)分出两条路径,但汇合(join)只等待其中一条,导致另一条路径的令牌被丢弃或阻塞。语法约束要求:join 节点的入边数量必须与 fork 的出边数量在语义上匹配;决策节点(decision)的守卫条件应互斥且完备。

在工程实践中,可以用“每个动作节点的输入令牌数 = 输出令牌数”作为快速检查规则。例如“采集传感器数据 → 滤波 → 特征提取 → 分类”这条链,若在“滤波”后同时输出“滤波结果”和“质量标志”两条对象流,则后续“分类”必须同时接收两者,否则质量标志会悬空。

四、状态机:状态、转移与可达性

状态机描述对象生命周期中的状态与转移。语义上,状态可以嵌套,转移由事件 [守卫] / 动作触发。质量风险主要有三类:不可达状态(没有任何入转移)、死锁状态(没有出转移且非终止状态)、守卫条件重叠(同一事件下多个转移同时可触发,导致非确定性)。

语法约束要求:初始状态有且仅有一个;转移的源和目标必须存在;复合状态内的子状态机必须完整。检查时可以从初始状态做一次可达性遍历,标记所有未被访问的状态。例如一个“通信链路”状态机包含“空闲、同步、传输、错误恢复”四个状态,若“错误恢复”没有回到“空闲”的转移,则系统在错误后无法恢复,这是典型的质量缺陷。

五、需求图:可追溯性的语法基础

需求图的核心语义是需求之间的关系:包含(containment)、派生(derive)、满足(satisfy)、验证(verify)、细化(refine)。其中“满足”连接需求与设计元素,“验证”连接需求与测试用例。质量上最常见的问题是满足关系悬空:需求被声明为“已满足”,但指向的设计元素已被删除或重命名,导致追溯链断裂。

语法约束要求:需求必须有唯一 id;满足关系的两端必须分别是需求和块/活动等设计元素;验证关系必须指向测试用例。检查时可用“需求 id → 满足元素 → 验证用例”三列做追溯矩阵,任何一列为空都视为质量缺口。

六、参数图:约束、单位与量纲一致性

参数图把工程方程绑定到块属性上,其语义核心是约束属性(constraint property)与绑定连接器(binding connector)。质量风险集中在单位与量纲不一致:例如约束中速度用 m/s,而绑定属性用 km/h,数值上看似合理,实际结果偏差 3.6 倍。语法约束要求:绑定连接器两端的值属性类型必须兼容;约束块中的参数必须有明确的类型和单位。

在建模实践中,建议为每个值属性显式标注单位(如 value {unit = 'm/s'}),并在参数图中使用带单位的约束表达式。检查时可用“量纲分析”快速判断:等式两边量纲必须一致,否则即使数值计算通过,模型也是语义错误的。

质量检查速查:块看所有权与多重度;端口看方向与类型兼容;流看项目类型与速率;活动看令牌平衡;状态机看可达性与守卫互斥;需求看追溯链完整;参数图看单位与量纲。七类图元各自对应一类可自动或半自动检查的语法约束,把它们串起来就是 SysML 模型质量的第一道防线。

从质量工程角度看,SysML 图元的价值不在于“画得像”,而在于“语义可验证”。块的所有权、端口的方向、流的类型、活动的令牌、状态的转移、需求的追溯、参数的单位,每一项都有明确的语法约束和对应的检查方法。把这些约束内化为建模习惯,才能在后续的一致性检查、仿真验证和需求追溯中减少返工。