Ran Wei / SysML v2 系列 / 模块 9
EN
SysML v2 — Ran Wei

模块九:验证与确认

如何在 SysML v2 中建模验证用例、测试案例和确认活动,确保系统满足需求并符合利益相关者期望。

1

V&V 基础概念

验证(Verification)回答"我们是否正确地构建了系统?"——即系统是否满足其规格要求。确认(Validation)回答"我们是否构建了正确的系统?"——即系统是否满足利益相关者的实际需要。SysML v2 为这两者提供了一等公民的语言构件。

生活类比

验证好比检查一栋房子是否按照建筑图纸施工——每面墙的尺寸、材料和位置是否与图纸一致。确认则是询问住户:"这栋房子住着舒服吗?满足你的生活需求吗?"前者对照规格,后者对照真实期望。

SysML v2 中的 V&V 关键字

SysML v2 引入了专门的关键字来建模验证与确认活动:

关键字用途说明
verification def定义验证用例模板描述如何验证一个或多个需求的方法和步骤
verification验证用例实例在具体上下文中执行验证活动
verify声明验证关系将验证用例与被验证的需求关联
subject验证对象指定被测系统或组件
objective验证目标在验证用例中声明需要满足的约束
表 1 — 验证与确认核心关键字
注意

verification defcase def 的一种特化。验证用例本质上是一种带有明确目标(objective)的用例,其执行结果用于判断需求是否被满足。

2

验证用例

验证用例verification def)定义了验证活动的模板——包括被测对象、验证步骤和预期结果。它是 SysML v2 中将需求与测试活动联系起来的核心构件。

定义验证用例

1verification def VerifyMaxSpeed {
2 doc /* 验证系统是否满足最大速度需求 */
3
4 subject vehicle : Vehicle; // 被测对象
5
6 objective {
7 verify requirement MaxSpeedReq; // 验证目标需求
8 }
9
10 action setupTest : PrepareTestTrack; // 步骤一:准备测试环境
11 action runTest : AccelerateToMax; // 步骤二:执行加速测试
12 action measure : RecordSpeed; // 步骤三:记录速度数据
13
14 first setupTest then runTest then measure;
15}

验证用例的组成部分

每个验证用例通常包含以下要素:

提示

验证用例可以嵌套。一个顶层验证用例可以包含多个子验证用例,每个子用例负责验证不同的需求方面。这种分解方式与动作的层次分解完全一致。

3

需求的验证关系

verify 关键字建立了验证用例与需求之间的可追溯关系。这是 V&V 活动中最关键的连接——它确保每个需求都有对应的验证方法,每个验证活动都有明确的目标需求。

基本验证关系

1requirement def MaxSpeedReq {
2 doc /* 车辆最大速度不低于 200 km/h */
3 subject vehicle : Vehicle;
4 require constraint {
5 vehicle.maxSpeed >= 200 [km/h]
6 }
7}
8
9verification def VerifyMaxSpeed {
10 subject vehicle : Vehicle;
11 objective {
12 verify requirement MaxSpeedReq;
13 }
14}

多需求验证

一个验证用例可以同时验证多个需求。在 objective 块中列出所有需要验证的需求:

1verification def VerifyPerformance {
2 subject vehicle : Vehicle;
3 objective {
4 verify requirement MaxSpeedReq; // 最大速度
5 verify requirement AccelerationReq; // 加速性能
6 verify requirement BrakingDistReq; // 制动距离
7 }
8}
易错点

不要将 verifysatisfy 混淆。satisfy 声明某个设计元素满足需求(设计层面的断言),而 verify 声明某个验证活动将检查需求是否被满足(测试层面的活动)。两者是互补的,不是替代关系。

验证矩阵的可追溯性

通过 verify 关系,工具可以自动生成需求验证追溯矩阵(RVTM)。该矩阵显示每个需求对应的验证方法,帮助识别未被覆盖的需求:

需求验证用例验证方法状态
MaxSpeedReqVerifyMaxSpeed测试已通过
AccelerationReqVerifyPerformance测试待执行
SafetyReqVerifySafety分析进行中
EMCReq未覆盖
表 2 — 需求验证追溯矩阵示例
4

测试用例建模

验证用例的核心是测试用例——具体的测试步骤、输入数据、预期输出和判定标准。SysML v2 使用动作分解和约束来建模完整的测试流程。

带参数的测试用例

1verification def VerifyBrakingDistance {
2 subject vehicle : Vehicle;
3
4 objective {
5 verify requirement BrakingDistReq;
6 }
7
8 // 测试输入参数
9 in attribute initialSpeed : ISQ::SpeedValue; // 初始速度
10 in attribute roadCondition : RoadSurface; // 路面条件
11
12 // 测试步骤
13 action accelerate : AccelerateToSpeed {
14 in attribute targetSpeed = initialSpeed;
15 }
16 action brake : EmergencyBrake;
17 action measureDist : MeasureStoppingDistance {
18 out attribute distance : ISQ::LengthValue;
19 }
20
21 first accelerate then brake then measureDist;
22
23 // 判定标准:制动距离不超过 38 米
24 assert constraint passcriterion {
25 measureDist.distance <= 38 [m]
26 }
27}

