Simulink Design Verifier


最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

サブシステム解析時の既存のカバレッジ データの使用

この例では、Simulink® Design Verifier™ において、連続時間閉ループ シミュレーション内の 1 つのサブシステムを解析のターゲットとし、そのサブシステムの未達カバレッジに対してテスト ケースを生成する方法を説明します。

この例では、最初に閉ループ シミュレーション モデルのサブシステムのカバレッジを測定します。Simulink Design Verifier は、サブシステムがカバーしていない有効範囲に対応する新しいテスト ケースを検索します。

サブシステムのカバレッジの測定

sldvdemo_autotranssldvdemo_autotrans モデルは閉ループ シミュレーション モデルです。サブシステム ShiftLogicShiftLogic は Stateflow® チャートで、このモデルのコントローラー部を表します。Signal Builder ブロック ManeuversGUIManeuversGUI で設計されたテスト ケースは、閉ループ シミュレーションを駆動します。関数 cvtestcvtest および cvsimcvsim を使用して、閉ループ シミュレーション モデル内のこのサブシステムに対し実現されるモデル カバレッジを測定します。この例では、cvtestcvtest への入力を、モデル名ではなくサブシステムのパスとして指定することにより、そのサブシステムのみのカバレッジを測定します。また、cvsimcvsim の 2 番目の入力でモデルのシミュレーションを行う時間間隔を、ManeuversGUIManeuversGUI ブロックの現在のペインの時間範囲から導かれる値に指定します。

関数 cvhtmlcvhtml は、ManeuversGUIManeuversGUI ブロックで作成されたテスト ケースのシミュレーションの実行によって、87% の判定、67% の条件、33% の MCDC のカバレッジが実現されたことを示すレポートを生成します。

open_system('sldvdemo_autotrans');
open_system('sldvdemo_autotrans/ManeuversGUI');

test = cvtest('sldvdemo_autotrans/ShiftLogic');
test.settings.decision = 1;
test.settings.condition = 1;
test.settings.mcdc = 1;

signalBuilderBlock = sldvdemo_signalbuilder_block('sldvdemo_autotrans');
signalBuilderTime = signalbuilder(signalBuilderBlock);
simulationStopTime = signalBuilderTime{1,1}(end);

existingCovData = cvsim(test,[0 simulationStopTime]);
cvhtml('Existing Coverage', existingCovData);

未達カバレッジのテスト ケースの検出

テスト生成時に既存のカバレッジ データを使用するには、既存のカバレッジ データを .cvt カバレッジ データ ファイルとして保存します。既存のカバレッジ データを使用するには、Simulink Design Verifier の コンフィギュレーション パラメーターの [テスト生成] ペインで、[カバレッジ データ ファイル] パラメーターにカバレッジ データ パスを指定して、[既存のカバレッジ データで条件が満たされているオブジェクティブを無視する] パラメーターを on に設定します。

この例では、sldvrunsldvrun の最初の入力で、解析するサブシステムを指定します。Simulink Design Verifier へのサブシステム解析の指示は、モデルのコントローラー部分を個別にテストする必要がある場合や、大きなモデルの解析をより小さく管理しやすい部分に分割する場合に有用です。

このレポートでもわかるように、Simulink Design Verifier は既存のカバレッジ ファイルでカバーされていないカバレッジ オブジェクティブのテスト ケースのみを検索します。サブシステム ShiftLogicShiftLogic の 4 つのカバレッジ オブジェクティブは達成されないと証明されています。Stateflow チャート ShiftLogicShiftLogic の中のロジックは時相イベントを使用しており、このチャートはサンプル時間ごとに更新されるため時相条件の使用が満たされる必要があります。したがって、これは想定された結果です。また、サブシステム内のデッド コードは、そのサブシステムを含むモデルで必ずデッド コードになります。

ハーネス モデルを生成するため、Simulink Design Verifier はサブシステム ShiftLogicShiftLogic の内容を、生成したテスト ケースを含む Signal Builder ブロックで接続されている Test Unit コンポーネントに抽出します。

cvsave('existingcov',existingCovData);

opts = sldvoptions;
opts.IgnoreCovSatisfied = 'on';
opts.CoverageDataFile = 'existingcov.cvt';
opts.ModelCoverageObjectives = 'MCDC';
opts.SaveHarnessModel = 'on';
opts.SaveReport = 'on';

[status, fileNames] = sldvrun('sldvdemo_autotrans/ShiftLogic',opts,true);
[~, harnessModel] = fileparts(fileNames.HarnessModel);
open_system(harnessModel);

クリーン アップ

すべてのモデルを閉じて保存されたカバレッジ データ ファイルを削除し、例を完了します。

close_system('sldvdemo_autotrans');
close_system(fileNames.ExtractedModel,0);
close_system(fileNames.HarnessModel,0);
delete('existingcov.cvt');