Использование функций командной строки для поддержки изменения параметров

В этом примере показано, как использовать функции командной строки Verifier™ Simulink ® Design для генерации тестовых данных, которые содержат различные значения параметров.

Модели контроллеров с регулируемым параметром

Примером модели является простой контроллер с одним параметром. Константа 'control _ mode' может быть либо 1, либо 2. Для достижения полного покрытия параметр должен взять оба значения для тестов. Значение определяет выход блока switch и то, какая активированная подсистема будет выполнена.

open_system('sldvdemo_param_controller');

Настройка значений параметров для анализа

Simulink Design Verifier не определяет значения параметров. Инструмент использует значения параметров в начале анализа для генерации тестов и проверки свойств. Можно заставить инструмент включать изменение значений параметров путем повторного анализа с различными значениями.

Первая итерация верификатора проекта будет использовать control_mode=1.

control_mode = 1;

Опции Verifier™ Simulink ® Design

Функции 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);
Для просмотра документации необходимо авторизоваться на сайте