测试数据的参数化

通过参数化设计,同一验证用例可以用不同的输入数据多次执行。这避免了为每个测试场景重复定义验证用例:

1// 测试场景一:干燥路面,100 km/h
2verification dryRoadTest : VerifyBrakingDistance {
3 in attribute initialSpeed = 100 [km/h];
4 in attribute roadCondition = RoadSurface::Dry;
5}
6
7// 测试场景二:湿滑路面,80 km/h
8verification wetRoadTest : VerifyBrakingDistance {
9 in attribute initialSpeed = 80 [km/h];
10 in attribute roadCondition = RoadSurface::Wet;
11}
注意

验证用例中的 assert constraint 定义了通过/失败判定标准。工具在执行仿真或分析后,可以自动检查这些约束是否成立,从而实现自动化验证。

5

确认与利益相关者

确认关注的是系统是否满足利益相关者的真实需要,而不仅仅是技术规格。SysML v2 通过将利益相关者需求、用例和关注点集成到模型中来支持确认活动。

利益相关者与关注点

1package Stakeholders {
2 part def Operator {
3 doc /* 系统操作员——关注易用性和响应时间 */
4 }
5 part def SafetyEngineer {
6 doc /* 安全工程师——关注故障模式和冗余 */
7 }
8 part def EndUser {
9 doc /* 最终用户——关注功能完整性和用户体验 */
10 }
11}

利益相关者需求与确认活动

1requirement def UsabilityReq {
2 doc /* 操作员应能在 30 秒内完成紧急操作 */
3 stakeholder operator : Operator;
4 subject sys : ControlSystem;
5 require constraint {
6 sys.emergencyResponseTime <= 30 [s]
7 }
8}
9
10// 确认活动:用户评审会
11verification def ValidateUsability {
12 doc /* 通过用户测试确认操作流程满足可用性需求 */
13 subject sys : ControlSystem;
14
15 objective {
16 verify requirement UsabilityReq;
17 }
18
19 action briefOperator : BriefingSession; // 向操作员说明测试场景
20 action executeScenario : EmergencyScenario; // 执行紧急操作场景
21 action collectFeedback : UserFeedback; // 收集操作员反馈
22
23 first briefOperator then executeScenario then collectFeedback;
24}
生活类比

验证就像质检员拿着检测清单逐项检查产品是否合格。确认则是请客户实际试用产品,看它是否真正解决了客户的问题。质检通过的产品,客户未必满意;客户满意的产品,也未必通过了所有质检项目。两者都是不可或缺的。

6

自动化分析与仿真

SysML v2 的验证用例可以与分析用例analysis)结合,实现基于模型的自动化验证。分析用例执行计算或仿真,验证用例利用其结果来判定需求是否被满足。

分析驱动的验证

1analysis def ThermalAnalysis {
2 subject component : ElectronicModule;
3 in attribute ambientTemp : ISQ::TemperatureValue;
4 in attribute powerDissipation : ISQ::PowerValue;
5 return attribute maxJunctionTemp : ISQ::TemperatureValue;
6}
7
8verification def VerifyThermalLimit {
9 subject component : ElectronicModule;
10
11 objective {
12 verify requirement ThermalReq;
13 }
14
15 // 执行热分析
16 action runAnalysis : ThermalAnalysis {
17 in attribute ambientTemp = 40 [degC]; // 环境温度
18 in attribute powerDissipation = 15 [W]; // 功耗
19 }
20
21 // 判定:结温不超过 125 摄氏度
22 assert constraint {
23 runAnalysis.maxJunctionTemp <= 125 [degC]
24 }
25}

验证方法分类

工程实践中,验证方法通常分为四类。SysML v2 模型可以用元数据标注每个验证用例所采用的方法:

验证方法说明适用场景
测试(Test)通过物理测试或仿真执行获取实测数据性能指标、功能行为
分析(Analysis)通过数学计算、建模或仿真推导结果热分析、结构强度、可靠性
检查(Inspection)通过目视检查或文档审查确认合规外观、标签、文档完整性
演示(Demonstration)通过操作演示展示功能实现人机界面、操作流程
表 3 — 四种验证方法(TAID)
1// 使用元数据标注验证方法
2metadata def VerificationMethod {
3 attribute method : MethodKind; // Test | Analysis | Inspection | Demonstration
4}
5
6@VerificationMethod { method = MethodKind::Analysis; }
7verification def VerifyThermalLimit { /* ... */ }
提示

将验证方法编码为元数据而非硬编码到验证用例结构中,可以在不修改验证逻辑的情况下灵活调整验证策略。工具可以利用这些元数据自动生成验证计划文档。

7

完整示例

