Этот пример показывает, как сгенерировать отчет покрытия модели путем симуляции модели тестовой обвязки с блоком Signal Editor Inputs. Можно моделировать один тест или контрпример путем выбора активного сценария в диалоговом окне Signal Editor. Для получения дополнительной информации смотрите, Моделируйте Модель тестовой обвязки при помощи редактора Инпутса Блока Сигнала.
Чтобы моделировать все тесты и измерить их объединенное покрытие модели, используйте cvsim
или команду parsim
.
В этом примере вы генерируете модель тестовой обвязки путем выбора Signal Editor как источника обвязки. Сценарии Редактора Сигнала состоят из источников сигнала, которые сопоставлены с тестами или контрпримерами. Затем чтобы сгенерировать объединенный отчет покрытия модели, вы моделируете все сценарии при помощи функции parsim
или cvsim
.
Создайте модель тестовой обвязки для модели sldvdemo_cruise_control
при помощи опций sldvharnessopts
. Установите опцию HarnessSource
на 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';
Анализируйте модель при помощи функции sldvrun
и 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 11-Jan-2019 06:07:12... ........................ Completed normally. Generating output files: Harness model: /tmp/BR2019ad_1035872_198992/publish_examples0/tp7edbe64a/ex99648832/sldv_output/sldvdemo_cruise_control/sldvdemo_cruise_control_harness.slx Results generation completed. Data file: /tmp/BR2019ad_1035872_198992/publish_examples0/tp7edbe64a/ex99648832/sldv_output/sldvdemo_cruise_control/sldvdemo_cruise_control_sldvdata.mat
После того, как анализ генерирует модель тестовой обвязки, используйте этот код, который использует cvtest
и функции cvsim
, чтобы сгенерировать объединенный отчет покрытия модели.
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);
Опционально, можно использовать этот код, который использует функцию parsim
, чтобы сгенерировать объединенный отчет покрытия модели.
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);
[11-Jan-2019 06:07:33] Checking for availability of parallel pool... Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 12). [11-Jan-2019 06:08:28] Starting Simulink on parallel workers... [11-Jan-2019 06:09:22] Configuring simulation cache folder on parallel workers... [11-Jan-2019 06:09:22] Loading model on parallel workers... [11-Jan-2019 06:09:35] Running simulations... [11-Jan-2019 06:09:54] Completed 1 of 3 simulation runs [11-Jan-2019 06:09:54] Completed 2 of 3 simulation runs [11-Jan-2019 06:09:54] Completed 3 of 3 simulation runs [11-Jan-2019 06:09:54] Cleaning up parallel workers...
Отчет покрытия указывает, что 100%-е покрытие достигается путем симуляции всех тестов для sldvdemo_cruise_control_model
.
% To complete this example, close the models. close_system('sldvdemo_cruise_control_harness', 0); close_system('sldvdemo_cruise_control', 0);