• 検索結果がありません。

STUB()

- 38 -

実習3では、func3()を評価対象にします。入出力条件は、

入力変数: enable、mode (共に引数)

評価変数: gb_result.data、 gb_result.ret_code (共に外部変数構造体のメンバ) です。

この関数の途中には、関数呼出し(func3_sub_read_io())があります。呼び出し関数の戻り値は、一旦ローカル変数 retval に入りますが、これを使って、すぐ下の switch 文で分岐が行われています。func3()を網羅してカバレッジを 100%にするためには、この戻り値を switch 文の分岐に合わせて変える必要があります。

今回は、この呼び出し関数 func3_sub_read_io()のスタブ関数を作成して、テスト時に戻り値を自由に変化させるため に、入力 CSV ファイルに戻り値が設定できるようにスタブ関数の設計をします。

カバレッジマスターwinAMS のスタブ設定機能を使用して、func3_sub_read_io()のスタブ関数を作成します。

1. 「スタブ設定」のボタンを押します。

評価対象のスタブ対象を確認

スタブ関数の作成と指定

int func3_sub_read_io( int index ) {

// 戻り値がdata_tableに依存して複雑 if( data_table[index]>0x7f ) {

return data_table[index];

} else {

return -data_table[index];

} }

void func3( int enable, int mode ) {

int retval;

if( enable ) {

// スタブを作成して 戻り値を自由に設定する retval = func3_sub_read_io( mode );

// 戻り値を使って分岐 switch( retval ) {

case 0:

gb_result.data = 0;

break;

case 1:

gb_result.data = 50;

break;

case 2:

gb_result.data = 100;

break;

default:

gb_result.data = -1;

}

gb_result.ret_code = TRUE;

} else {

gb_result.data = 0;

gb_result.ret_code = FALSE;

} }

- 39 -

まず、設定の確認を行います。一番上にある項目「スタブプレフィックス:」とは、作成するスタブ関数の前に付ける 文字列の指定です。この場合は、func3_sub_read_io()の前に AMSTB_を付けた、AMSTB_ func3_sub_read_io()の関数 名のスタブ関数が作成されます。

すぐ下の「スタブ生成ソースファイル:」には、作成するスタブ関数を保存するソースファイルの指定を行います。上 図のようにファイル名が設定されていない場合は、「参照」ボタンを押して、ファイルパスを決定して下さい。

C:\winAMS_CM1\UnitTest を指定して、この中にスタブ関数のソースファイル「AMSTB_SrcFile.c」が出来るようにしま す。

では、スタブの作成を行います。

2. func3_sub_read_io を選択して 「スタブ生成」を押します。

これにより、スケルトンのスタブ関数「AMSTB_func3_sub_read_io」が別ファイル(AMSTB_SrcFile.c)に作成され、カバ レッジマスターのソースエディタが開きます。

このスタブ関数に、下図のコードを追加します。関数内に static 変数を作成して、これをそのままリターンするだけ のコードです。変数名は任意ですが、今回は「ret」とします。

このスタブ関数に作成した static 変数「ret」を、後で入力 CSV ファイルの入力変数に加えますが、こうすることで、こ のスタブ関数が呼ばれたときの戻り値を、CSV ファイルで予め決めておくことが出来るようになります。

カバレッジマスターの CSV ファイルで指定可能な変数は、関数が実行される前に、アドレスが確定している変数で す。このため、関数内に作成した変数を static にして、リンカにこの変数をアドレスの割り付けを行わせるようにしてい ます。static にしない場合は、実行時にスタックに生成されるローカル変数となり、CSV ファイルからデータを入力する ことはできません。

- 40 -

では、このスタブ関数を保存して、実行可能なコードにします。このために、実習の最初で使用したクロス開発環境 を使用します。(※本チュートリアルでは、ガイオ製のクロス開発環境を使用して説明しています。実際には、使用す る開発環境に合わせて、設定を行って下さい。)

3. ガイオ開発環境「フレームワーク」を起動します 。(※デスクトップに残っていない場合は、

C:\winAMS_CM1\UnitTest\target フォルダにある「SAMP1.gxp」を開いて下さい。)

4. プロジェクトビューの「ソースファイル」を右クリックして「プロジェクトへファイルを登録」を選択します 5. 「AMSTB_SrcFile.c」を登録します。

6. AMSTB_SrcFile.c には、コンパイルスイッチ(WINAMS_STUB)があるので、コンパイラの設定で有効にして 下さい。※実習の環境では事前に設定済みです。

7. 「ビルド」メニューから「リビルド」を選択してビルドします。 - 評価オブジェクトに 作成したスタブ部分 がコンパイル&リンクされます。

これにより、実行オブジェクトファイル「SAMP1.xlo」にスタブ関数が追加され、実行可能になりました。

では、前の実習と同様にして、func3()へのテスト入力データを CSV ファイルに作成します。func3()の入出力テスト 条件を確認します。func3()の入出力条件は、

入力変数: 引数 int enable, int mode

出力(評価)変数: グローバル変数 gb_result.data, gb_result.ret_code

です。これに、今回はスタブ関数の戻り値、ret を入力変数として追加します。CSV ファイル作成の手順は、実習1,

2と同様です。

1. 「テスト CSV 作成」のボタンを押します。

2. 「モジュールテスト用 CSV」を選択します。

3. ファイル名に「func3_data」、関数名に「func3」を指定します。

4. 下図の様に、上の入出力条件を INPUT、OUTPUT に指定します。

スタブ関数を実行可能なコードにする

ドキュメント内 カバレッジマスターwinAMS チュートリアル (ページ 37-40)