引言
在复杂的 IT 系统开发中,需求很少是静态的。它们会演变、分支,并以平面文档无法捕捉的方式与架构决策和验证策略相互作用。这种脱节往往导致范围蔓延、未经验证的功能,以及代价高昂的“我们构建了它,但没人要求它”的现象。解决方案在于将需求建模为结构化的、可追溯的图,而非文本列表。
一个需求图在系统建模语言(SysML)中,需求图正是为此目的而设计。它将需求作为一等模型元素进行捕获,并使其关系——包含、派生、满足、验证和可追溯性——变得明确且可审计。通过将需求视为图中的节点而非电子表格中的行,团队可以即时回答关键问题:该组件为何存在?此需求是否已验证?此变更的影响是什么?
本指南探讨需求图的核心概念、实用工作流程及工具支持,特别利用Visual Paradigm及其 VPasCode 环境,以弥合业务需求与技术实现之间的差距。

核心概念与符号
在绘制任何线条之前,理解 SysML 的语义精确性至关重要。需求图由两个主要构造定义:需求元素本身,以及将其连接到系统模型其余部分的类型化关系。
需求元素
需求表示为带有以下构造型的矩形:«requirement»。它必须包含三个核心属性:
-
名称:简洁的人类可读标签。
-
标识符:唯一的、通常为层次结构的标识符(例如:
1.2.3). -
文本:需求的正式陈述。
至关重要的是,需求还应包含属性,例如来源, 风险, 优先级, 状态,或 验证方法。这些属性将模糊的愿景转化为可测量、可查询的模型元素。

核心关系
需求图的力量在于其边。每种关系类型都具有特定的语义含义,必须予以尊重以维护模型的完整性。

| 关系 | 符号 | 方向与含义 | 典型 IT 用途 |
|---|---|---|---|
| 包含 | «包含» |
父项 包含子项。用于组织需求树。 | 安全需求包含 登录需求, 加密需求 |
| 派生 | «派生» |
子项是 派生自父项(具体重述)。 | 系统需求派生为 子系统需求 |
| 满足 | «满足» |
设计元素(模块)满足一个需求。 | AuthService满足 登录需求 |
| 验证 | «验证» |
测试用例验证一个需求。 | LoginTest验证 登录需求 |
| 细化 | «细化» |
模型元素细化一个需求(增加细节)。 | 一个用例细化一个需求 |
| 追踪 | «追踪» |
通用、非特定的可追溯性链接。 | 未被其他类型涵盖的松散关联 |
| 复制 | «复制» |
需求是“副本”来自另一个(复用)。 | 跨项目复制共享的非功能性需求(NFR) |
关键建模规则:关系始终连接到元素的“别名”,而绝不应连接到其 ID 字符串。此外,对于同一对元素,包含和派生是互斥的;子元素不能同时被同一父元素包含和派生。
支撑元素
需求并非孤立存在。它们与以下内容交互:
-
模块(
«block»):)满足需求的架构组件(服务、模块、API)。 -
测试用例(
«testCase»):)证明需求已满足的验证单元。 -
细化来源:用例、活动或其他用于阐述需求意图的图表。
实用示例
以下示例展示了如何使用与 Visual Paradigm 的 VPasCode 兼容的 PlantUML 语法,将这些概念应用于现实世界的 IT 场景。
示例 1:基础需求层次结构
该图表展示了如何使用包含和派生关系,将高层性能目标分解为可测量的子需求。

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/sysml-requirement-diagram.puml
skinparam vpDiagramType RequirementDiagram
skinparam defaultFontSize 14
skinparam defaultFontColor #333333
skinparam linetype ortho
title 车辆性能需求层次结构
$requirement("车辆性能", ReqVehiclePerf, "1", "车辆应在标称运行条件下满足指定的性能目标。")
$requirement("加速性能", ReqAccel, "1.1", "车辆应在 6 秒内从 0 加速至 100 km/h。")
$requirement("最高车速", ReqTopSpeed, "1.2", "车辆应达到至少 220 km/h 的最高车速。")
$requirement("制动性能", ReqBraking, "1.3", "车辆应在干燥路面上从 100 km/h 减速至停止,制动距离不超过 38 米。")
$requirement("燃油效率", ReqFuel, "1.4", "车辆应在综合工况下达到至少 15 km/l 的燃油效率。")
$containment(ReqVehiclePerf, ReqAccel)
$containment(ReqVehiclePerf, ReqTopSpeed)
$containment(ReqVehiclePerf, ReqBraking)
$containment(ReqVehiclePerf, ReqFuel)
$deriveReqt(ReqBraking, ReqVehiclePerf)
@enduml 示例 2:满足与验证
本示例将需求领域与设计及测试领域连接起来。它展示了架构模块如何满足需求,以及测试用例如何验证这些需求,从而构成设计评审的基础。

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/sysml-requirement-diagram.puml
skinparam vpDiagramType RequirementDiagram
skinparam defaultFontSize 14
skinparam defaultFontColor #333333
skinparam linetype ortho
title 支付系统 — 满足与验证
$requirement("PCI-DSS 合规性", ReqPci, "3", "系统不得存储卡验证值,并应对静态存储的持卡人数据进行加密。")
$requirement("处理支付", ReqPay, "3.1", "系统应在 3 秒内授权客户支付。")
$requirement("幂等计费", ReqIdem, "3.2", "系统在重试时不得对客户重复计费。")
$block("PaymentService", PaymentService)
$block("VaultService", VaultService)
$testCase("PCI 审计", TAudit)
$testCase("延迟测试", TLatency)
$testCase("幂等性测试", TIdem)
$containment(ReqPci, ReqPay)
$containment(ReqPci, ReqIdem)
$satisfy(PaymentService, ReqPay)
$satisfy(VaultService, ReqPci)
$verify(TAudit, ReqPci)
$verify(TLatency, ReqPay)
$verify(TIdem, ReqIdem)
@enduml
示例 3:完整的 IT 系统可追溯性链
此综合视图从业务需求出发,追溯至系统需求、架构组件及验证测试。它回答了根本问题:“这段代码为何存在?”

