В этом примере показано, как использовать функции командной строки Simulink® Design Verifier™, чтобы сгенерировать тестовые данные, который включает различные значения параметров.
Модель в качестве примера является простым контроллером одним параметром. Постоянный параметр 'control_mode' может быть или 1 или 2. Параметр должен принять оба значения для тестов, чтобы достигнуть полного обзора. Значение определяет блок switch выход и который включил подсистему, выполнится.
open_system('sldvdemo_param_controller');
Simulink Design Verifier не идентифицирует значения параметров. Инструмент использует значения параметров в начале анализа для генерации тестов и доказательства свойств. Можно обеспечить инструмент, чтобы включить изменяющиеся значения параметров путем повторения анализа с различными значениями.
Первая итерация верификатора проекта будет использовать control_mode=1.
control_mode = 1;
Simulink Design Verifier функционирует объекты опций использования, созданные с sldvoptions
функционируйте, чтобы управлять всеми аспектами анализа и вывести.
В этом примере мы запустим Simulink Design Verifier в режиме генерации тестов максимум для 300 секунд и произведем модель тестовой обвязки. Мы отключим генерацию отчета.
Значения по умолчанию остающихся опций собираются правильно сгенерировать тесты. Можно использовать get
команда, чтобы отобразить все опции и значения.
opts = sldvoptions; opts.Mode = 'TestGeneration'; opts.MaxProcessTime = 300; opts.SaveHarnessModel = 'on'; opts.SaveReport = 'off'; opts.HarnessModelFileName = '$ModelName$_harness.slx'; get(opts)
Mode: 'TestGeneration' MaxProcessTime: 300 AutomaticStubbing: 'on' UseParallel: 'off' DesignMinMaxConstraints: 'on' OutputDir: 'sldv_output/$ModelName$' MakeOutputFilesUnique: 'on' BlockReplacement: 'off' BlockReplacementRulesList: '<FactoryDefaultRules>' BlockReplacementModelFileName: '$ModelName$_replacement' Parameters: 'off' ParametersConfigFileName: 'sldv_params_template.m' ParameterNames: [] ParameterConstraints: [] ParameterUseInAnalysis: [] ParametersUseConfig: 'off' TestgenTarget: 'Model' ModelCoverageObjectives: 'ConditionDecision' TestConditions: 'UseLocalSettings' TestObjectives: 'UseLocalSettings' MaxTestCaseSteps: 10000 TestSuiteOptimization: 'Auto' Assertions: 'UseLocalSettings' ProofAssumptions: 'UseLocalSettings' ExtendExistingTests: 'off' ExistingTestFile: '' IgnoreExistTestSatisfied: 'on' IgnoreCovSatisfied: 'off' CoverageDataFile: '' CovFilter: 'off' CovFilterFileName: '' IncludeRelationalBoundary: 'off' RelativeTolerance: 0.0100 AbsoluteTolerance: 1.0000e-05 DetectDeadLogic: 'off' DetectActiveLogic: 'off' DetectOutOfBounds: 'on' DetectDivisionByZero: 'on' DetectIntegerOverflow: 'on' DetectInfNaN: 'off' DetectSubnormal: 'off' DesignMinMaxCheck: 'off' DetectDSMAccessViolations: 'off' DetectHISMViolationsHisl_0002: 'off' DetectHISMViolationsHisl_0003: 'off' DetectHISMViolationsHisl_0004: 'off' DetectHISMViolationsHisl_0028: 'off' DetectBlockInputRangeViolations: 'off' ProvingStrategy: 'Prove' MaxViolationSteps: 20 DataFileName: '$ModelName$_sldvdata' SaveExpectedOutput: 'off' RandomizeNoEffectData: 'off' SaveHarnessModel: 'on' HarnessModelFileName: '$ModelName$_harness.slx' ModelReferenceHarness: 'on' HarnessSource: 'Signal Builder' SaveReport: 'off' ReportPDFFormat: 'off' ReportFileName: '$ModelName$_report' ReportIncludeGraphics: 'off' DisplayReport: 'on' SFcnSupport: 'on' CodeAnalysisExtraOptions: '' CodeAnalysisIgnoreVolatile: 'on' ReduceRationalApprox: 'on' SlTestFileName: '$ModelName$_test' SlTestHarnessName: '$ModelName$_sldvharness' SlTestHarnessSource: 'Inport' StrictEnhancedMCDC: 'off' RebuildModelRepresentation: 'IfChangeIsDetected'
sldvgencov
функция генерирует тестовые наборы и покрытие модели вместе. Все тесты, которые могут быть сгенерированы с текущими значениями параметров, будут собраны в модель тестовой обвязки и получившееся покрытие, возвращенное в объекте данных покрытия.
[status,coverageData,files] = sldvgencov('sldvdemo_param_controller',opts);
Checking compatibility for test generation: model 'sldvdemo_param_controller' Compiling model...done Building model representation...done 'sldvdemo_param_controller' is compatible for test generation with Simulink Design Verifier. Generating tests using model representation from 23-Jul-2021 09:13:13... .............. Completed normally. Generating output files: Harness model: /tmp/BR2021bd_1724986_151598/publish_examples0/tpca66b0f2/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness.slx Results generation completed. Data file: /tmp/BR2021bd_1724986_151598/publish_examples0/tpca66b0f2/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_sldvdata.mat
Сгенерированные тесты должны быть запущены с теми же значениями параметров, используемыми во время анализа. Команда инициализации конфигурирует значения в процессе моделирования тестов. sldvharnessmerge
функция включает команды инициализации в тестовые обвязки.
initCmdStr = 'control_mode=1;'
[path,modelName] = fileparts(files.HarnessModel);
sldvmergeharness(modelName,modelName,initCmdStr);
initCmdStr = 'control_mode=1;'
Изменение значений параметров включает дополнительную генерацию тестов. Передача объекта данных покрытия как третий вход к sldvgencov
обеспечивает функцию, чтобы проигнорировать все цели тестирования покрытия модели, которым удовлетворили. Мы используем данные о покрытии, которые были возвращены от более раннего вызова до sldvgencov
ограничить генерацию тестов неудовлетворенными целями тестирования.
control_mode=2;
[status,newCov,newFiles] = sldvgencov('sldvdemo_param_controller',opts,false,coverageData);
Validating cached model representation from 23-Jul-2021 09:13:13...change detected Checking compatibility for test generation: model 'sldvdemo_param_controller' Compiling model...done Building model representation...done 'sldvdemo_param_controller' is compatible for test generation with Simulink Design Verifier. Generating tests using model representation from 23-Jul-2021 09:13:33... .............. Completed normally. Generating output files: Harness model: /tmp/BR2021bd_1724986_151598/publish_examples0/tpca66b0f2/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness1.slx Results generation completed. Data file: /tmp/BR2021bd_1724986_151598/publish_examples0/tpca66b0f2/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_sldvdata1.mat
Другой вызов sldvharnessmerge
объединяет тестовые данные от новой обвязки и ее команды инициализации в существующую модель тестовой обвязки.
newInitCmd = 'control_mode=2;'
[path,newModelName] = fileparts(newFiles.HarnessModel);
sldvmergeharness(modelName,newModelName,newInitCmd);
newInitCmd = 'control_mode=2;'
Мы закрываем вторую модель тестовой обвязки, которая была создана, потому что тесты были объединены в первую модель тестовой обвязки. Можно выполнить набор тестов путем нажимания кнопки 'Run all' на Signal Builder.
close_system(newModelName,0); sldvdemo_playall(modelName);
Чтобы завершить пример, закройте модели и удалите сгенерированные файлы.
close_system(modelName,0);
close_system('sldvdemo_param_controller',0);
delete(files.HarnessModel);
delete(newFiles.HarnessModel);