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)不能混用在同一端口上。检查时可用“端口方向 × 流项目类型 × 连接对端”三列做一致性核对。
三、活动图:行为语义与令牌流
活动图描述的是“行为如何一步步展开”,其语义基础是令牌(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 图元的价值不在于“画得像”,而在于“语义可验证”。块的所有权、端口的方向、流的类型、活动的令牌、状态的转移、需求的追溯、参数的单位,每一项都有明确的语法约束和对应的检查方法。把这些约束内化为建模习惯,才能在后续的一致性检查、仿真验证和需求追溯中减少返工。