以下示例展示了一个完整的 V&V 模型——从利益相关者需求出发,经过需求分解、验证用例设计、到测试执行和结果判定的完整链条。

1package UAVVerification {
2 private import ISQ::*; private import SI::*;
3
4 // ── 需求定义 ────────────────────────────────────────
5 requirement def FlightEndurance {
6 doc /* 无人机续航时间不低于 45 分钟 */
7 subject uav : UAV;
8 require constraint {
9 uav.flightTime >= 45 [min]
10 }
11 }
12
13 requirement def PayloadCapacity {
14 doc /* 无人机有效载荷不低于 2 kg */
15 subject uav : UAV;
16 require constraint {
17 uav.maxPayload >= 2 [kg]
18 }
19 }
20
21 requirement def WindResistance {
22 doc /* 无人机可在 6 级风力下稳定飞行 */
23 subject uav : UAV;
24 require constraint {
25 uav.maxWindTolerance >= 39 [km/h]
26 }
27 }
28
29 // ── 分析用例 ────────────────────────────────────────
30 analysis def EnduranceAnalysis {
31 subject uav : UAV;
32 in attribute batteryCapacity : ISQ::EnergyValue;
33 in attribute avgPowerDraw : ISQ::PowerValue;
34 return attribute estFlightTime : ISQ::TimeValue;
35 // estFlightTime = batteryCapacity / avgPowerDraw
36 }
37
38 // ── 验证用例:续航验证(分析方法) ─────────────────
39 @VerificationMethod { method = MethodKind::Analysis; }
40 verification def VerifyEndurance {
41 subject uav : UAV;
42 objective {
43 verify requirement FlightEndurance;
44 }
45
46 action analyze : EnduranceAnalysis {
47 in attribute batteryCapacity = 500 [Wh];
48 in attribute avgPowerDraw = 350 [W];
49 }
50
51 assert constraint {
52 analyze.estFlightTime >= 45 [min]
53 }
54 }
55
56 // ── 验证用例:载荷验证(测试方法) ─────────────────
57 @VerificationMethod { method = MethodKind::Test; }
58 verification def VerifyPayload {
59 subject uav : UAV;
60 objective {
61 verify requirement PayloadCapacity;
62 }
63
64 action loadPayload : AttachPayload {
65 in attribute mass = 2 [kg]; // 加载 2 kg 载荷
66 }
67 action hover : StableHover {
68 in attribute duration = 5 [min]; // 悬停 5 分钟
69 }
70 action checkStability : MeasureFlightStability {
71 out attribute stable : Boolean;
72 }
73
74 first loadPayload then hover then checkStability;
75
76 assert constraint {
77 checkStability.stable == true
78 }
79 }
80
81 // ── 验证用例:抗风验证(演示方法) ─────────────────
82 @VerificationMethod { method = MethodKind::Demonstration; }
83 verification def VerifyWindResistance {
84 subject uav : UAV;
85 objective {
86 verify requirement WindResistance;
87 }
88
89 action flyInWind : WindTunnelFlight {
90 in attribute windSpeed = 39 [km/h];
91 out attribute posError : ISQ::LengthValue;
92 }
93
94 assert constraint {
95 flyInWind.posError <= 1.0 [m] // 位置偏差不超过 1 米
96 }
97 }
98
99 // ── 顶层验证计划 ────────────────────────────────────
100 verification def UAVVerificationPlan {
101 doc /* 无人机系统级验证计划 */
102 subject uav : UAV;
103
104 objective {
105 verify requirement FlightEndurance;
106 verify requirement PayloadCapacity;
107 verify requirement WindResistance;
108 }
109
110 // 子验证用例:可并行执行
111 verification endurance : VerifyEndurance;
112 verification payload : VerifyPayload;
113 verification wind : VerifyWindResistance;
114 }
115}

此模型展示了:requirement def(需求定义与约束)、analysis def(分析用例计算续航)、verification def(分层验证用例结构)、verify(需求到验证的可追溯关系)、assert constraint(通过/失败判定)、元数据标注(验证方法分类),以及顶层验证计划(将多个子验证用例组合为系统级计划)。

8

本模块总结

概念关键字说明
验证用例定义verification def定义验证活动的模板,包含被测对象、目标和步骤
验证用例实例verification在具体上下文中实例化并执行验证活动
验证关系verify建立验证用例与需求之间的可追溯关系
验证对象subject指定被测试/被评估的系统或组件
验证目标objective声明验证用例要达成的目标,引用待验证需求
判定标准assert constraint定义通过/失败的判定条件
分析驱动验证analysis + verification分析用例提供计算结果,验证用例据此判定
验证方法标注metadata用元数据标注测试/分析/检查/演示方法
利益相关者需求stakeholder将需求关联到利益相关者,支持确认活动
验证计划嵌套 verification将多个子验证用例组合为分层验证计划
表 4 — 模块九概念总结
系列完成

您已完成 SysML v2 教程系列的全部九个模块。请探索 OMG SysML v2 规范和试点实现,以深化您的实践。