HEXA BLOG
ヘキサブログ
プログラム
動作確認の方法
こんにちは、ナカムラです。
突然ですがみなさん、プログラムを作成した後の動作確認、どうやってますか?
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回の動作確認だけで済ませる人、多いんじゃないでしょうか?
でも、それだけだと不十分な気がしませんか
そうです。条件が偽になって、命令がスキップされたときの動作確認をする必要があります。
現に、上の例では変数 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)回にも上ります
全てのプログラムに対してこのレベルのチェックを行うのは、残念ながら現実的ではないというのが実状のようです
どの方法で動作確認すれば良いのか、一概には言えません。
複合条件網羅が現実的ではないとは言え、重要な処理に限定してそれを行わなければならないケースもある事でしょう。
ある程度経験を積めば、自分が作成したプログラムを、どの程度のレベルで動作確認しなければならないのか、分かってくる事と思います
それがよく分からない方、どうも自分の作ったプログラムには、後から見つかるバグが多いな…と思ったら、一度動作確認方法を見直してみてはいかがでしょうか?
CATEGORY
- about ヘキサ (166)
- 部活動 (6)
- CG (18)
- プロジェクトマネジメント (1)
- 研修 (5)
- 美学 (1)
- いいモノづくり道 (230)
- 採用 -お役立ち情報も- (149)
- プログラム (188)
- デザイン (99)
- ゲーム (274)
- 日記 (1,104)
- 書籍紹介 (113)
- その他 (875)
- 就活アドバイス (20)
- ラーメン (3)
- ライフハック (25)
- イベント紹介 (10)
- 料理 (23)
- TIPS (7)
- 怖い話 (3)
- サウンド (5)
- 子育て (1)
- 筋トレ (1)
- 商品紹介 (21)
- アプリ紹介 (31)
- ソフトウェア紹介 (33)
- ガジェット紹介 (12)
- サイト紹介 (10)
- 研究・開発 (34)
- 回路図 (4)
- アナログゲーム (40)
- 交流会 (21)
- 報告会 (3)
- インフラ (25)
- グリとブラン (6)
- カメラ (9)
- クラフト (27)
- 部活 (14)
- 画伯 (15)
- カレー (6)
- 音楽(洋楽) (6)
- 映画・舞台鑑賞 (43)
- 飼育 (5)
- いぬ (8)
- ねこ (19)
ARCHIVE
- 2024年
- 2023年
- 2022年
- 2021年
- 2020年
- 2019年
- 2018年
- 2017年
- 2016年
- 2015年
- 2014年
- 2013年
- 2012年
- 2011年
- 2010年
- 2009年
- 2008年
- 2007年