ホーム > ユーザーサポート > 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)にてテスト対象関数に指定するダミー変数のアドレスを引数にポインタアドレスとして記述します。
※複雑なチェーン構造について、ツールで設定せずにダミー変数を使って記述する事になります。