【问题标题】:Matlab Function block with Design Verifier带有设计验证器的 Matlab 功能块
【发布时间】:2014-09-11 12:13:40
【问题描述】:

例如,我的 simulink 模型中有一个 Matlab 功能块,它是这样的:

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

设计验证器不会为我每次调用sldv.test 生成测试。它在最后一次调用它时只生成一个测试。

对于生成length(rowValues) 测试的可能解决方案有什么想法吗?谢谢

【问题讨论】:

    标签: matlab simulink


    【解决方案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 的所有元素都等于 row 的期望行为。

    这里是关于vectorization in MATLAB的更多信息的链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-05
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多