Этот пример показывает, как использовать функции командной строки 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 DisplayUnsatisfiableObjectives: 'off' AutomaticStubbing: 'on' 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' ProvingStrategy: 'Prove' MaxViolationSteps: 20 SaveDataFile: 'on' DataFileName: '$ModelName$_sldvdata' SaveExpectedOutput: 'off' RandomizeNoEffectData: 'off' SaveHarnessModel: 'on' HarnessModelFileName: '$ModelName$_harness.slx' ModelReferenceHarness: 'off' HarnessSource: 'Signal Builder' SaveReport: 'off' ReportPDFFormat: 'off' ReportFileName: '$ModelName$_report' ReportIncludeGraphics: 'off' DisplayReport: 'on' SFcnSupport: 'on' CodeAnalysisExtraOptions: '' ReduceRationalApprox: 'on' SlTestFileName: '$ModelName$_test' SlTestHarnessName: '$ModelName$_sldvharness' SlTestHarnessSource: 'Inport' StrictEnhancedMCDC: 'off' RebuildModelRepresentation: 'Always'
Функция 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 11-Jan-2019 05:54:36... .............. Completed normally. Generating output files: Harness model: /tmp/BR2019ad_1035872_198992/publish_examples0/tp7932d533/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness.slx Results generation completed. Data file: /tmp/BR2019ad_1035872_198992/publish_examples0/tp7932d533/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);
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 11-Jan-2019 05:54:58... ............ Completed normally. Generating output files: Harness model: /tmp/BR2019ad_1035872_198992/publish_examples0/tp7932d533/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness1.slx Results generation completed. Data file: /tmp/BR2019ad_1035872_198992/publish_examples0/tp7932d533/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);