ホーム > ユーザーサポート > FAQ カバレッジマスターwinAMS
【質問】
ポインタを使用した複雑なチェーン(リスト)構造を持った階層の深い変数をテストデータとして扱っています。ポインタを1つ1つ指定すればテスト可能であることは理解していますが、変数の指定が複雑で工数がかかります。効率の良いテストデータの指定方法はありませんか?
【回答】
ポインタを使用した複雑なチェーン(リスト)構造を持った階層の深い変数をテストデータとして扱う場合、カバレッジマスターwinAMSでテストする事は可能ですが、変数の指定が複雑になります。このFAQでは、ダミー変数を利用して簡単にテストデータを設定する方法を紹介します。
サンプルプログラム(main.h)
struct ST_PARAM
{
int data;
int ret_code;
} gb_result;
typedef struct st_Leaf {
int No;
void *pstCmd;
} T_Leaf;
typedef struct st_Second {
int No;
T_Leaf *pstLeaf;
} T_Second;
typedef struct st_Top {
int No;
T_Second *pstSecond;
} T_Top;
typedef struct TEST
{
int enable;
int mode;
int input;
} T_test1;
サンプルプログラム(main.c)
void func1(T_Top * param)
{
int enable,mode,input;
enable = ( (T_test1 *)(param->pstSecond->pstLeaf->pstCmd) ) -> enable;
mode = ( (T_test1 *)(param->pstSecond->pstLeaf->pstCmd) ) -> mode;
input = ( (T_test1 *)(param->pstSecond->pstLeaf->pstCmd) ) -> input;
if( enable )
{
switch( mode )
{
case 0:
gb_result.data = input;
break;
case 1:
gb_result.data = input * 10;
break;
case 2:
gb_result.data = input * 100;
break;
case 3:
if( input>100 )
gb_result.data = 10000;
else
gb_result.data = input*100;
break;
default:
gb_result.data = -1;
}
// return code
gb_result.ret_code = TRUE;
}
else
{
gb_result.data = 0;
gb_result.ret_code = FALSE;
}
}
手順1
テストデータを設定する為のダミーシンボルを作成します。
※ダミーシンボルを作成するファイルは運用に合わせて、任意で決定して下さい。
作成したファイルをコンパイルして、テスト対象オブジェクトにリンクする必要があります。
サンプルプログラム(dummy.c)
T_test1 DBG_test1; // テストデータ設定対象変数
T_Leaf DBG_Leaf = { 0, (void *)&DBG_test1};
T_Second DBG_Second = { 0, &DBG_Leaf};
T_Top DBG_param = { 0, &DBG_Second }; // テスト対象関数の引数用
手順2
CSV雛形作成から、関数引数であるfunc1@parmをアドレス設定でINPUTに登録します。

手順3
ダミーシンボルであるDBG_test1.enable、DBG_test1.mode、DBG_test1.inputをINPUTに登録します。

手順4
CSV編集(またはExcel)にてテスト対象関数に指定するダミー変数のアドレスを引数にポインタアドレスとして記述します。
※複雑なチェーン構造について、ツールで設定せずにダミー変数を使って記述する事になります。
