如何用 Mermaid 画需求图
需求图用于可视化项目需求、需求之间的关系和验证方法,适合需求管理、项目规划、软件开发生命周期管理等场景。Mermaid 使用 requirementDiagram 关键字声明需求图。
为什么用需求图?
需求图在软件工程和项目管理中扮演着重要角色:
- 可视化需求层次和关系:清晰展示需求之间的父子关系、依赖关系,帮助团队理解需求结构
- 追踪需求之间的依赖关系:明确哪些需求依赖于其他需求,便于规划开发顺序和识别风险
- 管理"需求如何被验证":将验证方法与需求关联,确保每个需求都有对应的测试或审查方式
声明图表
使用 requirementDiagram 关键字:
requirementDiagram
title 需求图标题
需求定义
创建需求节点:
requirementDiagram
title 基本需求图
requirement "需求 1" {
id: R1
text: 用户可以登录系统
type: functional
status: approved
}
requirement "需求 2" {
id: R2
text: 用户可以查看个人信息
type: functional
status: pending
}
requirement "需求 3" {
id: R3
text: 系统应该具有响应式设计
type: non-functional
status: approved
}
需求管理实践
需求图支持三种主要的需求类型:
功能需求
系统必须实现的功能,描述系统"做什么":
requirementDiagram
title 功能需求示例
requirement "用户认证" {
id: FR-001
text: 系统支持用户名密码登录
type: functional
status: approved
}
非功能需求
性能、安全、可用性等方面的要求,描述系统"做得怎样":
requirementDiagram
title 非功能需求示例
requirement "性能要求" {
id: NFR-001
text: 系统响应时间小于2秒
type: non-functional
status: approved
}
约束需求
技术限制、预算、时间等外部条件:
requirementDiagram
title 约束需求示例
requirement "技术栈约束" {
id: CON-001
text: 必须使用React框架开发前端
}
需求关系
定义需求之间的关系:
requirementDiagram
title 需求关系图
requirement "登录功能" {
id: R1
text: 用户可以登录系统
}
requirement "个人信息管理" {
id: R2
text: 用户可以查看和编辑个人信息
}
requirement "响应式设计" {
id: R3
text: 系统在各种设备上都应该正常显示
}
"登录功能" --> "个人信息管理" : requires
"登录功能" --> "响应式设计" : requires
"个人信息管理" --> "响应式设计" : requires
需求验证方法
每个需求都应该可验证。Mermaid 需求图使用 element 节点和 verifies 关系来标注验证方法:
requirementDiagram
title 需求验证方法示例
requirement "用户登录" {
id: R1
text: 用户可以使用用户名密码登录
type: functional
status: approved
}
element "登录测试用例" {
type: test
}
element "安全审查" {
type: review
}
"登录测试用例" - verifies -> "用户登录"
"安全审查" - verifies -> "用户登录"
常见的验证方法包括:
| 验证类型 | 说明 | 适用场景 |
|---|---|---|
| 测试 | 自动化测试、单元测试、集成测试 | 功能需求 |
| 审查 | 代码审查、设计审查、需求审查 | 非功能需求、架构需求 |
| 演示 | 向利益相关者演示功能 | 用户界面需求 |
| 分析 | 性能分析、安全分析 | 性能需求、安全需求 |
完整示例:软件项目需求管理
requirementDiagram
title 电商系统需求图
requirement "用户管理" {
id: R1
text: 用户可以注册、登录、修改个人信息
type: functional
status: approved
priority: high
verification: "用户测试"
}
requirement "产品展示" {
id: R2
text: 系统可以展示产品列表、详情和分类
type: functional
status: approved
priority: high
verification: "自动化测试"
}
requirement "购物车" {
id: R3
text: 用户可以添加、删除、修改购物车商品
type: functional
status: pending
priority: medium
verification: "手动测试"
}
requirement "支付功能" {
id: R4
text: 支持多种支付方式(支付宝、微信、信用卡)
type: functional
status: approved
priority: high
verification: "集成测试"
}
requirement "性能要求" {
id: R5
text: 系统响应时间应小于 2 秒
type: non-functional
status: approved
priority: medium
verification: "性能测试"
}
"用户管理" --> "产品展示" : requires
"用户管理" --> "购物车" : requires
"产品展示" --> "购物车" : requires
"购物车" --> "支付功能" : requires
"用户管理" --> "性能要求" : impacts
"产品展示" --> "性能要求" : impacts
"购物车" --> "性能要求" : impacts
"支付功能" --> "性能要求" : impacts
最佳实践
1. 每个需求有唯一 ID
使用有意义的 ID 命名规范,便于追踪和引用:
requirementDiagram
requirement "用户管理模块" {
id: R1
text: 完整的用户管理功能
}
requirement "用户注册" {
id: R1.1 ← 子需求使用父ID前缀
text: 新用户可以注册账号
}
2. 清晰定义需求状态
明确标注每个需求的当前状态:
approved— 已批准,可以开始开发pending— 待审批,需要进一步讨论rejected— 已拒绝,不再考虑
3. 建立需求间的"包含"关系
使用 contains 关系组织需求层次:
requirementDiagram
title 需求层次结构
requirement "用户管理模块" {
id: R1
text: 完整的用户管理功能
type: functional
}
requirement "用户注册" {
id: R1.1
text: 新用户可以注册账号
type: functional
}
requirement "用户登录" {
id: R1.2
text: 已注册用户可以登录
type: functional
}
requirement "密码重置" {
id: R1.3
text: 用户可以重置密码
type: functional
}
"用户管理模块" - contains -> "用户注册"
"用户管理模块" - contains -> "用户登录"
"用户管理模块" - contains -> "密码重置"
4. 为非功能需求设置验证标准
非功能需求(性能、安全等)必须有明确的验证标准:
requirementDiagram
requirement "响应时间" {
id: NFR-001
text: 页面加载时间小于3秒
type: non-functional
verification: "性能测试"
}
与其他图表对比
需求图 vs 用例图
| 特性 | 需求图 | 用例图 |
|---|---|---|
| 侧重点 | 需求层次和验证方法 | 用户与系统的交互 |
| 主要元素 | 需求节点、验证元素 | 参与者、用例、关系 |
| 适用场景 | 需求管理、项目规划 | 需求分析、系统设计 |
| 关系类型 | requires、contains、verifies | include、extend、generalize |
需求图强调需求之间的层次关系和验证方法,适合项目经理和需求工程师使用。
用例图强调用户如何与系统交互,适合需求分析和系统设计阶段。
需求图 vs 类图
| 特性 | 需求图 | 类图 |
|---|---|---|
| 侧重点 | 需求层次结构 | 系统结构设计 |
| 主要元素 | 需求、元素 | 类、接口、关系 |
| 适用阶段 | 需求阶段 | 设计阶段 |
| 目的 | 理解和管理需求 | 指导代码实现 |
需求图是需求层次的抽象,描述"系统应该做什么"。
类图是系统结构的抽象,描述"系统如何实现"。
速查表
| 语法 | 功能 |
|---|---|
requirementDiagram |
声明需求图 |
title 标题 |
设置图表标题 |
requirement "名称" { ... } |
定义需求 |
id: 标识符 |
设置需求唯一标识符 |
text: 描述 |
设置需求描述文本 |
type: 类型 |
设置需求类型(functional/non-functional) |
status: 状态 |
设置需求状态(approved/pending/rejected) |
priority: 优先级 |
设置需求优先级(high/medium/low) |
verification: 方法 |
设置验证方法 |
"需求 1" --> "需求 2" : 关系 |
定义需求之间的关系 |
%% 注释 |
行注释 |
下一步
掌握需求图后,您可以继续学习其他 Mermaid 图表类型,或查看我们的 Mermaid 图表速查表 获取完整的语法参考。
如果您想在 MermZen 中尝试上述代码,可以点击 在线编辑器,然后将代码粘贴进去。