コマンド ライン関数を使用したパラメーターの変更のサポート
この例では、Simulink® Design Verifier™ のコマンド ライン関数を使用して、さまざまなパラメーター値を含むテスト データを生成する方法を説明します。
調整可能なパラメーターをもつコントローラー モデル
このモデル例は、1 つのパラメーターをもつ単純なコントローラーです。定数パラメーター 'control_mode' は 1 または 2 の値をとります。このパラメーターは、フル カバレッジを達成するためテスト ケースで両方の値を受け入れなければなりません。この値により、スイッチ ブロックの出力と実行する有効なサブシステムが決まります。
open_system('sldvdemo_param_controller');
解析のパラメーター値の指定
Simulink Design Verifier はパラメーター値を識別しません。このツールは、テスト生成とプロパティ証明に対する解析の開始時にパラメーター値を使用します。異なる値で解析を繰り返すと、変化するパラメーター値を強制的にツールに組み込むことができます。
Design Verifier の最初の反復では、control_mode=1 を使用します。
control_mode = 1;
Simulink® Design Verifier™ のオプション
Simulink Design Verifier 関数は、関数 sldvoptions
で作成されたオプション オブジェクトを使用して、解析および出力のすべてを制御します。
この例では、テスト生成モードで最大 300 秒間 Simulink Design Verifier を実行し、ハーネス モデルを生成します。レポート生成は無効にします。
残りのオプションの既定値は、テストが生成されるように正しく設定されています。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' ParameterConfiguration: 'None' ParametersConfigFileName: 'sldv_params_template.m' ParameterNames: [] ParameterConstraints: [] ParameterUseInAnalysis: [] 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' DeadLogicObjectives: 'ConditionDecision' 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: 'on' HarnessSource: 'Signal Editor' 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' AnalyzeAllStartupVariants: 'on'
テストの生成とカバレッジの収集
関数 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 12-Aug-2022 22:44:49... .............. Completed normally. Generating output files: Harness model: /tmp/Bdoc22b_2039835_548185/tpfec624e6/sldv-ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness.slx Results generation completed. Data file: /tmp/Bdoc22b_2039835_548185/tpfec624e6/sldv-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;'
パラメーターの変更とテスト生成の反復
パラメーター値を変更して、テスト生成を追加することができます。カバレッジ データ オブジェクトを 3 番目の入力として sldvgencov
に渡すと、この関数は既にモデル カバレッジが達成されているすべてのテスト オブジェクティブを無視します。ここでは、sldvgencov
の以前の呼び出しにより返されたカバレッジ データを使用して、達成されていないテスト オブジェクティブにテスト生成を制限します。
control_mode=2;
[status,newCov,newFiles] = sldvgencov('sldvdemo_param_controller',opts,false,coverageData);
Validating cached model representation from 12-Aug-2022 22:44:49...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 12-Aug-2022 22:45:15... .............. Completed normally. Generating output files: Harness model: /tmp/Bdoc22b_2039835_548185/tpfec624e6/sldv-ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness1.slx Results generation completed. Data file: /tmp/Bdoc22b_2039835_548185/tpfec624e6/sldv-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;'
ハーネス モデルのテストの実行
テスト ケースは最初のハーネス モデルにマージされているので、作成された 2 番目のハーネス モデルを閉じます。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);