This example shows how to generate model coverage report by simulating the test harness model with the Signal Editor Inputs block. You can simulate a single test case or counterexample by selecting the active scenario in the Signal Editor dialog box. For more information see, Simulate Harness Model by Using the Signal Editor Inputs Block.
To simulate all the test cases and measure their combined model coverage, use the cvsim
or the parsim
command.
In this example, you generate a harness model by selecting the Signal Editor as the harness source. The Signal Editor scenarios consists of signal sources that are associated with the test cases or counterexamples. Then, to generate combined model coverage report, you simulate all the scenarios by using the cvsim
or parsim
function.
Create a harness model for the sldvdemo_cruise_control
model by using the sldvharnessopts
options. Set the HarnessSource
option to Signal Editor
.
model = 'sldvdemo_cruise_control'; open_system(model); opts = sldvoptions; opts.Mode = 'TestGeneration'; opts.SaveHarnessModel = 'on'; opts.HarnessSource = 'Signal Editor'; opts.HarnessModelFileName = 'sldvdemo_cruise_control_harness'; opts.SaveReport = 'off';
Analyze the model by using the sldvrun
function and sldvoptions
.
sldvrun('sldvdemo_cruise_control', opts); save_system('sldvdemo_cruise_control_harness');
Checking compatibility for test generation: model 'sldvdemo_cruise_control' Compiling model...done Building model representation...done 'sldvdemo_cruise_control' is compatible for test generation with Simulink Design Verifier. Generating tests using model representation from 30-Jul-2020 14:47:42... ........................ Completed normally. Generating output files: Harness model: /tmp/BR2020bd_1444674_32127/publish_examples4/tpd27f8815/ex99648832/sldv_output/sldvdemo_cruise_control/sldvdemo_cruise_control_harness.slx Results generation completed. Data file: /tmp/BR2020bd_1444674_32127/publish_examples4/tpd27f8815/ex99648832/sldv_output/sldvdemo_cruise_control/sldvdemo_cruise_control_sldvdata.mat
After the analysis generates the harness model, use this code that uses cvtest
and cvsim
functions to generate the combined model coverage report.
signalEditorBlock = 'sldvdemo_cruise_control_harness/Inputs'; numOfScenarios = str2double(get_param(signalEditorBlock,'NumberOfScenarios')); harnessModel = 'sldvdemo_cruise_control_harness'; test = cvtest(harnessModel); test.modelRefSettings.enable = 'On'; test.modelRefSettings.excludeTopModel = 1; covData = []; for id = 1:numOfScenarios set_param(signalEditorBlock,'ActiveScenario',id); aCovData = cvsim(harnessModel); if isempty(covData) covData = aCovData; else covData = covData + aCovData; end end save_system('sldvdemo_cruise_control_harness'); cvhtml('Coverage_Harness',covData);
Optionally, you can use this code that uses the parsim
function to generate the combined model coverage report.
signalEditorBlock = 'sldvdemo_cruise_control_harness/Inputs'; numOfScenarios = str2double(get_param(signalEditorBlock,'NumberOfScenarios')); harnessModel = 'sldvdemo_cruise_control_harness'; simIn = Simulink.SimulationInput.empty(0,numOfScenarios); for id = 1:numOfScenarios simIn(id) = Simulink.SimulationInput(harnessModel); simIn(id) = simIn(id).setBlockParameter(signalEditorBlock,'ActiveScenario', id); simIn(id) = simIn(id).setModelParameter('CovEnable', 'on'); simIn(id) = simIn(id).setModelParameter('CovSaveSingleToWorkspaceVar', 'on'); end simOut = parsim(simIn); cvhtml('Coverage_Harness',simOut.covdata);
[30-Jul-2020 14:48:12] Checking for availability of parallel pool... Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 12). [30-Jul-2020 14:49:16] Starting Simulink on parallel workers... [30-Jul-2020 14:49:48] Configuring simulation cache folder on parallel workers... [30-Jul-2020 14:49:49] Loading model on parallel workers... [30-Jul-2020 14:50:22] Running simulations... [30-Jul-2020 14:50:36] Completed 1 of 3 simulation runs [30-Jul-2020 14:50:36] Completed 2 of 3 simulation runs [30-Jul-2020 14:50:37] Completed 3 of 3 simulation runs [30-Jul-2020 14:50:37] Cleaning up parallel workers...
The coverage report indicates that 100% coverage is achieved by simulating all the test cases for sldvdemo_cruise_control_model
.
% To complete this example, close the models. close_system('sldvdemo_cruise_control_harness', 0); close_system('sldvdemo_cruise_control', 0);