主要内容

本页采用了机器翻译。点击此处可查看英文原文。

配置 S-Function 以生成测试用例

R2026b

此示例说明如何编译 S-Function,使其与 Simulink® Design Verifier™ 兼容,以便生成测试用例。Simulink Design Verifier 支持符合以下条件的 S-Function:

  • 使用代码继承工具生成,并且 def.Options.supportCoverageAndDesignVerifier 设置为 true,

  • 使用 SFunctionBuilder 生成,并且在 SFunctionBuilder 对话框的编译信息选项卡上选择了启用对 Design Verifier 的支持,或者

  • 使用函数 slcovmex (Simulink Coverage) 编译,并且传递了选项 -sldv。

编译 S-Function 以使其与 Simulink Design Verifier 兼容

人工编写的 S-Function 位于文件 sldvexSFunctionHandlingSFcn.c 中,查找表的用户源代码位于文件 sldvexSFunctionHandlingSource.c 中。调用函数 slcovmex (Simulink Coverage) 以编译 C-MEX S-Function,使其与 Simulink Design Verifier 兼容。

slcovmex('-sldv', ...
        '-output', 'sldvexSFunctionHandlingSFcn',...
        'sldvexSFunctionHandlingSource.c','sldvexSFunctionHandlingSFcn.c');
mex /tmp/Bdoc26b_3351752_1680723/tpdcb316b0_6840_4ede_9dab_c933f5a04ac8/tpd0f180a5_4d35_4386_b96c_b2f6b7880510.c /tmp/Bdoc26b_3351752_1680723/tpdcb316b0_6840_4ede_9dab_c933f5a04ac8/tp1563fb47_8b0f_4a4a_b1d9_7ecc78edf6d8.c -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc26b.3351752/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn
Building with 'gcc'.
MEX completed successfully.
mex sldvexSFunctionHandlingSource.c /tmp/Bdoc26b_3351752_1680723/tpdcb316b0_6840_4ede_9dab_c933f5a04ac8/sldvexSFunctionHandlingSFcn.c /tmp/Bdoc26b_3351752_1680723/tpdcb316b0_6840_4ede_9dab_c933f5a04ac8/tpe9219e2a_be55_4349_a87a_a664d83c753e.c /tmp/Bdoc26b_3351752_1680723/tpdcb316b0_6840_4ede_9dab_c933f5a04ac8/tp0440493e_a3bf_4ebf_9f11_22e6c0ab263c.c -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc26b.3351752/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn
Building with 'gcc'.
MEX completed successfully.

创建测试套件

示例模型 sldvexSFunctionHandlingExample 包含人工编写的 S-Function,用于实现查找表算法。S-Function 模块返回第一个输出端口处的插值,并返回第二个输出端口处的插值状态。如果发生下限饱和,则第二个输出端口返回值 -1;如果发生上限饱和,则返回值 1;否则返回值 0。打开 sldvexSFunctionHandlingExample 模型,并通过打开对测试生成的 S-Function 支持来配置分析选项。运行分析后,Simulink Design Verifier 会返回满足所有覆盖率目标的测试套件。

open_system('sldvexSFunctionHandlingExample');

opts = sldvoptions;
opts.Mode = 'TestGeneration';
opts.ModelCoverageObjectives = 'ConditionDecision';
opts.SaveHarnessModel = 'off';
opts.SaveReport = 'off';
opts.SFcnSupport = 'on';

[status, fileNames] = sldvrun('sldvexSFunctionHandlingExample', opts, true);

验证完整覆盖率

sldvruntest 函数验证测试套件是否实现了完整模型覆盖率。cvhtml (Simulink Coverage) 函数生成覆盖率报告,指示生成的测试向量实现了 100% 的条件和决策覆盖率。

[~, finalCov] = sldvruntest('sldvexSFunctionHandlingExample', fileNames.DataFile, [], true);
cvhtml('Final Coverage', finalCov);

清理

要完成演示,请关闭所有模型。

close_system('sldvexSFunctionHandlingExample', 0);