下記のC言語の単体テストに関する問題の解答の意味がわからず、質問させていただきました。
特にSWITCH文における命令網羅(C0)の考え方がわからず、困っております。
※前後の問題文と繋がっておりますので、一部未定義の関数や値がございます。
【問題内容】
次に示す関数において、命令網羅(C0)のカバレッジ基準を満たす最小のテストケースはそれぞれいくつか
【コード】
typedef short s2 ; typedef unsigned long u4 ; int main (u4 err_event) { S2 s2_err_ret, s2_dust_ret, s2_send_ret; switch((U4)u4_err_event) { case sensor_err_1 case sensor_err_2 s2_err_ret = unit_sensor_error(ON); if(s2_err_ret != (S2)RET_OK) { return(RET_NG); } break; case dust_err_1 case dust_err_2 s2_dust_ret = unit_dust_error(ON); if(s2_dust_ret != (S2)RET_OK) { return(RET_NG); } break; default: return(RET_NG); } s2_send_ret = unit_send_error(u4 err_event); if (s2_send_ret !=(S2)RET_OK) { return(RET_NG); } return(RET_OK); }
【解答】
5パターン
【解答の理由】
命令網羅の場合、すべての命令文を実行する必要があり、下記の5パターン
①switch-case文の1つ目の分岐を通り、 unit_sensor_errorがOK、unit_send_errorがNGとなる場合
②switch-case文の1つ目の分岐を通り、 unit_sensor_errorがNGとなる場合
③switch-case文の2つ目の分岐を通り、 unit_dust_errorがOK、unit_send_errorがNGとなる場合
④switch-case文の2つ目の分岐を通り、unit_dust_errorがNGとなる場合
⑤switch-case文のdefaultを通る場合
【疑問】
上記解答では、例えば①と②ではそれぞれunit_sensor_errorがOKとNGになる場合をそれぞれ考慮していますが、これだと命令網羅ではなく、分岐網羅の考えになってしまうのではと思っています。
私の考えでは、① if(s2_err_ret != (S2)RET_OK)とif (s2_send_ret !=(S2)RET_OK)を通る場合
②if(s2_dust_ret != (S2)RET_OK)とif (s2_send_ret !=(S2)RET_OK)を通る場合
の2パターンで命令網羅できているのではと思っています。
switch文の命令網羅の問題は初見でしたので、何か特別な考え方があるのかと思い、ご質問させていただきました。ご回答宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/08/17 12:08