模块 6:用例
如何用 SysML v2 的 use case def、analysis case 和 verification case 描述系统需要实现的场景、分析过程和验证策略 — 以及它们如何映射到 KerML 计算层的底层构造。
KerML → SysML:用例建模概念
SysML v2 中的"用例"(Case)构建在 KerML 计算层(Computation layer)之上。KerML 的 CaseDefinition 继承自 Calculation(而 Calculation 又继承自 Function),代表一个可以产生结果的行为。SysML v2 在此基础上增加了领域语义:use case(使用用例)、analysis case(分析用例)和 verification case(验证用例)。
| SysML v2 概念(L2) | 底层 KerML 构造(L1) | SysML 增加的语义 |
|---|---|---|
use case def | CaseDefinition(继承自 CalculationDefinition) | 描述系统与参与者之间的交互场景;具有 subject 和 actor |
use case(用法) | 类型为 CaseDefinition 的 Feature | 在包或零件内实例化一个用例场景 |
actor | PartUsage(带有 actor 方向) | 声明与系统交互的外部实体 |
subject | SubjectMembership | 标识用例所描述的系统或零件 |
objective | ObjectiveMembership(一个 RequirementUsage) | 用例需要满足的目标需求 |
include use case | IncludeUseCaseUsage | 在一个用例中包含另一个用例的行为 |
analysis case def | AnalysisCaseDefinition(继承自 CaseDefinition) | 定义一个分析过程;有 return 结果 |
verification case def | VerificationCaseDefinition(继承自 CaseDefinition) | 定义验证流程;用 verify 链接需求 |
在 KerML 中,CaseDefinition 继承自 CalculationDefinition,后者又继承自 ActionDefinition。这意味着每个用例本质上是一个可执行的行为,可以包含子动作、参数和控制流。SysML v2 在此基础上增加了 subject、actor 和 objective 等系统工程专用语义。
用例定义
use case def 定义一种可复用的交互场景类型。它描述了系统(subject)与外部实体(actor)之间的交互序列,以及需要达成的目标(objective)。
基本用例定义
最简单的用例定义包含一个主题和一个目标:
1 use case def 监控环境 {
2 doc /* 系统持续监控环境数据并在异常时发出警报 */
3
4 subject system : 环境监控系统; // 被描述的系统
5
6 objective {
7 doc /* 确保环境参数异常时能在 10 秒内发出警报 */
8 }
9 }
带动作序列的用例
用例本身是一种行为,因此可以包含动作序列来描述交互的具体步骤:
1 use case def 紧急制动 {
2 subject vehicle : 车辆;
3
4 actor driver : 驾驶员;
5
6 objective {
7 doc /* 车辆在障碍物检测后 200ms 内启动制动 */
8 }
9
10 // 用例中的动作序列
11 action 检测障碍 : 障碍物检测;
12 action 启动制动 : 制动控制;
13 action 通知驾驶员 : 警报发送;
14
15 first 检测障碍 then 启动制动;
16 first 启动制动 then 通知驾驶员;
17 }
用例就像一个剧本:subject 是舞台上的主角,actor 是与主角互动的配角,objective 是剧情的目标,而动作序列是剧本中的一幕幕场景。
参与者与主题
subject(主题)标识用例所描述的系统或子系统。actor(参与者)声明与系统交互的外部实体。两者都是零件用法(part usage),但具有不同的语义角色。
主题声明
每个用例必须有一个 subject。它指定用例所分析或描述的系统:
1 part def 智能家居系统;
2
3 use case def 温度调节 {
4 subject home : 智能家居系统; // 用例描述的系统
5 }
参与者声明
参与者可以是人、外部系统或环境。一个用例可以有多个参与者:
1 use case def 远程监控 {
2 subject system : 工业控制系统;
3
4 actor operator : 操作员; // 人类参与者
5 actor cloud : 云平台; // 外部系统参与者
6 actor sensor : 传感器网络; // 设备参与者
7
8 objective {
9 doc /* 操作员能够通过云平台实时查看传感器数据 */
10 }
11 }
参与者与主题的交互
参与者通过动作和数据流与主题系统交互。用例的动作序列描述了这些交互的时序关系:
1 use case def 数据采集 {
2 subject system : 数据采集系统;
3 actor user : 分析师;
4
5 objective {
6 doc /* 系统按照分析师的配置自动采集数据 */
7 }
8
9 action 配置参数 {
10 in item config : 采集配置 from user; // 参与者提供输入
11 }
12 action 执行采集 : 自动采集;
13 action 返回结果 {
14 out item result : 采集报告 to user; // 将结果返回参与者
15 }
16
17 first 配置参数 then 执行采集;
18 first 执行采集 then 返回结果;
19 }
subject 和 actor 的区别在于:subject 是用例所描述的系统本身,actor 是与系统交互但不属于系统的外部实体。同一个零件在一个用例中可以是 subject,在另一个用例中可以是 actor。
包含用例
include use case 允许一个用例包含另一个用例的行为,实现用例的组合与复用。这类似于 UML 中的 <<include>> 关系,但在 SysML v2 中具有更精确的语义。
基本包含
1 use case def 用户认证;
2
3 use case def 提交订单 {
4 subject system : 电商平台;
5 actor buyer : 买家;
6
7 // 包含认证用例 — 提交订单前必须先认证
8 include use case auth : 用户认证;
9
10 action 选择商品 : 商品选择;
11 action 确认支付 : 支付处理;
12
13 first auth then 选择商品;
14 first 选择商品 then 确认支付;
15 }
多层包含
用例可以嵌套包含,形成用例的层次结构:
1 use case def 传感器自检;
2 use case def 通信检查;
3
4 use case def 系统初始化 {
5 subject system : 无人机;
6
7 include use case selfTest : 传感器自检;
8 include use case commCheck : 通信检查;
9
10 // 两项检查并行执行
11 fork;
12 selfTest;
13 commCheck;
14 join;
15 }
不要将 include use case 与 specialize 混淆。include 表示"执行期间包含另一个用例的行为",而 specialize 表示"本用例是另一个用例的一种特化形式"。前者是组合关系,后者是泛化关系。
分析用例
analysis case def 定义一个分析过程,它是 CaseDefinition 的特化形式。分析用例具有 return 结果,用于表达分析的输出。典型应用包括性能分析、可靠性分析和权衡研究。
基本分析用例
1 analysis case def 质量预算分析 {
2 subject vehicle : 车辆;
3
4 // 分析的返回值 — 总质量是否在预算内
5 return result : Boolean;
6
7 objective massObjective {
8 doc /* 验证总质量不超过 2000 kg */
9 }
10 }
带计算步骤的分析用例
分析用例可以包含详细的计算步骤,形成一个完整的分析流程:
1 analysis case def 功耗分析 {
2 subject system : 嵌入式系统;
3
4 in attribute 环境温度 : ISQ::ThermodynamicTemperatureValue;
5 in attribute 工作模式 : 运行模式;
6
7 return 功耗报告 : 功耗分析报告;
8
9 objective {
10 doc /* 系统在所有工作模式下功耗不超过 50W */
11 }
12
13 // 分析步骤
14 action 收集参数 : 参数采集;
15 action 计算静态功耗 : 静态分析;
16 action 计算动态功耗 : 动态分析;
17 action 汇总报告 : 报告生成;
18
19 first 收集参数 then 计算静态功耗;
20 first 收集参数 then 计算动态功耗;
21 first 计算静态功耗 then 汇总报告;
22 first 计算动态功耗 then 汇总报告;
23 }
analysis case 与 use case 的关键区别在于:分析用例有 return 结果,代表分析过程产生的输出。分析用例通常没有 actor,因为它描述的是系统内部的分析过程,而非与外部实体的交互。
验证用例
verification case def 定义一个验证流程,用于检验系统是否满足需求。它通过 verify 关键字将验证过程与需求关联起来。
基本验证用例
1 requirement def 响应时间需求 {
2 doc /* 系统响应时间不超过 100ms */
3 subject system : 控制系统;
4 }
5
6 verification case def 响应时间测试 {
7 subject system : 控制系统;
8
9 // 声明本验证用例验证哪个需求
10 verify requirement 响应时间需求;
11
12 return verdict : VerdictKind; // pass / fail / inconclusive
13 }
带测试步骤的验证用例
验证用例可以包含详细的测试步骤,形成可执行的测试流程:
1 verification case def 制动距离验证 {
2 subject vehicle : 车辆;
3
4 verify requirement 制动性能需求;
5
6 return verdict : VerdictKind;
7
8 objective {
9 doc /* 在干燥路面上 100km/h 制动距离 < 40m */
10 }
11
12 // 测试步骤
13 action 准备测试环境 : 测试准备 {
14 doc /* 设置初始速度和路面条件 */
15 }
16 action 执行制动 : 制动测试;
17 action 测量距离 : 距离测量;
18 action 判定结果 : 结果评估;
19
20 first 准备测试环境 then 执行制动;
21 first 执行制动 then 测量距离;
22 first 测量距离 then 判定结果;
23 }
验证用例与需求的追溯
一个验证用例可以验证多个需求,反之一个需求也可以被多个验证用例覆盖:
1 verification case def 系统集成测试 {
2 subject system : 飞行控制系统;
3
4 // 一个验证用例可以验证多个需求
5 verify requirement 响应时间需求;
6 verify requirement 可靠性需求;
7 verify requirement 安全性需求;
8
9 return verdict : VerdictKind;
10 }
verification case 的 return 类型通常为 VerdictKind,其取值包括 pass(通过)、fail(失败)和 inconclusive(不确定)。这与 KerML 的 CalculationDefinition 的 result 语义一致 — 验证用例本质上是一个返回判定结果的计算。
完整示例
以下模型集成了本模块的所有概念:一个无人机任务系统的用例模型,包含使用用例、分析用例和验证用例。
1 package 无人机任务用例 {
2 private import ISQ::*;
3 private import SI::*;
4
5 // ── 零件定义 ─────────────────────────────────────
6 part def 无人机;
7 part def 地面站;
8 part def 操作员;
9
10 // ── 需求定义 ─────────────────────────────────────
11 requirement def 续航需求 {
12 doc /* 无人机续航时间不少于 30 分钟 */
13 subject uav : 无人机;
14 }
15
16 requirement def 通信距离需求 {
17 doc /* 通信距离不少于 5 km */
18 subject uav : 无人机;
19 }
20
21 // ── 使用用例:任务执行 ───────────────────────────
22 use case def 执行侦察任务 {
23 doc /* 无人机按操作员指令执行区域侦察 */
24
25 subject uav : 无人机;
26 actor op : 操作员;
27 actor gcs : 地面站;
28
29 objective {
30 doc /* 完成指定区域的影像采集并安全返航 */
31 }
32
33 // 包含子用例
34 include use case preflight : 飞行前检查;
35
36 action 起飞 : 自动起飞;
37 action 巡航侦察 : 区域扫描;
38 action 返航着陆 : 自动返航;
39
40 first preflight then 起飞;
41 first 起飞 then 巡航侦察;
42 first 巡航侦察 then 返航着陆;
43 }
44
45 // ── 子用例:飞行前检查 ──────────────────────────
46 use case def 飞行前检查 {
47 subject uav : 无人机;
48 actor op : 操作员;
49
50 objective {
51 doc /* 确认无人机处于可飞行状态 */
52 }
53
54 action 检查电池 : 电池状态检查;
55 action 检查通信 : 通信链路检查;
56 action 检查传感器 : 传感器校准;
57
58 // 三项检查并行执行
59 fork;
60 检查电池;
61 检查通信;
62 检查传感器;
63 join;
64 }
65
66 // ── 分析用例:续航分析 ──────────────────────────
67 analysis case def 续航时间分析 {
68 subject uav : 无人机;
69
70 in attribute 载荷质量 : ISQ::MassValue;
71 in attribute 风速 : ISQ::SpeedValue;
72
73 return 预计续航 : ISQ::DurationValue;
74
75 objective {
76 doc /* 在给定载荷和风速下计算预计续航时间 */
77 }
78
79 action 计算悬停功耗 : 悬停功耗模型;
80 action 计算巡航功耗 : 巡航功耗模型;
81 action 计算总续航 : 续航综合计算;
82
83 first 计算悬停功耗 then 计算总续航;
84 first 计算巡航功耗 then 计算总续航;
85 }
86
87 // ── 验证用例:续航验证 ──────────────────────────
88 verification case def 续航验证测试 {
89 subject uav : 无人机;
90
91 verify requirement 续航需求;
92
93 return verdict : VerdictKind;
94
95 objective {
96 doc /* 实际飞行测试确认续航 >= 30 分钟 */
97 }
98
99 action 充满电池 : 电池充电;
100 action 标准载荷飞行 : 续航飞行测试;
101 action 记录时间 : 飞行时间记录;
102 action 评估结果 : 判定评估;
103
104 first 充满电池 then 标准载荷飞行;
105 first 标准载荷飞行 then 记录时间;
106 first 记录时间 then 评估结果;
107 }
108
109 // ── 验证用例:通信距离验证 ──────────────────────
110 verification case def 通信距离验证测试 {
111 subject uav : 无人机;
112
113 verify requirement 通信距离需求;
114
115 return verdict : VerdictKind;
116 }
117 }
此模型展示了:use case def(使用用例定义与参与者交互)、include use case(用例组合)、analysis case def(带返回值的分析过程)、verification case def(带 verify 链接的验证流程)、以及 objective(每个用例的目标需求)。
模块总结
| SysML v2 概念 | KerML 起源 | 关键规则 |
|---|---|---|
use case def | CaseDefinition | 描述系统与参与者之间的交互场景;有 subject、actor 和 objective |
use case(用法) | 类型为 CaseDefinition 的 Feature | 在包或零件内实例化用例 |
subject | SubjectMembership | 标识用例所描述的系统;每个用例只有一个 subject |
actor | PartUsage + actor 方向 | 声明外部参与者;可以有多个 |
objective | ObjectiveMembership | 用例需要满足的目标需求;本质上是一个 RequirementUsage |
include use case | IncludeUseCaseUsage | 组合复用:在执行期间包含另一个用例的行为 |
analysis case def | AnalysisCaseDefinition | 定义分析过程;有 return 结果 |
verification case def | VerificationCaseDefinition | 定义验证流程;用 verify 链接需求 |
verify requirement | RequirementVerification | 声明验证用例与需求之间的追溯关系 |
return | ResultExpressionMembership | 继承自 Calculation;分析和验证用例的输出 |