Main Content

本页采用了机器翻译。点击此处可查看英文原文。

使用可追溯性图可视化链接

您可以使用可追溯性图来可视化需求和其他基于模型的设计项目的可追溯性结构体。可追溯性图以图形方式显示原始基于模型的设计项目(例如需求)与链接到该项目的项目(例如其他需求或Simulink®模块)之间的链接。欲了解更多信息,请参阅可链接项目

在图中,项目是节点,链接是。生成图的项目是起始节点。您还可以生成工件级图,其中工件(例如需求集或 Simulink 模型)是节点,而链接集是边。

可追溯性图显示链接到起始节点的所有项目,包括所有上游节点和下游节点。如果上游节点有进一步的上游链接,图还会显示这些链接的项目。类似地,该图显示下游节点的进一步下游链接项。

节点是上游还是下游由影响方向决定,影响方向描述了变化如何在节点之间传播。上游节点影响起始节点。下游节点受到起始节点的影响。影响方向由链接类型决定。有关更多信息,请参阅 影响方向

您可以使用可追溯性图来评估链接的基于模型的设计项目之间的需求分配和变更传播。有关更多信息,请参阅 评估分配和影响

生成可追溯性图

您可以从这些对象创建可追溯性图:

如果从链接创建可追溯性图,则链接 source 项就是起始节点。类似地,如果您从链接集创建可追溯性图,则链接集 Artifact 就是起始节点。

要创建可追溯性图:

  • 需求编辑器中,选择项目并点击可追溯性图

  • 需求编辑器中,右键点击该项目并选择查看可追溯性图

  • 在 MATLAB® 命令行中,使用 slreq.generateTraceabilityDiagram

您可以通过右键点击节点并选择查看可追溯性图来从现有图中的节点创建新图。

可追溯性图的类型

当您根据需求、引用需求、申述或链接创建可追溯性图时,该图就是项目级图。节点代表基于模型的设计项目,例如需求和Simulink模块。边表示这些项目之间的链接。

Traceability diagram with a requirement as the starting node. A referenced requirement is upstream and two Simulink model objects and a test are downstream.

当您从需求集或链接集创建可追溯性图时,该图是工件级图。节点代表基于模型的设计工件,如需求集、Simulink 模型和 Simulink Test™ 文件。边表示工件内项目之间的链接,例如需求、Simulink 模块和 Simulink测试用例之间的链接。

Traceability diagram with a requirement set as the starting node. A requirement set and a Simulink model are upstream. A Simulink data dictionary, model, and test file are downstream.

图元素

图由节点和边组成。

节点代表基于模型的设计项目或工件。图的起始节点有蓝色文本和周围的光晕。

Starting node of a diagram

节点边框颜色表示该节点所属的工件或工件域,例如 Requirements Toolbox™ 文件,或 Simulink 模型和库。图例窗格显示工件、工件颜色以及每个工件所属的域。

对于项目级图,警告图标()表示不可用的项目。如果该项目由于未加载而不可用,请双击该节点。如果由于指定的 ID 不存在而导致该项目不可用,那么您必须解析该链接。有关更多信息,请参阅 解析链接

边是箭头,表示基于模型的设计项目或工件内的项目之间的链接。对于项目级图,边的标签是链接类型,对于工件级图,还包括每种类型的链接数。

如果链接有变化问题,则相应的边是虚线红线。有关变更问题的更多信息,请参阅 跟踪需求链接的变更

Traceability diagram with four edges. Each edge has a dashed red line, indicating that the corresponding link has a change issue.

边箭头指向链接方向,从源节点到目标节点。链接方向不一定与影响方向相同。有关更多信息,请参阅 影响方向链接类型

影响方向

起始节点和链接之间的链接类型关系决定了该边的影响方向。有关更多信息,请参阅 链接类型。上游节点影响起始节点,下游节点受起始节点影响。

该表总结了链接类型和影响方向之间的关系。

链接类型上游关系下游影响方向
Relate涉及目标与链接方向相同
Implement目标实现者与链接方向相反
Verify目标验证者与链接方向相反
Derive派生目标与链接方向相同
Refine目标细化依据与链接方向相反
Confirm确认者目标与链接方向相同

例如,如果类型为 Implement 的链接连接两个节点,则目的地是上游,而源是下游。影响方向与链接方向相反,因为影响是从目的地到源。

您可以使用影响方向来评估变化如何向上游和下游传播。您还可以使用影响方向来评估需求分配。有关更多信息,请参阅 评估分配和影响

