为子系统生成测试用例
您可以分析模型内的子系统。这种技术适用于大型模型,您可以在较小、更易于管理的报告中查看分析结果。以下两种方法可以帮助您以不同的模式为子系统生成测试用例:
为正常模式的子系统生成测试用例
此示例显示如何分析 Controller 模型中的 sldvdemo_cruise_control 子系统。
打开示例模型:
openExample('sldv/CruiseControlTestGenerationExample',... 'supportingFile', 'sldvdemo_cruise_control');
右键点击
Controller子系统,然后选择 Design Verifier > 启用 "视为原子单元" 进行分析。Controller子系统的“函数模块参数”对话框打开。选择视为原子单元。
原子子系统相对于父模型作为一个单元执行。Subsystem 模块执行不与父模块执行交错。您可以提取原子子系统以用作独立模型。
要使用 Simulink® Design Verifier™ 分析子系统,请设置视为原子单元参数。
设置该参数后,其他参数才可用,但您可以忽略它们。
要关闭对话框,请点击确定。
在仿真选项卡的文件部分中,选择 保存 > 另存为 并使用新名称保存巡航控制测试生成模型。
要开始子系统分析并生成测试用例,请右键点击
Controller子系统,然后选择Design Verifier > 生成子系统测试。Simulink Design Verifier 软件对子系统进行分析。分析完成后,点击以下选项之一查看
Controller子系统的分析结果:在模型上突出显示分析结果
在仿真数据检查器中查看测试
详细分析报告
创建框架模型
将测试用例导出到 Simulink Test
仿真测试并生成模型覆盖率报告
注意
处理一定数量的目标后,如果分析停止,或者分析超时,您可以使用测试生成顾问来更好地了解哪些子系统导致了问题。有关详细信息,请参阅 使用测试生成顾问识别可分析组件。
审查子系统分析的结果,并将结果与 对模型执行分析 中所述的完整模型分析结果进行比较:
子系统分析将控制器作为一个独立模型进行分析。
控制器子系统包含巡航控制测试生成模型中的所有测试目标。两种分析都会生成相同的测试用例。
为软件在环模式的子系统生成测试用例
此示例展示如何使用 sldv_cruise_control_ats 模型在软件在环(SIL) 模式下为原子子系统生成测试用例。
打开示例模型:sldv_cruise_control_ats
model = 'sldv_cruise_control_ats';
open_system(model); 1.在配置参数窗口中,点击代码生成,并将系统目标文件设置为 ert.tlc。
2.通过右键点击 PI 控制器 > 模块参数(子系统) > 代码生成 > 函数封装来设置子系统的函数封装,并将其设置为可重用函数或不可重用函数。
3.点击硬件实现,然后将设备供应商和设备类型设置为您的 SIL 系统的供应商和类型。在此示例中,将设备供应商设置为 Intel,将设备类型设置为 x-86-32 (Linux)。
为目标生成代码。对于 SIL 模式下的子系统分析,需要在调用测试生成之前生成代码。
如果测试生成目标是代码生成为顶层模型,则通过输入以下内容为该目标生成代码:
slbuild(model,'StandaloneCoderTarget');### Unable to find Simulink cache file "sldv_cruise_control_ats.slxc". ### Searching for referenced models in model 'sldv_cruise_control_ats'. ### Total of 1 models to build. ### Starting build procedure for: sldv_cruise_control_ats ### Generating code and artifacts to 'Model specific' folder structure ### Generating code into build folder: /tmp/Bdoc25a_2864802_2151310/tp2e836fb6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw ### Invoking Target Language Compiler on sldv_cruise_control_ats.rtw ### Using System Target File: /mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/rtw/c/ert/ert.tlc ### Loading TLC function libraries ....... ### Initial pass through model to cache user defined code . ### Caching model source code ................................................................ ### Writing header file sldv_cruise_control_ats_types.h ### Writing header file sldv_cruise_control_ats.h ### Writing header file rtwtypes.h ### Writing source file sldv_cruise_control_ats.c ### Writing header file sldv_cruise_control_ats_private.h . ### Writing source file ert_main.c ### TLC code generation complete (took 3.528s). ### Saving binary information cache. ### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux) ### Creating '/tmp/Bdoc25a_2864802_2151310/tp2e836fb6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw/sldv_cruise_control_ats.mk' ... ### Building 'sldv_cruise_control_ats': "/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/bin/glnxa64/gmake" -j 4 -l 4 -f sldv_cruise_control_ats.mk all gcc -c -fwrapv -fPIC -O0 -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=1 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0 -DTID01EQ=0 -DMODEL=sldv_cruise_control_ats -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 -I/tmp/Bdoc25a_2864802_2151310/tp2e836fb6/sldv-ex49944916 -I/tmp/Bdoc25a_2864802_2151310/tp2e836fb6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/extern/include -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/simulink/include -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/rtw/c/src -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/rtw/c/src/ext_mode/common -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/rtw/c/ert -o "sldv_cruise_control_ats.o" "/tmp/Bdoc25a_2864802_2151310/tp2e836fb6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw/sldv_cruise_control_ats.c" gcc -c -fwrapv -fPIC -O0 -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=1 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0 -DTID01EQ=0 -DMODEL=sldv_cruise_control_ats -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 -I/tmp/Bdoc25a_2864802_2151310/tp2e836fb6/sldv-ex49944916 -I/tmp/Bdoc25a_2864802_2151310/tp2e836fb6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/extern/include -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/simulink/include -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/rtw/c/src -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/rtw/c/src/ext_mode/common -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc25a.2864802/build/runnable/matlab/rtw/c/ert -o "ert_main.o" "/tmp/Bdoc25a_2864802_2151310/tp2e836fb6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw/ert_main.c" ### Creating standalone executable ../sldv_cruise_control_ats ... g++ -o ../sldv_cruise_control_ats sldv_cruise_control_ats.o ert_main.o ### Created: ../sldv_cruise_control_ats ### Successfully generated all binary outputs. gmake: Nothing to be done for `all'. ### Successful completion of build procedure for: sldv_cruise_control_ats ### Simulink cache artifacts for 'sldv_cruise_control_ats' were created in '/tmp/Bdoc25a_2864802_2151310/tp2e836fb6/sldv-ex49944916/sldv_cruise_control_ats.slxc'. Build Summary Top model targets: Model Build Reason Status Build Duration ========================================================================================================================== sldv_cruise_control_ats Information cache folder or artifacts were missing. Code generated and compiled. 0h 0m 16.714s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 17.763s
注意:
如果测试生成目标是作为模型参考生成的代码,则通过输入以下内容为目标生成代码:
% slbuild(model,'ModelReferenceCoderTargetOnly');如果测试生成目标和生成的代码接口目标不匹配,则测试生成将返回错误。
如果为两个目标都生成代码,则测试生成将返回错误。
4.在 App 选项卡中,点击 Design Verifier。然后,在 Design Verifier 选项卡中,将目标设置为作为顶层模型生成的代码。使用以下方法之一生成测试:
右键点击 PI Controller 模块,然后点击 Design Verifier > 生成子系统测试来生成测试。
通过从工具条中取消固定来选择 PI 控制器模块。然后点击生成测试。
为子系统创建一个框架,然后通过右键点击 PI 控制器模块,然后点击测试框架 > 为 PI 控制器创建来调用测试生成。选择框架名称并点击确定。
打开新的框架。然后点击 Design Verifier 并点击生成测试。
或者,您可以通过输入以下内容使用 API 来生成测试:
opts = sldvoptions;
opts.TestgenTarget = Sldv.utils.Options.TestgenTargetGeneratedCodeStr;
[status, fileNames] = sldvrun(ssPath,opts,true);
5.查看子系统分析的结果,并将结果与为正常模式的子系统生成测试用例中所述的全模型分析结果进行比较。