@startuml
!include https://static.visual-paradigm.com/plantuml-stdlib/sysml-requirement-diagram.puml
skinparam vpDiagramType RequirementDiagram
skinparam defaultFontSize 14
skinparam defaultFontColor #333333
skinparam linetype ortho
title 电子商务系统 — 需求可追溯性
$requirement("业务:降低购物车放弃率", ReqBiz, "B1", "业务方应在两个季度内将购物车放弃率降低 15%。")
$requirement("结账用户体验", ReqUx, "S1", "系统应允许访客在 5 步内完成结账。")
$requirement("一键重购", ReqReorder, "S2", "系统应允许回头客通过一次操作重购过往订单。")
$requirement("数据驻留", ReqResidency, "S3", "系统应将欧盟客户数据存储于欧盟区域内。")
$block("CheckoutUI", CheckoutUI)
$block("ReorderService", ReorderService)
$block("RegionalDatastore", RegionalDatastore)
$testCase("结账流程测试", TCheckout)
$testCase("重购测试", TReorder)
$testCase("驻留审计", TResidency)
$containment(ReqBiz, ReqUx)
$containment(ReqBiz, ReqReorder)
$deriveReqt(ReqUx, ReqBiz)
$deriveReqt(ReqReorder, ReqBiz)
$satisfy(CheckoutUI, ReqUx)
$satisfy(ReorderService, ReqReorder)
$satisfy(RegionalDatastore, ReqResidency)
$verify(TCheckout, ReqUx)
$verify(TReorder, ReqReorder)
$verify(TResidency, ReqResidency)
$trace(ReqResidency, ReqBiz)
@enduml
构建高效的需求图
创建有用的图表不仅需要掌握符号,更需要遵循纪律。请遵循以下工作流程,以确保您的模型始终具备可执行性:
-
自上而下开始: 从业务或干系人的需求开始。分配清晰的 ID 命名空间(例如,
B*表示业务,S*表示系统)。 -
使用包含关系进行分解: 将高层需求分解为可衡量的子需求。避免模糊描述;务必包含阈值或指标。
-
谨慎使用派生关系: 仅当子项是对意图的具体重述(而非仅仅是结构组成部分)时才使用派生。切勿在同一对元素间同时使用包含和派生。
-
映射满足关系: 确保每个系统需求至少由一个模块满足。未满足的需求表示覆盖缺口。
-
映射验证关系: 确保每个需求都有对应的测试用例。未经验证的需求只是无法测试的愿望。
-
限制范围: 保持单个图表的元素数量在约 24 个以内。按子系统或关注点拆分,以维持可读性。
覆盖检查清单
对照以下三个问题验证每张图表:
-
每个系统需求是否都由一个设计元素满足?
-
每个需求是否都由一个测试用例验证?
-
每个需求是否都能追溯到业务需求?
任何否定回答都表明存在必须解决的模型缺陷。
工具:Visual Paradigm 和 VPasCode
虽然 SysML 可以在多种工具中进行建模,Visual Paradigm通过其VPasCode平台。VPasCode 支持“以代码绘图”的工作流,其中 PlantUML 源代码可直接渲染为符合规范的 SysML 图表,并自动进行布局和样式设置。
主要优势包括:
-
原生 SysML 支持:预构建的宏,涵盖需求、模块、测试用例及所有标准关系。
-
AI 辅助生成:自然语言提示可生成初始图表结构,随后可手动进行细化。
-
实时预览与导出:实时渲染,并支持导出为 SVG、PNG 和 PDF 格式以用于文档编制。
-
版本控制友好:基于文本的源文件可与 Git 工作流无缝集成。

