免费注册
流程类
图形化表达方式
脑图类
结构化表达方式
笔记类
高效化表达方式
实用工具
实用工具
业务与管理领域
软件工程与系统设计
UML
数据分析与研究
工程与技术设计
数据库与信息系统
树形图
括号图
思维笔记

需求图语法

需求图

需求图提供了需求及其相互之间连接关系,以及与其他文档元素关系的可视化。

代码:
                            
复制
嵌入
requirementDiagram requirement test_req { id: 1 text: the test text. risk: high verifymethod: test } element test_entity { type: simulation } test_entity - satisfies -> test_req

语法

需求图包含三种组件:需求、元素和关系。

尖括号表示的单词是枚举关键字,如 <word>,其选项在表格中详细说明。user_defined_... 用于任何需要用户输入的地方。

关于用户文本的重要说明:所有输入都可以用双引号括起来,也可以不加双引号。然而,用户在使用未加引号的输入时必须小心。如果检测到其他关键字,编辑器将会渲染失败。

需求

需求定义包含需求类型、名称、ID、文本、风险和验证方法。语法如下:

                            
复制
嵌入
<type> user_defined_name { id: user_defined_id text: user_defined text risk: <risk> verifymethod: <method> }

类型、风险和方法是 SysML 中定义的枚举。

关键词 选项
类型 需求、功能需求、接口需求、性能需求、物理需求、设计约束
风险 低、中、高
验证方法 分析、检查、测试、演示

元素

元素定义包含元素名称、类型和文档引用,这三个都是用户定义的。元素功能旨在保持轻量级,同时允许将需求与其他文档的部分内容关联起来。

                            
复制
嵌入
element myElement { type: string docref: some/doc/path }

Markdown格式

在允许用户自定义文本的地方(如名称、需求文本、元素文档引用等),你可以:

  • 将文本用双引号括起来
  • 在双引号内使用 markdown 格式
代码:
                            
复制
嵌入
requirementDiagram requirement "__test_req__" { id: 1 text: "*italicized text* **bold text**" risk: high verifymethod: test }

关系

关系由来源节点、目标节点和关系类型组成。

遵循以下定义格式:

                            
复制
嵌入
{name of source} - <type> -> {name of destination}

或者

                            
复制
嵌入
{name of destination} <- <type> - {name of source}

"来源节点" 和 "目标节点" 应为在其他地方定义的需求或元素节点的名称。

关系类型可以是包含、复制、派生、满足、验证、细化或跟踪之一。

详细案例

此示例使用了该图的所有功能。

代码:
                            
复制
嵌入
requirementDiagram requirement test_req { id: 1 text: the test text. risk: high verifymethod: test } functionalRequirement test_req2 { id: 1.1 text: the second test text. risk: low verifymethod: inspection } performanceRequirement test_req3 { id: 1.2 text: the third test text. risk: medium verifymethod: demonstration } interfaceRequirement test_req4 { id: 1.2.1 text: the fourth test text. risk: medium verifymethod: analysis } physicalRequirement test_req5 { id: 1.2.2 text: the fifth test text. risk: medium verifymethod: analysis } designConstraint test_req6 { id: 1.2.3 text: the sixth test text. risk: medium verifymethod: analysis } element test_entity { type: simulation } element test_entity2 { type: word doc docRef: reqs/test_entity } element test_entity3 { type: "test suite" docRef: github.com/all_the_tests } test_entity - satisfies -> test_req2 test_req - traces -> test_req2 test_req - contains -> test_req3 test_req3 - contains -> test_req4 test_req4 - derives -> test_req5 test_req5 - refines -> test_req6 test_entity3 - verifies -> test_req5 test_req <- copies - test_entity2

方向

可以使用 direction 语句以设定不同方向渲染图表,有效值为:

  • TB - 从上到下(默认)
  • BT - 从下到上
  • LR - 从左到右
  • RL - 从右到左
代码:
                            
复制
嵌入
requirementDiagram direction LR requirement test_req { id: 1 text: the test text. risk: high verifymethod: test } element test_entity { type: simulation } test_entity - satisfies -> test_req

样式

需求和元素可以使用直接样式或类来设置样式。一般来说,在应用样式或类时,它接受一个需求或元素名称的列表以及一个类名列表,从而允许一次分配多个类。唯一的例外是简写语法 :::,运算符可以分配多个类,但一次只能分配给一个需求或元素。

直接样式

代码:
                            
复制
嵌入
requirementDiagram requirement test_req { id: 1 text: styling example risk: low verifymethod: test } element test_entity { type: simulation } style test_req fill:#ffa,stroke:#000, color: green style test_entity fill:pink,stroke:#333, color: blue

类定义

使用 classDef 定义可重复使用的样式:

代码:
                            
复制
嵌入
requirementDiagram requirement test_req { id: 1 text: "class styling example" risk: low verifymethod: test } element test_entity { type: simulation } classDef important fill:#f96,stroke:#333,stroke-width:4px classDef test fill:#ffa,stroke:#000

默认类

如果某个类命名为 default,它将应用于所有节点。特定的样式和类应该在此之后定义,以覆盖已应用的默认样式。

                            
复制
嵌入
classDef default fill:pink,stroke:#333,stroke-width:4px;

应用类

类可以通过两种方式应用:

1. 使用 class 关键字:

                            
复制
嵌入
class test_req,test_entity important

2. 在定义过程中或之后使用运算符 ::: 简写语法:

                            
复制
嵌入
requirement test_req:::important { id: 1 text: class styling example risk: low verifymethod: test }
                            
复制
嵌入
element test_elem {} test_elem:::myClass

组合示例

代码:
                            
复制
嵌入
requirementDiagram requirement test_req:::important { id: 1 text: "class styling example" risk: low verifymethod: test } element test_entity { type: simulation } classDef important font-weight:bold class test_entity important style test_entity fill:pink,stroke:#333