为什么您应该收集模型测试覆盖率度量
作者:Pat Canny, MathWorks
对Simulink进行系统测试®设计确保在生成代码之前考虑到预期的和非预期的行为。在基于需求的模拟测试期间,由于细微的设计错误、不完整的测试或缺少需求,可能无法执行部分设计。模型测试覆盖率通过测量在模拟过程中执行了多少Simulink设计来帮助您识别测试中的这些差距。
在基于需求的测试期间,不完整的模型测试覆盖的一个常见原因是缺少需求。这种类型的模型测试覆盖率缺失通常是不能追溯到更高层次需求的设计元素的结果。收集模型测试覆盖率可以帮助您解释这种情况。本文描述了一个例子,在这个例子中,由于缺少需求,对一个三重选择算法设计的测试被发现是不完整的。
三重选择算法:概述和要求
三路信号选择算法是航天控制系统软件中常用的一种算法。在三重信号选择中,从三个独立的传感器中选择一个单一的“投票”信号用于控制飞机。如果传感器没有检测到故障,则该传感器为“有效”。
在本例中,将选择飞机空速信号。空速信号选择算法要求如下:
- HLR_1三传感器空速信号选择:当三个空速信号有效时,飞控计算机选择三个传感器的中间值。
- HLR_2双传感器空速信号选择:当只有两个空速信号有效时,飞控计算机应选择两个传感器的平均值。
- HLR_3单传感器空速信号选择:当只有一个空速信号有效时,飞行控制计算机应选择有效信号。
图1显示了这些需求的Simulink实现。
实现算法和收集模型测试覆盖率度量
我们在模型中的专用子系统中实现每个需求,并为每个需求编写单独的测试用例。在运行这些测试之前,我们需要确保我们正在捕获模型测试覆盖率度量。
模型测试覆盖率度量可以是单独的(为单个测试收集)或累积的(跨多个测试聚合)。我们将收集基于需求的测试的累积覆盖率,以衡量我们的完整测试套件执行完整设计的情况。
有许多类型的模型测试覆盖度量,例如执行覆盖、决策覆盖、信号范围覆盖和关系边界覆盖。在本例中,我们对决策覆盖感兴趣,这是一种结构覆盖,用于度量模型中决策的所有可能逻辑结果的执行情况。如果在仿真过程中至少选择一次开关的所有输入,则Simulink模型对象(如Switch块)将获得完整的决策覆盖。
中的coverage Analyzer应用程序在模型上启用模型测试覆盖率收集应用程序选项卡的Simulink Toolstrip(图2)。
一旦我们打开覆盖分析器应用程序,我们可以使用报道开/关按钮。报道选项卡。方法启用累积覆盖累积收集按钮。方法来模拟覆盖启用的模型玩按钮,现在标记为分析报道(图3)。我们在每次模拟中使用不同的测试向量进行多次模拟。
图4显示了结果的覆盖率。绿色高亮表示完整的模型测试覆盖,包括每个子系统中的所有模型对象,而红色表示不完整的覆盖。
决策覆盖似乎在Multiport Switch块上缺失了。为了理解为什么会发生这种情况,我们通过打开Simulink中的coverage details窗格(图5)来检查单个块的模型测试覆盖细节。
然后我们单击MultiportSwitch块以查看其覆盖细节(图6)。
在模拟过程中,多端口交换机的第一个输入从来不是0。回想一下图1中所示的模型,其中Multiport Switch的第一个输入是有效信号的数量。因此,我们没有测试一个空速信号都无效的情况。
这种缺失的模型测试覆盖率是由于缺失了更高层次的需求。当空速信号无效时,没有任何要求指定应选择哪个信号。然而,设计中似乎已经包含了解释这种情况的逻辑。
我们添加了这个缺失的需求:
- HLR_4选择无效传感器空速信号:当三个空速信号都无效时,飞行控制计算机将保留所选的空速信号。
然后我们添加一个新的测试用例并重新运行测试。现在我们得到了完整的决策覆盖(图7)。
正如这个例子所示,模型测试覆盖率是在基于需求的测试期间识别缺失需求的可靠方法。您可以使用模型测试覆盖率结果来确保您的设计的正确部分正在被执行。
不完整的模型测试覆盖的另一个常见原因是死的逻辑.死逻辑是Simulink模型或状态流的任何部分®在模拟过程中永远不能执行的图表,例如Switch块的输入永远不能被选择,或者状态机中的转换永远不能被执行。最佳实践是在编写和执行基于需求的测试之前,使用Simulink Design Verifier™来分析模型并解决死逻辑。您还可以使用Simulink Check™中的Model切片器功能来细化和调试死逻辑。
2019年出版的