В этом примере показано, как использовать функции командной строки Verifier™ Simulink ® Design для генерации тестовых данных, которые содержат различные значения параметров.
Примером модели является простой контроллер с одним параметром. Константа '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: 'off' 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'
The 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 27-Jan-2021 09:24:41... .............. Completed normally. Generating output files: Harness model: /tmp/BR2021ad_1584584_202060/publish_examples0/tp6e10a940/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness.slx Results generation completed. Data file: /tmp/BR2021ad_1584584_202060/publish_examples0/tp6e10a940/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_sldvdata.mat
Сгенерированные тесты должны выполняться с теми же значениями параметров, которые использовались во время анализа. Команда инициализации конфигурирует значения во время симуляции тестов. The 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 27-Jan-2021 09:24:41...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 27-Jan-2021 09:24:57... .............. Completed normally. Generating output files: Harness model: /tmp/BR2021ad_1584584_202060/publish_examples0/tp6e10a940/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness1.slx Results generation completed. Data file: /tmp/BR2021ad_1584584_202060/publish_examples0/tp6e10a940/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);