メインコンテンツ

サブシステムのテスト ケースの生成

モデル内のサブシステムを解析することができます。この手法は、大きなモデルにおいて、より小さく管理しやすいレポートで解析をレビューする場合に便利です。次の 2 つの方法で、異なるモードでサブシステムのテスト ケースを生成できます。

ノーマル モード用のサブシステムのテスト ケースの生成

この例では、sldvdemo_cruise_control モデルの Controller サブシステムの解析方法を説明します。

  1. モデル例を開きます。

    openExample('sldv/CruiseControlTestGenerationExample',...
    'supportingFile', 'sldvdemo_cruise_control');
  2. Controller サブシステムを右クリックし、[Atomic] を選択します。

    "Atomic サブシステム" は、親モデルを基準にした単位として動作します。Subsystem ブロックの実行は、親ブロックの実行とインターリーブしません。Atomic サブシステムを抽出して、スタンドアロンのモデルとして使用できます。パラメーターを設定すると、他のパラメーターが使用可能になりますが、それらは無視して構いません。

  3. [シミュレーション] タブの [ファイル] セクションで、[保存][名前を付けて保存] を選択して、Cruise Control Test Generation モデルを新しい名前で保存します。

  4. Controller サブシステムを右クリックし、Design Verifier アプリのセクション [サブシステムに対するテストを生成] を選択します。

  5. サブシステムの解析を開始してテスト ケースを生成するには、[テストの生成] ボタン をクリックします。

  6. Simulink® Design Verifier™ ソフトウェアによりサブシステムが解析されます。解析が完了したら、次のオプションのいずれかをクリックして Controller サブシステムの解析結果を表示します。

    • 解析結果をモデル上で強調表示

    • シミュレーション データ インスペクターにテストを表示

    • 詳細な解析レポート

    • ハーネス モデルの作成

    • テスト ケースを Simulink Test にエクスポート

    • テストをシミュレートしてモデル カバレッジ レポートを生成

    メモ

    一定のオブジェクティブを処理した後に解析が停止またはタイムアウトした場合、テスト生成アドバイザーを使用すると、問題の原因となっているサブシステムを詳細に把握できます。詳細については、テスト生成アドバイザーによる解析可能コンポーネントの特定を参照してください。

  7. サブシステム解析の結果をレビューして、その結果をモデルの解析の実行に記載されているモデル全体の解析結果と比較します。

    • サブシステム解析では、Controller をスタンドアロン モデルとして解析しています。

    • Controller サブシステムには Cruise Control Test Generation モデルのすべてのテスト オブジェクティブが含まれています。どちらの解析でも同じテスト ケースが生成されます。

ソフトウェアインザループ モード用のサブシステムのテスト ケースの生成

この例では、sldv_cruise_control_ats モデルを使用してソフトウェアインザループ (SIL) モードの Atomic サブシステムのテスト ケースを生成する方法を示します。

モデル例 sldv_cruise_control_ats を開きます。

model = "sldv_cruise_control_ats";
open_system(model);  

