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

Этот пример показывает, как использовать функции командной строки 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'
           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);