コマンド ライン関数を使用したパラメーターの変更のサポート
この例では、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';
テストの生成とカバレッジの収集
関数 sldvgencov
はテスト スイートとモデル カバレッジを同時に生成します。現在のパラメーター値で生成できるすべてのテストはハーネス モデルに収集され、結果のカバレッジはカバレッジ データ オブジェクトに返されます。
[status,coverageData,files] = sldvgencov('sldvdemo_param_controller',opts);
13-Feb-2024 01:00:21 Checking compatibility for test generation: model 'sldvdemo_param_controller' Compiling model...done Building model representation...done 13-Feb-2024 01:00:25 'sldvdemo_param_controller' is compatible for test generation with Simulink Design Verifier. Generating tests using model representation from 13-Feb-2024 01:00:25... .............. 13-Feb-2024 01:00:35 Completed normally. Generating output files: Harness model: /tmp/Bdoc24a_2528353_1741016/tp0f7301d6/sldv-ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness.slx 13-Feb-2024 01:00:43 Results generation completed. Data file: /tmp/Bdoc24a_2528353_1741016/tp0f7301d6/sldv-ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_sldvdata.mat
テスト ハーネスへのパラメーター初期化の統合
生成されたテスト ケースは、解析時に使用されたパラメーター値と同じ値で実行しなければなりません。初期化コマンドにより、テスト ケースのシミュレーション時の値を設定します。関数 sldvmergeharness
は初期化コマンドをテスト ハーネスに組み込みます。
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);
13-Feb-2024 01:00:48 Validating cached model representation from 13-Feb-2024 01:00:25...change detected 13-Feb-2024 01:00:48 Checking compatibility for test generation: model 'sldvdemo_param_controller' Compiling model...done Building model representation...done 13-Feb-2024 01:00:52 'sldvdemo_param_controller' is compatible for test generation with Simulink Design Verifier. Generating tests using model representation from 13-Feb-2024 01:00:52... .............. 13-Feb-2024 01:00:57 Completed normally. Generating output files: Harness model: /tmp/Bdoc24a_2528353_1741016/tp0f7301d6/sldv-ex05697027/sldv_output/sldvdemo_param_controller/sldvdemo_param_controller_harness1.slx 13-Feb-2024 01:01:04 Results generation completed. Data file: /tmp/Bdoc24a_2528353_1741016/tp0f7301d6/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 番目のハーネス モデルを閉じます。信号エディターで [すべて実行] ボタンをクリックしてテスト スイートを実行できます。
close_system(newModelName,0); sldvdemo_playall(modelName);
クリーン アップ
モデルを閉じて生成されたファイルを削除し、例を完了します。
close_system(modelName,0);
close_system('sldvdemo_param_controller',0);
delete(files.HarnessModel);
delete(newFiles.HarnessModel);