基于需求的模型开发测试
根据需求测试自动驾驶仪子系统。
此示例演示了如何使用测试管理器、测试框架、Test Sequence 模块和 Test Assessment 模块根据需求测试子系统。需求文档链接到测试用例和测试框架,并且 verify
语句评估被测组件。
当你建立模型时,你可以添加测试用例来根据需求验证模型。后续用户可以运行相同的测试用例,然后添加测试用例来完成进一步的验证目标,例如实现 100%覆盖率或验证生成的代码。
此示例使用三种场景根据需求测试 Roll Reference
子系统。Test Sequence 模块提供输入,Test Assessment 模块评估组件。Roll Reference
子系统是自动驾驶仪控制系统的一个组成部分。Roll Reference
控制飞机滚转控制系统的参考角度。该子系统未通过一项评估,从而促使设计变更,限制了高输入角度下的子系统输出。
路径和示例文件
输入以下内容来存储示例的路径和文件名:
topModel = 'TestAndVerificationAutopilotExample'; rollModel = 'RollAutopilotMdlRef'; testHarness = 'RollReference_Requirement1_3'; testFile = 'AutopilotTestFile.mldatx'; reqDoc = 'RollAutopilotRequirements.txt';
打开测试文件和模型
打开 RollAutopilotMdlRef
模型。完整的控制系统 TestAndVerificationAutopilotExample
参考了该模型。
open_system(rollModel)
在测试管理器中打开测试文件。
tf = sltest.testmanager.load(testFile); sltest.testmanager.view;
打开需求文档。在测试浏览器中,展开树中的 AutopilotTestFile 和基本设计测试用例,然后点击需求 1.3 测试。在需求 1.3 测试选项卡中,展开需求。双击任意需求链接即可打开需求编辑器,您可以在其中查看需求。
在该文件中,需求 1.3.1 规定:当滚转保持模式成为活动模式时,滚转保持参考应设置为飞机的实际滚转角度,子需求中描述的条件除外。
子需求 1.3.1.1 规定:如果在侧倾保持接合时实际滚转角度在任一方向上小于 6 度,则应将侧倾保持参考设置为零。
子需求 1.3.1.2 规定:如果在侧倾保持接合时实际侧倾角大于 30 度,则侧倾保持基准应设置为与实际滚转角度滚转角度方向的 30 度。
子需求 1.3.1.3 规定:如果旋钮在任一方向上指令 3 度或更多,则应将滚转参考设置为驾驶舱旋钮指令,最大限制为 30 度。
测试用例创建了三个场景,分别测试需求中的正常情况和异常情况。
需求文档使用映射到 Test Sequence 模块和测试步骤的 URL 来跟踪到测试框架。打开测试框架并突出显示与参考需求 1.3 相关的组件。
sltest.harness.open([rollModel '/Roll Reference'],testHarness) rmi('highlightModel','RollReference_Requirement1_3')
Test Sequence 模块、Test Assessment 模块和被测组件链接到需求文档。通过选择应用程序 > 需求管理器来突出显示需求链接,然后单击测试框架模型中的“突出显示链接”。您还可以通过单击工具条中的切换需求链接突出显示来突出显示测试序列编辑器中的链接。
Test Sequence
打开 Test Sequence 模块。
open_system('RollReference_Requirement1_3/Test Sequence')
Test Sequence 模块为三种场景创建测试输入:
在每次测试中,测试序列设置一个信号级别,然后启动自动驾驶仪。测试序列检查 PhiRef
在转移到下一个信号电平之前是否在最短时间 DurationLimit
内保持稳定。对于前两种场景,测试序列将 EndTest
局部变量设置为 1
,触发向下一个场景的转移。
这些场景检查基本的组件功能,但不一定能实现 100%覆盖率等目标。
测试评估
打开 Test Assessment 模块。
open_system('RollReference_Requirement1_3/Test Assessment')
Test Assessment 模块评估 Roll Reference
。评估模块是一个库链接子系统,有助于多个测试框架之间重用测试评估。该模块包含 verify
语句,涵盖:
需求:当
Phi
在低限和高限内运行时,PhiRef
=Phi
。需求:当
Phi < 6
度时PhiRef = 0
。需求:当
Phi > 30
度时PhiRef = 30
。需求:当
TurnKnob
启用时,在TurnKnob >= 3
度时PhiRef = TurnKnob
。
验证子系统
要运行测试,请在测试管理器中,右键单击测试浏览器窗格中的需求 1.3 测试,然后点击运行。
仿真返回测试管理器中的 verify
语句结果和仿真输出。verify_high_pos
语句失败。
单击测试管理器中的结果和工件。
在结果树中,展开验证语句。点击 Simulink:verify_high_pos。当语句失败时会显示跟踪信息。
单击工具条中的子图,并选择两个垂直排列的图。在可视化窗格中选择下方的图。
在结果树中,展开结果、需求 1.3 测试和模拟输出。
选择
PhiRef
和Phi
。输出与上图中的verify
结果一致。观测到当Phi
超过 30 度时,PhiRef
也超过 30 度。
更新 RollReference
以限制 PhiRef
信号。
关闭测试框架。
如图所示,向模型添加一个 Saturation 模块。
将下限设置为
-30
,将上限设置为30
。模块与其需求链接起来。从需求浏览器中,将需求 1.1.2 拖到 Saturation 模块。模块上会出现一个图标,并突出显示该需求。
再次运行测试。verify
语句通过,并且测试管理器中的输出显示 PhiRef
不超过 30 度。
close_system(rollModel,0); close_system(topModel,0); close_system('RollRefAssessLib',0); sltest.testmanager.clear; sltest.testmanager.clearResults; sltest.testmanager.close; clear topModel reqDoc rollModel testHarness testFile harnessLink