2. 需求建模核心语法

需求图是 SysML 中专门用于表达“系统应当满足什么”的图型。它不描述系统内部如何实现,而是把需求本身当作可建模的元素,让需求拥有标识、文本、属性,并能与其它模型元素建立可追溯的关系。理解需求图的关键,是把它看成一张“需求及其追溯网络”,而不是一张功能结构图。

需求元素:标识、文本与属性

在需求图中,一个需求用矩形框表示,框内通常包含三部分信息:需求标识(id)、需求文本(text)以及需求属性(properties)。需求标识是需求的唯一名字,例如 REQ-001;需求文本是自然语言描述,例如“当车速超过 30 km/h 时,系统应在 200 ms 内发出碰撞预警”;需求属性则用于补充管理或验证信息,常见的有 Id、Text、Source、Risk、VerifyMethod、Status 等。

需求文本应遵循“单一、可验证、无歧义”的原则。例如“系统应快速响应”无法验证,而“系统应在收到制动信号后 100 ms 内输出制动指令”则具备可测性。需求属性中的 VerifyMethod 可取值 Test、Analysis、Inspection、Demonstration,它决定了后续验证活动的方式。

四类核心关系:包含、派生、满足、验证

需求图的价值在于关系。SysML 需求图定义了多种关系,其中最核心的是包含(containment)、派生(derive)、满足(satisfy)和验证(verify)。

  • 包含关系:用带十字圆圈的虚线表示,表示一个复合需求由若干子需求组成。例如“整车安全需求”可包含“前向碰撞预警需求”和“自动紧急制动需求”。
  • 派生关系:用带 «deriveReqt» 的虚线箭头表示,表示子需求由父需求推导而来。派生强调逻辑来源,例如从“系统应避免碰撞”派生出“系统应检测前方障碍物距离”。
  • 满足关系:用带 «satisfy» 的虚线箭头表示,由设计元素指向需求,表示某个模块、组件或行为满足了该需求。例如“雷达感知模块”满足“检测前方障碍物距离”需求。
  • 验证关系:用带 «verify» 的虚线箭头表示,由测试用例或验证活动指向需求,表示该活动验证了该需求。例如“AEB 实车测试用例”验证“自动紧急制动需求”。

这四类关系构成了需求追溯的主干:包含与派生建立需求之间的层级和推导,满足把需求连接到设计,验证把需求连接到测试。缺少任何一环,需求都难以闭环。

需求图核心关系与追溯链 REQ-001 整车安全需求 系统应避免与前方车辆碰撞 VerifyMethod: Test | Risk: High «containment» REQ-002 前向碰撞预警 车速>30km/h 时 200ms 内预警 VerifyMethod: Test REQ-003 自动紧急制动 碰撞时间<1.2s 时自动制动 VerifyMethod: Test «deriveReqt» REQ-004 障碍物距离检测 检测前方 150m 内障碍物距离 精度 ±0.5m «satisfy» 雷达感知模块 77GHz 毫米波雷达 输出距离/速度 «verify» AEB 实车测试用例 目标车静止/匀速场景 记录 TTC 与制动时刻 图例 包含:复合需求分解为子需求 派生:子需求由父需求推导 满足:设计元素满足需求 验证:测试活动验证需求 箭头方向:从来源指向目标 虚线:需求图关系统一使用虚线

需求属性与需求表格

当需求数量增多时,逐个查看图形框会变得低效。SysML 允许把需求属性以表格形式呈现,即需求表格(Requirement Table)。表格的列通常包括 Id、Text、Source、VerifyMethod、Status、SatisfiedBy、VerifiedBy 等。表格与图形是同一模型数据的两种视图:在表格中修改属性,图形中的需求框会同步更新;在图形中建立关系,表格中的追溯列也会自动填充。

下面给出一个可直接参考的需求表格示例,字段和取值均属于教学示例,实际项目应按组织规范调整。

Id Text Source VerifyMethod Status SatisfiedBy VerifiedBy
REQ-001 系统应避免与前方车辆碰撞 安全目标 SG-01 Test Approved — —
REQ-002 车速>30km/h 时 200ms 内发出预警 REQ-001 Test Approved 预警控制模块 FCW 测试用例
REQ-003 碰撞时间<1.2s 时自动制动 REQ-001 Test Approved 制动执行模块 AEB 实车测试用例
REQ-004 检测前方 150m 内障碍物距离,精度 ±0.5m REQ-002 Analysis Draft 雷达感知模块 雷达测距分析报告

建模时的常见判断

建立需求图时,有几个容易混淆的判断点。第一,包含与派生的区别:包含强调“整体—部分”的分解,派生强调“逻辑推导”。如果子需求是父需求的一部分,用包含;如果子需求是从父需求推导出的新约束,用派生。第二,满足与验证的区别:满足连接的是设计元素,回答“谁实现了它”;验证连接的是测试活动,回答“谁证明了它”。第三,需求文本不要写成设计说明。需求应说明“需要什么”,而不是“怎么做”;一旦写入具体实现方案,就会限制设计空间,也会让满足关系变得难以判断。

需求图不是一次性画完的。建议先建立需求层级(包含/派生),再逐步挂接满足关系,最后补充验证关系。每增加一条关系,都应在需求表格中检查对应追溯列是否完整,避免出现“有需求无验证”或“有设计无需求”的孤立节点。

掌握需求图的构造、标识与文本、四类关系以及属性表格之后,就可以把分散在文档中的需求转化为可追溯、可验证、可管理的模型元素。这是后续把需求连接到系统架构与验证活动的基础。