Используя функции командной строки, чтобы поддержать изменяющиеся параметры

В этом примере показано, как использовать функции командной строки 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™

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'
                        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'
    DetectBlockInputRangeViolations: '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: '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 30-Jan-2020 01:00:24...
..............

Completed normally.

Generating output files:

    Harness model:
    /tmp/BR2020ad_1302590_239645/publish_examples2/tp620e0d45/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness.slx

Results generation completed.

    Data file:
    /tmp/BR2020ad_1302590_239645/publish_examples2/tp620e0d45/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 30-Jan-2020 01:00:24...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 30-Jan-2020 01:01:01...
............

Completed normally.

Generating output files:

    Harness model:
    /tmp/BR2020ad_1302590_239645/publish_examples2/tp620e0d45/ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness1.slx

Results generation completed.

    Data file:
    /tmp/BR2020ad_1302590_239645/publish_examples2/tp620e0d45/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);