1.[コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペインで、[システム ターゲット ファイル]ert.tlc に設定します。

2.PI Controller サブシステムを右クリックし、[ブロック パラメーター] ボタン をクリックします。

3.[ブロック パラメーター] ダイアログ ボックスの [コード生成] で、[関数のパッケージ化][Reusable function] または [Nonreusable function] に設定します。

4.[ハードウェア実行] をクリックし、[デバイス ベンダー][デバイス タイプ] を SIL システムのベンダーとタイプに設定します。この例では、[デバイス ベンダー] を Intel に、[デバイス タイプ] を x-86-32 (Linux) に設定します。

  1. ターゲット用のコードを生成します。SIL モードでのサブシステム解析では、テスト生成を呼び出す前にコードを生成しておく必要があります。

  2. テスト生成ターゲットが [最上位モデルとして生成されたコード] の場合、以下を入力してターゲット用のコードを生成します。

slbuild(model,'StandaloneCoderTarget');
### Unable to find Simulink cache file "sldv_cruise_control_ats.slxc".
### Searching for referenced models in model 'sldv_cruise_control_ats'.
### Total of 1 models to build.
### Starting build procedure for: sldv_cruise_control_ats
### Generating code and artifacts to 'Model specific' folder structure
### Generating code into build folder: /tmp/Bdoc26a_3146167_2116294/tp6e6e95c6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw
### Invoking Target Language Compiler on sldv_cruise_control_ats.rtw
### Using System Target File: /mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/rtw/c/ert/ert.tlc
### Loading TLC function libraries
.......
### Initial pass through model to cache user defined code
.
### Caching model source code
...............................................................
### Writing header file sldv_cruise_control_ats_types.h
.
### Writing header file sldv_cruise_control_ats.h
### Writing header file rtwtypes.h
### Writing source file sldv_cruise_control_ats.c
### Writing header file sldv_cruise_control_ats_private.h
### Writing source file ert_main.c
.
### TLC code generation complete (took 2.623s).
### Saving binary information cache.
### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux)
### Creating '/tmp/Bdoc26a_3146167_2116294/tp6e6e95c6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw/sldv_cruise_control_ats.mk' ...
### Building 'sldv_cruise_control_ats': "/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/bin/glnxa64/gmake"  -j 4 -l 4 -f sldv_cruise_control_ats.mk all
gcc -c -fwrapv -fPIC -O0 -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=1 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0  -DTID01EQ=0 -DMODEL=sldv_cruise_control_ats -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 -I/tmp/Bdoc26a_3146167_2116294/tp6e6e95c6/sldv-ex49944916 -I/tmp/Bdoc26a_3146167_2116294/tp6e6e95c6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/extern/include -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/simulink/include -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/rtw/c/src -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/rtw/c/src/ext_mode/common -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/rtw/c/ert -o "sldv_cruise_control_ats.o" "/tmp/Bdoc26a_3146167_2116294/tp6e6e95c6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw/sldv_cruise_control_ats.c"
gcc -c -fwrapv -fPIC -O0 -DCLASSIC_INTERFACE=0 -DALLOCATIONFCN=0 -DTERMFCN=1 -DONESTEPFCN=1 -DMAT_FILE=0 -DMULTI_INSTANCE_CODE=0 -DINTEGER_CODE=0 -DMT=0  -DTID01EQ=0 -DMODEL=sldv_cruise_control_ats -DNUMST=1 -DNCSTATES=0 -DHAVESTDIO -DMODEL_HAS_DYNAMICALLY_LOADED_SFCNS=0 -I/tmp/Bdoc26a_3146167_2116294/tp6e6e95c6/sldv-ex49944916 -I/tmp/Bdoc26a_3146167_2116294/tp6e6e95c6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/extern/include -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/simulink/include -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/rtw/c/src -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/rtw/c/src/ext_mode/common -I/mathworks/devel/bat/filer/batfs2566-0/Bdoc26a.3146167/build/runnable/matlab/rtw/c/ert -o "ert_main.o" "/tmp/Bdoc26a_3146167_2116294/tp6e6e95c6/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw/ert_main.c"
### Creating standalone executable "../sldv_cruise_control_ats" ...
g++  -o ../sldv_cruise_control_ats sldv_cruise_control_ats.o ert_main.o  
### Created: "../sldv_cruise_control_ats"
### Successfully generated all binary outputs.
gmake: Nothing to be done for `all'.
### Successful completion of build procedure for: sldv_cruise_control_ats
### Simulink cache artifacts for 'sldv_cruise_control_ats' were created in '/tmp/Bdoc26a_3146167_2116294/tp6e6e95c6/sldv-ex49944916/sldv_cruise_control_ats.slxc'.

Build Summary

Top model targets:

Model                    Build Reason                                         Status                        Build Duration
==========================================================================================================================
sldv_cruise_control_ats  Information cache folder or artifacts were missing.  Code generated and compiled.  0h 0m 11.744s

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 13.282s

メモ:

  • テスト生成ターゲットが [モデル参照として生成されたコード] の場合、以下を入力してターゲット用のコードを生成します。

% slbuild(model,'ModelReferenceCoderTargetOnly');
  • テスト生成ターゲットと生成されたコード インターフェイス ターゲットに不一致がある場合、テスト生成でエラーが返されます。

  • 両方のターゲット用のコードを生成すると、テスト生成でエラーが返されます。

5.[アプリ] タブで、[Design Verifier] をクリックします。次に、[Design Verifier] タブにある [ターゲット] の横で、[最上位モデルとして生成されたコード] を選択します。以下のいずれかの方法を使用してテストを生成します。

  • PI Controller ブロックを右クリックし、[サブシステムに対するテストを生成] ボタン をクリックしてテストを生成します。

  • ツールストリップから固定を解除して PI Controller ブロックを選択します。次に、[テストの生成] をクリックします。

  • サブシステムのハーネスを作成してテスト生成を呼び出します。PI Controller ブロックを右クリックし、Simulink Test アプリのセクション で [テスト ハーネスの追加] ボタン をクリックします。ハーネスの名前を選択し、[OK] をクリックします。

新しいハーネスを開きます。次に、[Design Verifier] をクリックし、[テストの生成] をクリックします。

あるいは、コードを使用して次のように入力してテストを生成できます。

opts = sldvoptions;

opts.TestgenTarget = Sldv.utils.Options.TestgenTargetGeneratedCodeStr;

[status, fileNames] = sldvrun(ssPath,opts,true);

6.サブシステム解析の結果をレビューして、その結果をノーマル モード用のサブシステムのテスト ケースの生成に記載されているモデル全体の解析結果と比較します。