Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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

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

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

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

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

    openExample('sldv/CruiseControlTestGenerationExample',...
    'supportingFile', 'sldvdemo_cruise_control');
  2. Controller サブシステムを右クリックして、[Design Verifier][[Atomic サブシステムとして扱う] を有効にして解析] を選択します。

    Controller サブシステムの [Function ブロック パラメーター] ダイアログ ボックスが開きます。

  3. [Atomic サブシステムとして扱う] を選択します。

    "Atomic サブシステム" は、親モデルを基準にした単位として動作します。Subsystem ブロックの実行は、親ブロックの実行とインターリーブしません。Atomic サブシステムを抽出して、スタンドアロンのモデルとして使用できます。

    Simulink® Design Verifier™ でサブシステムを解析するには、[Atomic サブシステムとして扱う] パラメーターを設定します。

    パラメーターを設定すると、他のパラメーターが使用可能になりますが、それらは無視して構いません。

  4. ダイアログ ボックスを閉じるには、[OK] をクリックします。

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

  6. サブシステムの解析を開始してテスト ケースを生成するには、Controller サブシステムを右クリックして、[Design Verifier][サブシステムに対するテストを生成] を選択します。

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

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

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

    • 詳細な解析レポート

    • ハーネス モデルの作成

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

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

    メモ

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

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

    • サブシステム解析では、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] を右クリックして [ブロック パラメーター (Subsystem)] を選択し、[コード生成][関数のパッケージ化][再利用可能な関数] または [再利用できない関数] に設定して、サブシステムの関数のパッケージ化を設定します。

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

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

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

slbuild(model,'StandaloneCoderTarget');
### Starting build procedure for: sldv_cruise_control_ats
### Generating code and artifacts to 'Model specific' folder structure
### Generating code into build folder: /tmp/Bdoc23b_2463843_1093130/tpcb6e0cfc/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/Bdoc23b/build/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 5.261s).
### Saving binary information cache.
### Using toolchain: GNU gcc/g++ | gmake (64-bit Linux)
### Creating '/tmp/Bdoc23b_2463843_1093130/tpcb6e0cfc/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw/sldv_cruise_control_ats.mk' ...
### Building 'sldv_cruise_control_ats': "/mathworks/devel/bat/Bdoc23b/build/matlab/bin/glnxa64/gmake"  -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/Bdoc23b_2463843_1093130/tpcb6e0cfc/sldv-ex49944916 -I/tmp/Bdoc23b_2463843_1093130/tpcb6e0cfc/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw -I/mathworks/devel/bat/Bdoc23b/build/matlab/extern/include -I/mathworks/devel/bat/Bdoc23b/build/matlab/simulink/include -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/src -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/src/ext_mode/common -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/ert -o "sldv_cruise_control_ats.o" "/tmp/Bdoc23b_2463843_1093130/tpcb6e0cfc/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/Bdoc23b_2463843_1093130/tpcb6e0cfc/sldv-ex49944916 -I/tmp/Bdoc23b_2463843_1093130/tpcb6e0cfc/sldv-ex49944916/sldv_cruise_control_ats_ert_rtw -I/mathworks/devel/bat/Bdoc23b/build/matlab/extern/include -I/mathworks/devel/bat/Bdoc23b/build/matlab/simulink/include -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/src -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/src/ext_mode/common -I/mathworks/devel/bat/Bdoc23b/build/matlab/rtw/c/ert -o "ert_main.o" "/tmp/Bdoc23b_2463843_1093130/tpcb6e0cfc/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/Bdoc23b_2463843_1093130/tpcb6e0cfc/sldv-ex49944916/sldv_cruise_control_ats.slxc'.

Build Summary

Top model targets built:

Model                    Action                        Rebuild Reason                                    
=========================================================================================================
sldv_cruise_control_ats  Code generated and compiled.  Code generation information file does not exist.  

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

メモ:

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

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

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

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

  1. [PI Controller] ブロックを右クリックし、[Design Verifier][サブシステムに対するテストの生成] をクリックしてテストを生成します。

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

  3. [PI Controller] ブロックを右クリックして [テスト ハーネス][PI Controller 用に作成] をクリックし、サブシステムのハーネスを作成してテスト生成を呼び出します。ハーネスの名前を選択し、[OK] をクリックします。

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

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

opts = sldvoptions;

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

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

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