在工件级图中,如果两个工件中的项目之间的所有链接具有相同的类型,则链接类型定义影响方向。如果两个工件中的项目之间的链接具有不同的类型,但是所有类型都以相同的方式定义影响方向,则它们使用表中定义的影响方向。例如,DeriveRelate 链接类型都将源定义为上游。

如果两个工件中的项之间的链接具有不同的类型,并且类型定义了不同的影响方向,则包含链接源的工件被定义为上游,而包含链接目标的工件被定义为下游。

Flow chart illustrating how link type defines impact direction

使用可追溯性图

当您选择一个节点时,图会突出显示连接到所选节点的边和节点。

Traceability diagram with the furthest upstream node selected. The edge from that node to the starting node and the starting node are highlighted in pink.

从节点或边缘导航到工件

双击节点或边,您可以从节点或边导航到相应的项目、工件、链接或链接集。您也可以右键点击节点或边并选择导航到。节点或边在其各自的工件或域中打开。

Node displaying the context menu

刷新图

如果您创建了可追溯性图,然后在背景中对任何项目、工件或链接进行更改,则必须刷新该图才能将更改应用到该图。如果您加载未加载的项目或解析链接,则必须刷新图以删除警告图标()。有关更多信息,请参阅 图元素

点击分析刷新图。

修改可追溯性图视图

您可以使用工具条或图例概述窗格修改可追溯性图窗口中的视图。

Traceability Diagram window toolstrip

布局和导航

默认情况下,图是垂直布局的。您可以通过选择水平来更改布局。

当您创建图时,它会适合工作区。您可以通过点击放大或按 Ctrl+= 来放大,或者通过点击缩小或按 Ctrl+- 来缩小。您还可以使用滚轮进行缩放。您可以通过点击适应视图大小或按空格键将图再次调整到工作区。

您还可以使用显示图的“概述”窗格进行导航。地图显示您当前正在查看图的哪个区域。

Overview pane showing a traceability diagram with three levels. The current view is zoomed in on the lower-right portion of the diagram.

您可以通过点击或拖动地图来导航到另一个区域。您还可以通过按 Ctrl 并使用滚轮,或者点击并拖动滚轮来导航到图的另一个区域。

按影响方向过滤节点

您可以根据影响方向从图中过滤节点。要仅查看起始节点上游的节点,点击上游。要仅查看起始节点下游的节点,点击下游

要清除上游或下游过滤器,请点击显示全部可追溯性

按工件或域过滤节点

您可以使用图例窗格按工件或工件域从图中过滤节点。要从特定工件中过滤节点,请清除该工件的选择。要从域中过滤节点,请清除该域的选择。

Legend pane showing three artifact domains: Simulink models and libraries, Requirements Toolbox files, and Simulink Test files

注意

对于工件级图,您只能按工件域进行过滤。

隐藏边沿标签

默认情况下,图将链接类型显示为每条边的标签。您可以通过右键点击图中的边或空白处并清除始终在边沿显示标签来隐藏边标签。清除选择后,仅当您选择或指向边时才会出现边标签。

导出图

您可以将可追溯性图导出到MATLAB digraph对象。要导出图,请在可追溯性图窗口中选择导出 > 导出到 MATLAB 变量。您可以使用 digraph 对象函数来处理该对象,并使用 plot 来对其进行可视化。

您可以使用此代码来创建与可追溯性图类似的图形。在此代码中,变量 graph_for_CancelSwitchDetection 是导出的 MATLAB digraph 对象的名称。

dg = graph_for_CancelSwitchDetection;

h = plot(dg,NodeLabel=dg.Nodes.Name,EdgeLabel=dg.Edges.Labels, ...
    YData=cell2mat(dg.Nodes.LayerDepths), ...
    XData=cell2mat(dg.Nodes.IndexInCurrentLayer), ...
    interpreter="none",hittest="on",ArrowSize=15,MarkerSize=10);

nodeList = dg.Nodes.Name;

for index = 1:length(nodeList)
    cNode = nodeList(index);
    if (dg.Nodes.isStartingNode{index})
        h.highlight(cNode,NodeColor="b");
    end
end

edgeList = dg.Edges.EndNodes;

for index = 1:length(edgeList)    
    if (dg.Edges.HasChanged{index})
        h.highlight(edgeList{index,1},edgeList{index,2},EdgeColor="r");
    end
end

另请参阅

|

相关主题