需避免的常见陷阱
-
混淆派生与包含:二者在语义上截然不同。混用会导致模型失效。
-
引用 ID 而非别名:工具将关系绑定到别名上。错误的别名会导致静默的链接断裂。
-
过度使用
«trace»:仅将其用于松散关联。如果某个组件实现了某项需求,请使用«satisfy». -
不可衡量的需求:“快速”或“用户友好”无法验证。务必进行量化。
-
以图表作为规范:图表展示结构;需求文本和属性承载细节。请保持文本精确。
结论
需求图远不止是一种视觉辅助工具;它是系统工程中可追溯性的核心支柱。对于受漂移和偏差困扰的 IT 项目,它提供了将业务意图与技术现实相连接的严谨结构。通过掌握包含、派生、满足和验证之间的语义区别,并利用现代工具(如 Visual Paradigm 的 VPasCode),团队可以将需求从静态文档转变为可查询的动态模型。其结果不仅是更优质的文档,更是更优质的系统:这些系统可验证地符合干系人需求,具备应对变化的韧性,并可实现从概念到代码的全程可审计。
参考文献
- VPasCode:基于 PlantUML、Mermaid 和 Graphviz 的 AI 辅助图表即代码: 官方指南,涵盖 AI 辅助图表生成、修改工作流以及多领域特定语言(DSL)支持,包括 PlantUML、Mermaid 和 Graphviz。
- Visual Paradigm VPasCode:综合指南: 详细介绍 VPasCode 的功能、目标用户(开发人员、架构师、分析师)及其在敏捷文档工作流中的作用。
- 欢迎使用 Visual Paradigm VPasCode:迈向图表即代码(DaC): 介绍统一平台,阐述文本到图表工作流及自动化布局工程的优势。
- 60 秒快速入门指南 | VPasCode 文本转图表指南: 使用带实时预览的浏览器编辑器创建、自定义和导出图表的分步指南。
- VPasCode 新功能:AI UML 配置文件图生成器: 产品更新,推出基于自然语言提示的 AI 驱动 UML 配置文件图生成功能,并提供医疗数据隐私合规示例。
- Visual Paradigm VPasCode 中的原生 AI 图表生成: 宣布在编辑器中直接通过自然语言提示生成、修改和修复图表的内嵌 AI 功能。
- AI 驱动图表生成器与生产力工具 | VPasCode: 概述 VPasCode 与 AI 聊天机器人、Visual Paradigm 桌面版及 OpenDocs 的集成,以优化文档流水线。
- 最佳 PlantUML 替代方案及免费图表即代码编辑器: PlantUML 替代方案对比矩阵,突出 VPasCode 的多 DSL 支持、AI 功能及基于浏览器的零配置方法。
- 图表即代码编辑器:即时将文本转换为图表: 功能概览,涵盖自动格式检测、实时渲染及多格式导出选项(SVG、PNG、PDF)。
- Visual Paradigm 生态系统指南: 说明何时使用 VPasCode 与 VP 桌面版,并提供关于版本控制图表维护及与动态文档集成的指导。











