EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
对 Simulink 设计进行系统测试确保您在生成代码之前考虑到了预期和非预期的行为。在基于需求的仿真测试期间,由于细微的设计错误、不完整的测试或缺少需求,部分设计可能无法得到完整的测试。 模型测试覆盖度通过统计 Simulink 设计在仿真期间被执行的情况来帮助您识别测试的完整性。 在基于需求的测试期间,模型测试覆盖度不完整的一个常见原因是缺少需求。造成这种模型测试覆盖度缺失的原因,通常是设计元素不能被追溯到更高层次的需求。收集模型测试覆盖度有助于解决这种问题。 本文介绍以三重选择算法设计为例,证实由于缺少需求,三重选择算法设计的测试是不完整的。 ◆ ◆ ◆ ◆什么是三重信号选择算法 三重信号选择算法是航天控制系统软件中常用的算法。 系统中有三个 Airspeed 传感器信号及 Valid 信号,传感器没有检测到故障时,Valid 信号为 1。根据三个 Valid 信号和 Airspeed 计算输出值,用于飞机控制。 对于本例,将选择飞机 Airspeed 信号。Airspeed 信号选择算法需求如下: - HLR_1 根据三个 Airspeed 信号计算输出:当三个 Airspeed 信号有效时,飞行控制计算机应选择三个传感器的中间值。
- HLR_2 根据两个 Airspeed 信号计算输出:当只有两个 Airspeed 信号有效时,飞行控制计算机应选择两个传感器的平均值。
- HLR_3 根据单个 Airspeed 信号计算输出:当只有一个 Airspeed 信号有效时,飞行控制计算机应选择有效信号。! z9 c \& t- A+ q& K
图 1 显示了这些需求的 Simulink 实现。 图1. Airspeed 信号选择算法的 Simulink 实现。实现算法并收集模型测试覆盖度指标 模型中的每个子系统对应的相应的需求,并为每个需求编写单独的测试用例。在运行这些测试之前,我们需要在 Simulink 中设置获取模型测试覆盖度指标。 模型测试覆盖度指标可以是对单个测试用例进行,也可以是多个测试用例的累计结果。我们将在基于需求的测试中收集整个测试集的覆盖度,以衡量完整测试集对整个设计测试覆盖情况。 模型测试覆盖度指标有很多种类型,如执行覆盖度、决策覆盖度、信号范围覆盖度和关系边界覆盖度。 在这个例子中,我们以决策覆盖度为例,它用于衡量模型中决策的所有可能逻辑结果的执行情况。如果在仿真过程中所有选择分支都被至少执行一次,则该 Simulink 模型的决策覆盖度被视为完整。 我们使用 Simulink Toolstrip 的 APPS 选项卡中的 Coverage Analyzer 应用程序启用模型测试覆盖度收集(图 2)。 图2. Simulink Toolstrip 中的 App 选项卡。打开 Coverage Analyzer 应用程序后,可以使用 Coverage 选项卡中的 Coverage ON/OFF 按钮打开覆盖度收集。我们还使用 Cumulative Collection 按钮启用累积覆盖度。然后,我们使用 Play 按钮(现在标记为 Analyze Coverage)仿真启用了覆盖度的模型(图 3)。我们用不同的测试向量进行了多次模拟。 图3. 已启用覆盖度集合的 Coverage Analyzer 应用程序。图 4 显示了获得的覆盖度。绿色突出显示表示完整的模型测试覆盖度,包括每个子系统中的所有模型对象,而红色则表示不完整的覆盖度。 图4. 来自 Airspeed 信号选择算法测试的覆盖度结果。Multiport Switch 模块上似乎缺少决策覆盖度。' ?* L% I* [+ R2 R- D* T
为了找出发生这种情况的原因,我们通过在 Simulink 中打开 Coverage Details 窗格来检查各个模块的模型测试覆盖度详细信息(图 5)。 图5. 打开 Simulink 覆盖度详细信息窗格。然后,我们单击 Multiport Switch 模块,以查看其覆盖度详细信息(图 6)。 图6. Multiport Switch 模块的覆盖度详细信息窗格。在仿真过程中,多端口交换机的第一个输入永远不是 0。回想图 1 所示的模型,其中 Multiport Switch 的第一个输入是 valid 信号的数量。因此,我们没有测试 Airspeed 信号都无效的情况。 这样缺少模型测试覆盖度的情况是因为缺少更高级别的需求造成的。当没有有效的 Airspeed 信号时,没有任何需求规定应选择哪个信号。然而,设计似乎已经包含了考虑这种情况的逻辑。 我们添加了这种缺失的需求:- HLR_4 选择无效传感器的 Airspeed 信号:当三个 Airspeed 信号均无效时,飞行控制计算机应保持之前选择的 Airspeed 信号不变。
7 n; ^+ C- Z. j/ N 然后,我们添加一个新的测试用例并重新运行测试。现在,我们得到了完整的决策覆盖度(图 7)。图7. 添加新需求后的覆盖度结果。如本例所示,在基于需求的测试中模型测试覆盖度是一种识别缺失需求的可靠方法。您可以使用模型测试覆盖度结果来确保设计的正确部分得到执行。 模型测试覆盖度不完整的另一个常见原因是死逻辑。死逻辑是 Simulink 模型或 Stateflow 图表在仿真过程中永远不能执行的任何一部分,例如 Switch 模块的输入用于不会被选择,或者状态机中用于不会发生的转移。最佳实践是在编写和执行基于需求的测试之前,使用 Simulink Design Verifier 分析模型并解决死逻辑。您还可以使用 Simulink Check 中的 Model Slicer 功能来查找和调试死逻辑。
. y$ \% {3 }, _+ }; [# h; B p/ G5 b- q/ G, X3 G' `3 p* _
* y- Q6 w2 p0 V: a+ u9 i1 W' _
7 h2 `/ W0 ~1 s+ E( L
; I, {; _2 O9 S, y" P5 d4 `. | |