← 返回编辑器 所有教程
EN

如何用 Mermaid 画需求图

需求图用于可视化项目需求、需求之间的关系和验证方法,适合需求管理、项目规划、软件开发生命周期管理等场景。Mermaid 使用 requirementDiagram 关键字声明需求图。

为什么用需求图?

需求图在软件工程和项目管理中扮演着重要角色:

声明图表

使用 requirementDiagram 关键字:

requirementDiagram
    title 需求图标题

在 MermZen 中试试 →

需求定义

创建需求节点:

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
    }

在 MermZen 中试试 →

需求管理实践

需求图支持三种主要的需求类型:

功能需求

系统必须实现的功能,描述系统"做什么":

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

在 MermZen 中试试 →

需求验证方法

每个需求都应该可验证。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

在 MermZen 中试试 →

最佳实践

1. 每个需求有唯一 ID

使用有意义的 ID 命名规范,便于追踪和引用:

requirementDiagram
    requirement "用户管理模块" {
        id: R1
        text: 完整的用户管理功能
    }
    requirement "用户注册" {
        id: R1.1    ← 子需求使用父ID前缀
        text: 新用户可以注册账号
    }

2. 清晰定义需求状态

明确标注每个需求的当前状态:

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 中尝试上述代码,可以点击 在线编辑器,然后将代码粘贴进去。