2012年06月12日

動作確認の方法

こんにちは、ナカムラです。

突然ですがみなさん、プログラムを作成した後の動作確認、どうやってますか?
1度起動してみて、画面上で変な動きをしてなかったら、決定
残念ながら、それでは充分な動作確認ができたとは言えせん…もうやだ〜(悲しい顔)
今回は、動作確認の方法について、いくつか紹介してみます。

***

例えば、C言語で次のような関数を作成したとしましょう。


void function( int a, int b )
{
int value; // 未初期化

if( a == 0 ) {
value = 0;
}
if( b == 1 ) {
value += 5;
}

return value;
}


まずは、全ての命令が実行されて問題が無いかどうかを確認する事を目標にしてみましょう。
上の例で言うと a == 0 かつ b == 1 の場合の動作確認さえ行えば、この関数内の全ての命令を実行できた事になります。
案外、この1回の動作確認だけで済ませる人、多いんじゃないでしょうか?
でも、それだけだと不十分な気がしませんかexclamation&question
そうです。条件が偽になって、命令がスキップされたときの動作確認をする必要があります。
現に、上の例では変数 value が宣言時に初期化されていませんので、if 文が両方偽だった場合に、不定値を返してしまう事になりますよねバッド(下向き矢印)

***

先ほどは、命令に着目した動作確認でミスをしてしまいました。
次は全ての分岐に着目し、真と偽両方の処理を通る事を意識して動作確認してみましょう。
a == 0 かつ b == 1
a != 0 かつ b != 1
この2通りの動作確認さえ行えば、if 文の中を通るケースと通らないケース、両方を確認する事が出来ます。
今回の例なら、この動作確認によって、変数の未初期化が存在する事が分かった事でしょうグッド(上向き矢印)

では更に念入りな動作確認方法はあるのでしょうか?
それは、次の4通りの条件全てをチェックする方法です。
a == 0 かつ b == 1
a == 0 かつ b != 1
a != 0 かつ b == 1
a != 0 かつ b != 1
これなら条件式の組み合わせ全てをチェックする事になるので、
「1つ目の if 文を真で、2つ目の if 文を偽で通ったときにだけ発生する」
なんて不具合も見つける事が出来ます。
このチェック方法は複合条件網羅と呼ばれ、最も精度が高い動作確認方法と言われていますが…もし1つの関数の中に if 文が10個あった場合、複合条件網羅で確認すべき回数は2の10乗(1024)回にも上りますexclamation×2
全てのプログラムに対してこのレベルのチェックを行うのは、残念ながら現実的ではないというのが実状のようですたらーっ(汗)

***

どの方法で動作確認すれば良いのか、一概には言えません。
複合条件網羅が現実的ではないとは言え、重要な処理に限定してそれを行わなければならないケースもある事でしょう。
ある程度経験を積めば、自分が作成したプログラムを、どの程度のレベルで動作確認しなければならないのか、分かってくる事と思いますぴかぴか(新しい)
それがよく分からない方、どうも自分の作ったプログラムには、後から見つかるバグが多いな…と思ったら、一度動作確認方法を見直してみてはいかがでしょうか?


posted by 管理人 at 20:49 | プログラミング