测试序列编辑器
1. 概念讲解
测试序列编辑器(Test Sequence Editor)是编写 Test Sequence 模块与 Test Assessment 模块内容的图形界面。要打开它,只需双击模型中的 Test Sequence 或 Test Assessment 模块。编辑器以表格化方式组织内容:左侧是 Symbols 侧栏与 Scenarios 页,右侧主区按"行"组织测试步骤,每行有 Step(动作)、Transition(转移条件)、Next Step(下一步)、Description(描述)四列。
一个测试序列(Test Sequence)由按层次排列的测试步骤(Test Steps)组成。步骤可以携带转移(Transition),定义仿真如何根据被测系统的信号在步骤之间推进;步骤也可以带When 分解(When decomposition),其逻辑类似 if-elseif-else。指南给出了两个默认行为:新建的 Test Sequence 模块默认包含两个标准转移测试步骤;新建的 Test Assessment 模块默认包含一个带两个子步骤的 When 分解步骤。
为什么需要这样的层次结构?因为一个真实测试往往是多阶段的:初始化、激励、等待、验证、收尾。把它们组织成父子步骤,可以把一个长测试拆成可命名、可复用、可单独挂接需求的片段。
当你需要在同一个 Test Sequence 模块里放多套测试序列时,使用场景(Scenario):在编辑器左侧面板切换到 Scenarios 页,单击Use Scenarios,原有步骤与转移会被移入一个名为Scenario_1的场景页签,再新增场景即可定义更多序列。场景的完整用法见第 16 讲。
2. 操作步骤 / 工作流
(1)定义一个测试序列的基本步骤:
按"管理测试步骤"的方法添加测试步骤。
在 Step 单元格中定义输出与评估动作。
为步骤添加转移:指向 Transition 单元格并单击Add transition,在 Transition 单元格写出退出该步骤的条件,在 Next Step 下拉列表中选择目标步骤。
若需要 When 分解步骤:右键该步骤选择When decomposition(步骤上会出现对应图标),添加子步骤;在每个子步骤的 Step 单元格中先写
when运算符再写条件,最后一个子步骤不要写条件(充当 else 分支)。
(2)管理测试步骤:
添加:右键已有步骤选择Add step before(前插)或Add step after(后插);要在更低层次添加子步骤,右键父步骤选择Add sub-step。
删除:右键步骤选择Delete step。若序列只剩一个步骤则不能删除,但可选择Erase last step content清空其内容。
复制/剪切/粘贴:右键步骤名称左侧区域选择Copy step/Cut step(或快捷键 Ctrl+C / Ctrl+X);粘贴时右键选择Paste step,可进一步选Paste before step、Paste after step或Paste sub-step(快捷键 Ctrl+V)。
重排:指向步骤,其名称左侧出现拖拽图标,按住上下拖动即可;只能在同一层次内重排,移动父步骤时其子步骤跟随移动。转移编号也可拖动重排,对应的 Next Step 跟随移动。
改变层次:右键步骤选Indent step降级为子步骤——仅当前面的步骤处于同一层次时可缩进,序列第一个步骤与某个层次组的第一个步骤不能缩进;右键选Outdent step升级——只有层次组的最后一个步骤可以升级。
(3)管理输入、输出与数据对象(Symbols 侧栏):
单击工具条上的Symbols Sidebar按钮可显示或隐藏 Symbols 侧栏。侧栏按节点组织六类符号,在任意层次的测试步骤中都可访问。
各类符号的添加方式如下表:
符号类型 | 含义 | 添加与设置方法 |
|---|---|---|
Input | 输入数据或消息 | 指向 Input 节点,单击Add data或Add message,输入名称后回车 |
Output | 输出数据、消息、函数调用或触发 | 指向 Output 节点,单击Add data/Add message/Add function call/Add trigger,输入名称后回车 |
Local | 局部数据,仅在本 Test Sequence 模块内可用 | 指向 Local 节点单击Add data,输入名称;必须在第一个测试步骤中初始化 |
Constant | 只读常量,仅在本模块内可用 | 指向 Constant 节点单击Add data;再指向该常量名单击Edit,在对话框的Constant Value栏填写值 |
Parameter | 参数,模块内外均可用 | 先用 Model Explorer 在模型工作区添加参数,再在侧栏 Parameter 节点单击Add data并输入同名 |
Data Store Memory | 数据存储,模块内外均可用 | 先用 Model Explorer 在模型工作区添加 |
要编辑或删除已有符号,指向该符号名后单击Edit或Delete即可。
(4)查找与替换:
编辑器工具条上的Find & Replace图标可在动作、转移和描述文本中查找替换。打开后在Find what输入待查文本,在Replace with输入新文本,用Find Next/Find Previous定位,单击Replace执行替换。注意:只有在 Description 列处于展开状态时,搜索才会覆盖描述文本。
(5)自动语法修正:
编辑器会自动把若干 C 风格写法修正为 MATLAB 写法,无需手动改写:
自增自减:
a++修正为a=a+1;复合赋值:
a+=expr、a-=expr、a*=expr、a/=expr分别修正为a=a+expr等;求值运算符:
a!=expr修正为a~=expr,!a修正为~a;字面量显式强转:例如
y被定义为 single 类型时,y=1自动修正为y=single(1)。
(6)输出并查看活动步骤数据:
运行测试时,序列中当前正在执行的步骤称为活动步骤(Active Step)。开启活动步骤数据后,Test Sequence 模块会新增一个输出端口,把"当前在哪个步骤"作为信号输出。它的用途包括:在仿真数据检查器(Simulation Data Inspector)中观察步骤随时间的切换;把该信号接入 Test Assessment 模块作为触发信号;或在测试框架中作为其他块的输入。
开启方法:
从 Test Sequence 编辑器打开 Model Explorer,或从包含该模块的测试框架/模型打开 Property Inspector。
勾选Create data to monitor the active step。
把Data Type设为String或Enum(默认 String):
String:输出为字符串,格式为
<scenario>.<step>.<substep>,同时表明哪个场景处于活动状态。当不同场景存在同名步骤、或同一场景不同步骤存在同名子步骤时应选此项;某时间步没有活动步骤(例如步骤启用了未被激活的 Enabled Subsystem)时输出空串。Enum:输出为枚举值,格式为
<Enum name>.<step name>,不含场景名;选择 Enum 后会出现Enum name参数。序列中若有重复步骤名或子步骤名,则不能使用 Enum。
单击Apply。
查看方法:运行前在测试框架中右键该活动数据输出信号,选择Log Selected Signal(只想画曲线时无需把信号接到任何组件)。运行后在 Simulation Data Inspector 或测试管理器 Results 窗格查看:枚举类型横轴为时间、纵轴为步骤;字符串类型中步骤以时间块形式出现,名称过长时仿真数据检查器会截断开头部分以显示步骤名,空间不足时只显示能放下的步骤。
若要把活动步骤输出作为其他块(如 Test Assessment 模块)的输入,用信号线把该输出端口接到目标块输入端口,即可依据活动步骤触发动作与评估。
3. 示例
本讲以界面与符号管理为主。下面给出打开官方示例并观察活动步骤信号的命令骨架:
% 打开包含 Test Sequence 模块的模型(示例模型) open_system('TestSeqOutputFunctions'); % 双击 Test Sequence 模块即打开测试序列编辑器 open_system('TestSeqOutputFunctions/Sine and rand'); % 运行仿真,随后在仿真数据检查器中观察活动步骤信号 sim('TestSeqOutputFunctions'); Simulink.sdi.view;% 打开包含 Test Sequence 模块的模型(示例模型) open_system('TestSeqOutputFunctions'); % 双击 Test Sequence 模块即打开测试序列编辑器 open_system('TestSeqOutputFunctions/Sine and rand'); % 运行仿真,随后在仿真数据检查器中观察活动步骤信号 sim('TestSeqOutputFunctions'); Simulink.sdi.view;
4. 要点与注意事项
新建 Test Sequence 与 Test Assessment 模块的默认内容不同:前者是两个转移步骤,后者是一个带两个子步骤的 When 分解步骤,不要混用。
Local 变量必须在第一个测试步骤中初始化,否则运行时取值不确定;Constant 必须通过编辑对话框赋值,不能在步骤动作里赋值(只读)。
Parameter 与 Data Store Memory 必须先在模型工作区(Model Explorer)中建好同名对象,再在 Symbols 侧栏引用;直接在侧栏新建是不会自动落到模型工作区的。
自动语法修正只覆盖固定几类写法,它替你把 C 风格转成 MATLAB 风格,但不会替你检查语义错误。
活动步骤输出选 String 还是 Enum 的关键判据是"是否存在重名步骤":有重名只能用 String;无重名时 Enum 更适合后续做枚举比较。
时间点没有活动步骤时输出空串,这是正常现象而非错误,常见于步骤内引用了未使能的 Enabled Subsystem。
活动步骤结果图可以像其他测试结果一样加入测试结果报告.