4. 一致性工程核心概念
在SysML模型质量与一致性工程中,“一致性”并不是一个单一指标,而是一组从表层到深层、从局部到全局、从静态到动态的约束集合。如果只用一个笼统的“模型一致”来判断,往往会出现“图都能打开、评审也通过,但模型无法集成、仿真结果不可信”的情况。因此,需要把一致性拆解为六个可检查、可度量的维度:语法一致性、语义一致性、视图一致性、跨模型一致性、时间一致性和版本一致性。
一、六个维度的内涵
语法一致性关注模型是否符合SysML/UML元模型的构造规则。它回答的是“这个模型在语言层面是否合法”。典型检查点包括:每个关联两端是否都有明确类型;端口的方向、类型与所属模块是否匹配;状态机中的转移是否有可触发的触发器;需求是否具备唯一标识。语法不一致通常可由建模工具直接报错,例如“Association end must have a type”。
语义一致性关注模型表达的含义是否自洽。语法合法不等于语义正确。例如,一个模块的端口类型是“电压”,但通过连接器连到了声明为“流量”的端口,语法上可能通过,语义上却矛盾。再如,活动图中一个对象节点既被声明为输入又被声明为输出,且没有中间转换,就构成语义冲突。语义一致性需要结合领域规则、类型系统和约束表达式来检查。
视图一致性关注同一模型元素在不同视图中的表达是否一致。SysML允许同一元素出现在需求图、块定义图、内部块图、活动图、状态机图和参数图中。若某模块在块定义图中名为“Controller”,在内部块图中却写成“Ctrl”,或某需求在需求图中标记为“已实现”,在追溯矩阵中却无实现关系,就属于视图不一致。视图一致性强调“同一事实,多种表达,结论一致”。
跨模型一致性关注多个模型、多个模型库或多个工程专业之间接口与引用的匹配。例如系统模型中的“电源模块”接口与电气模型中的“供电单元”接口在名称、类型、方向、单位上必须对应;软件模型中的信号名与硬件模型中的端口名必须可映射。跨模型一致性是系统集成阶段最容易暴露问题的维度。
时间一致性关注模型中的时间语义是否统一。SysML中的时间约束、持续时间、时钟周期、超时和截止时间必须使用一致的时基和单位。例如,状态机中“加热”状态持续时间为“5”,若一处解释为秒、另一处解释为毫秒,就会导致仿真结果偏差。时间一致性还要求事件顺序、时间约束和调度策略之间不产生矛盾。
版本一致性关注模型元素与其版本、基线、变更记录之间的对应关系。当需求版本从V1.2升级到V1.3时,相关块、接口、测试用例和参数是否同步更新;当某模块被替换时,引用它的所有模型是否指向新版本。版本不一致往往表现为“旧接口调用新模块”或“需求已变更但验证用例未更新”。
二、六个维度之间的关系
这六个维度不是并列孤立的,而是存在层次和依赖关系。语法一致性是基础层,语义一致性建立在语法合法之上;视图一致性和跨模型一致性是语义一致性在不同范围和不同视角下的延伸;时间一致性是语义一致性在时间维度上的专门化;版本一致性则贯穿所有维度,是其他一致性在时间轴上的保障。
可以用一个简单的判断顺序来理解:先看语法是否合法,再看语义是否自洽;在语义自洽的前提下,检查同一模型内不同视图是否一致;再检查不同模型之间是否一致;然后检查时间语义是否统一;最后确认所有元素是否处于正确的版本和基线。这个顺序不是绝对的,但符合从局部到整体、从静态到动态、从当前到历史的认知规律。
三、实际检查中的关键操作
在工程实践中,六个维度需要落到具体的检查动作上。语法一致性通常由建模工具内置校验器完成,例如在MagicDraw或Rhapsody中执行“Validate Model”,输出错误和警告列表。语义一致性则需要自定义约束,例如用OCL或SysML参数图定义“电压端口只能连接电压端口”的规则,再通过约束检查器批量验证。
视图一致性可以通过“元素引用一致性检查”实现:遍历模型中每个元素在所有图中的出现位置,比较其名称、类型、端口和关系是否一致。跨模型一致性需要建立接口映射表,例如系统模型中的“PowerPort”与电气模型中的“SupplyInterface”建立映射,并检查方向、单位、数据类型是否匹配。时间一致性需要统一时间单位库,例如在模型库中定义“ms”“s”“min”三个单位,并规定所有时间约束必须引用单位库中的单位。版本一致性则依赖配置管理工具,例如将模型元素与需求版本、基线标签关联,并在变更时触发影响分析。
四、一致性检查报告示例
为了把六个维度落到可执行的交付物,下面给出一份简化的一致性检查报告模板。字段包括检查维度、检查对象、检查规则、检查结果和关联版本。该模板可直接用于模型评审或质量门禁。
| 检查维度 | 检查对象 | 检查规则 | 结果 | 关联版本 |
|---|---|---|---|---|
| 语法一致性 | 所有关联 | 关联两端必须有类型 | 通过 | V2.1 |
| 语义一致性 | 端口连接 | 端口类型必须匹配 | 1处失败 | V2.1 |
| 视图一致性 | pitchRate端口 | 名称与单位在各图中一致 | 1处失败 | V2.1 |
| 跨模型一致性 | 电源接口 | 单位与方向匹配 | 1处失败 | V2.1 |
| 时间一致性 | 控制周期 | 时间单位统一为ms | 1处失败 | V2.1 |
| 版本一致性 | 需求追溯 | 需求V2.1对应测试用例已更新 | 通过 | V2.1 |
从这张表可以看出,语法和版本一致性通过,但语义、视图、跨模型和时间一致性均存在失败项。这说明模型“能打开、能保存”并不等于“可集成、可仿真”。一致性工程的核心价值,正是把这些隐藏在不同视图、不同模型、不同时间点和不同版本中的矛盾提前暴露出来,并在进入集成和验证之前完成修复。
最后需要强调,六个维度之间不是简单的先后关系,而是相互支撑的约束网络。语法一致性提供形式基础,语义一致性提供含义基础,视图一致性和跨模型一致性提供表达与集成基础,时间一致性提供动态行为基础,版本一致性提供历史可追溯基础。只有六个维度同时受控,SysML模型才具备作为系统权威数据源的质量条件。