配置 S-Function 以生成测试用例
此示例说明如何编译 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/Bdoc25b_2988451_609737/tp3982e13a_a874_4fe6_832b_a5477b5e98bf/tp100c6fee_639f_4132_9d3e_94f88c84528c.c /tmp/Bdoc25b_2988451_609737/tp3982e13a_a874_4fe6_832b_a5477b5e98bf/tpf4adb494_bb5e_444a_b6dc_31c77377c1be.c -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25b.2988451/build/runnable/matlab/bin/glnxa64 -lmwsl_sfcn_cov_bridge -output sldvexSFunctionHandlingSFcn Building with 'gcc'. MEX completed successfully. mex sldvexSFunctionHandlingSource.c /tmp/Bdoc25b_2988451_609737/tp3982e13a_a874_4fe6_832b_a5477b5e98bf/sldvexSFunctionHandlingSFcn.c /tmp/Bdoc25b_2988451_609737/tp3982e13a_a874_4fe6_832b_a5477b5e98bf/tp14284a38_16ff_408b_add8_74cd639afa77.c /tmp/Bdoc25b_2988451_609737/tp3982e13a_a874_4fe6_832b_a5477b5e98bf/tpc56c5e2e_457e_47f5_a716_cdb6de16244e.c -L/mathworks/devel/bat/filer/batfs2566-0/Bdoc25b.2988451/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);