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

コード カバレッジ テストの生成

この例では、Simulink® Design Verifier™ を使用してテスト ケースを生成し、完全なコード カバレッジを取得する方法を説明します。

まず、ソフトウェアインザループ (SIL) シミュレーション モード用に設定されたモデル例のコード カバレッジを収集します。次に、Simulink® Design Verifier™ を使用して、未達カバレッジを達成するためのテスト ケースを生成する新しいテスト スイートを作成します。最後に、生成されたテスト ケースをソフトウェアインザループ (SIL) シミュレーション モードで実行し、フル カバレッジを検証します。

製品の可用性のチェック

この例には、Simulink® Coder™ および Embedded Coder™ の有効なライセンスが必要です。

if ~(license('test', 'Real-Time_Workshop') && ...
    license('test','rtw_embedded_coder'))
    return
end

初期設定

必ず、未編集バージョンのモデルを開きます。

model = 'sldvdemo_cruise_control';
close_system(model, 0)
open_system(model)

コード カバレッジを測定する対象のモデルの設定

シミュレーションを実行する前に、SIL モードで実行し、Simulink® Coverage™ を使用してコード カバレッジ メトリクスを収集するようにモデル パラメーターを設定します。

set_param(model,...
    'SimulationMode', 'Software-in-the-Loop (SIL)',...
    'SystemTargetFile', 'ert.tlc',...
    'LaunchReport', 'off',...
    'PortableWordSizes', 'on',...
    'CovEnable', 'on');

% Remove any existing build folders.
buildFolder = RTW.getBuildDir(model);
if exist(buildFolder.BuildDirectory, 'dir')
    rmdir(buildFolder.BuildDirectory, 's');
end

SIL モードでのシミュレーションの実行

cvsim コマンドを使用してコード カバレッジの結果を収集し、カバレッジ レポートを生成します。関数 cvhtml が生成するカバレッジ レポートは、sldvdemo_cruise_control モデルの初期カバレッジを示します。

initialCov = cvsim(model);

cvhtml('sil_initial_coverage', initialCov);

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

Simulink® Design Verifier™ を使用して sldvdemo_cruise_control モデルを解析し、より広いコード カバレッジを達成するテスト スイートを生成します。最上位モデルの MCDC カバレッジを達成するテスト ケースを生成するように、Simulink® Design Verifier™ のオプションを設定します。

opts = sldvoptions;
opts.TestgenTarget = 'GenCodeTopModel';
opts.Mode = 'TestGeneration';
opts.ModelCoverageObjectives = 'MCDC';
opts.SaveHarnessModel = 'off';
opts.SaveReport = 'off';
[~, files] = sldvrun(model, opts, true, initialCov);

フル カバレッジの検証

関数 sldvruntest は、生成されたテスト スイートを使用してモデルをシミュレートします。関数 cvhtml が生成するカバレッジ レポートは、sldvdemo_cruise_control モデルの最終的なカバレッジを示します。

[~, finalCov] = sldvruntest(model, files.DataFile, [], true);
cvhtml('sil_final_coverage', finalCov);
close_system(model, 0);