# Mermaid 需求图速查表

需求、需求的种类，以及满足它们的东西。

## 一条需求

所有内容都写在花括号里。id、text、risk 和 verifymethod 是四个字段。

```mermaid
requirementDiagram
  requirement checkout_req {
    id: 1
    text: Orders must be payable online.
    risk: high
    verifymethod: test
  }
```

![一个标着 checkout_req 的需求框，列着 ID 1、文字 Orders must be payable online、风险 High 和验证方式 Test。](/diagrams/requirement/requirement.svg)

## 需求的种类

id 前面的关键字说明它是哪一类：functional、performance、interface、physical 或者一项设计约束。

```mermaid
requirementDiagram
  functionalRequirement payment_req {
    id: 1.1
    text: Card payments must be authorised.
    risk: high
    verifymethod: test
  }
  performanceRequirement response_req {
    id: 1.2
    text: Pages must load in under a second.
    risk: medium
    verifymethod: analysis
  }
  interfaceRequirement api_req {
    id: 1.3
    text: The payment API must stay stable.
    risk: low
    verifymethod: inspection
  }
```

![并排的三个需求框：一个功能需求、一个性能需求和一个接口需求，各有自己的 id、text、risk 和验证方式。](/diagrams/requirement/kinds.svg)

## 元素

元素是系统之外、需求所指的那个东西。type 说明它是什么，docRef 指向它。

```mermaid
requirementDiagram
  requirement checkout_req {
    id: 1
    text: Orders must be payable online.
    risk: high
    verifymethod: test
  }
  element checkout_service {
    type: service
    docRef: reqs/checkout
  }
```

![一个需求框旁边是一个标为服务的元素框，带有一个指向 reqs/checkout 的文档引用。](/diagrams/requirement/elements.svg)

## 关系

箭头之间的词就是关系：contains、satisfies、verifies、traces、derives、refines 和 copies。

```mermaid
requirementDiagram
  requirement checkout_req {
    id: 1
    text: Orders must be payable online.
    risk: high
    verifymethod: test
  }
  functionalRequirement payment_req {
    id: 1.1
    text: Card payments must be authorised.
    risk: high
    verifymethod: test
  }
  element checkout_service {
    type: service
  }
  checkout_req - contains -> payment_req
  checkout_service - satisfies -> payment_req
  checkout_service - verifies -> payment_req
```

![一个需求框和一个功能需求框由 contains 关系相连，另有一个元素框通过 satisfies 和 verifies 链到两者。](/diagrams/requirement/relations.svg)

## 在 Mernyx 里画出来

打开一个 .mmd 文件，在画布上挪一个节点，源码跟着走。macOS 原生，不经过浏览器。
