带有Design Verifier的Matlab功能块

时间:2014-09-11 12:13:40

标签: matlab simulink

例如,我的s​​imulink模型中有一个Matlab功能块,如下所示:

function define_tests(row rowValues)
    for i=1:length(rowValues)
        sldv.test(row == rowValues(i));

每次调用sldv.test时,设计验证程序都不会生成测试。它最后一次调用时只生成一个测试。

有关生成length(rowValues)测试的可能解决方案的任何想法吗?感谢

1 个答案:

答案 0 :(得分:1)

help page for sldv.test中,它说

  

此功能没有输出,也没有影响其父节点功能

没有明确说明,但我假设sldv.test本身不一定是“执行”或“调用”,而只是作为一种表示所需行为的方式。在分析您的功能时由SLDV使用。我认为sldv.test并不打算与函数中的控制流混合,因为SLDV实际上并没有执行这个控制流。

另外,考虑一下这样一个事实,即如果要为函数排他地添加新的控制逻辑(例如for循环或if语句),以指定sldv.test的定义方式,那么这也会无意中添加无关的覆盖目标(例如,你的for循环将具有与之相关的决策覆盖目标)。 (不确定这是否与你的情况有关,但我认为我会把它扔到那里以防万一)

我认为最好的办法是避免在for循环中使用sldv.test并尝试对测试表达式进行矢量化。使用您的示例,如下所示:

function define_tests(row, rowValues)
    sldv.test(all(row == rowValues));

这应该具有指定 rowValues 的所有元素等于的所需行为。

以下是有关vectorization in MATLAB的更多信息的链接。