プログラミングをやっていると机上デバッグは
必須スキルです
机上デバッグを行うことにより、プログラムが正しく動作をするかの確認を行います。
またバグが発生した際には、目視で確認を行うことによってバグの要因を特定します。
机上デバッグとは
実際に、コンパイルを行わずに、ソースコードを目視で確認を行い。
エラーが出ないか、バグはないか、異常終了しないかなどのチェックを行います。
机上デバッグを行うメリット
- 作成したプログラムが正しく動作するかの確認
- 想定していない動作をしている
- 発生しているエラーの原因調査
などのトラブルが発生した際に、机上デバッグを行うことによって、原因の特定を行う必要があります。
机上デバッグを正確に行うことにより、問題の原因を特定することも出来ますし、未然にバグや異常な終了を防ぐことも出来ます。

これでは時間がかかってしまいます
ここで机上デバッグの出番です。

このようにして、コード修正の後に机上デバッグを行うことにより、異常な動作を発見しやすくなり、やり直しの手間が少なくなります。
机上デバッグで確認すべきポイント
変数に格納されている値を追う
よくあるバグの原因の一つに、変数に格納されている値が自分の思っているのと違うということがあります。

このような場合、どこで変数の値が上書きされたのか、を調査する必要があります。
デバッグ文を入れて確認する方法もありますが、何度も何度もやり直してばかりいると時間がかかってしまうので、
ある程度机上デバッグで当たりをつけてから、デバッグ文を入れるのが効果的です。
条件分岐の条件を要確認
バグが発生する要因の一つに条件分岐の条件を間違えているということがあります。
1 2 3 4 5 6 7 |
if(checkval == 10){ ret = true; System.out.println("正常の値です"); }else{ ret = false; System.out.println("異常な値です"); } |
例えばこの場合、checkvalという変数の値が9以下かどうかを判定しています。
しかし、ifの条件文が<としなくてはいけないのですが、<=となってしまっているので、checkvalが10の場合でも正常な値と判定されてしまいます。
単純なミスだと思いがちですが、経験豊富なエンジニアでも結構この様な簡単なミスをしてしまいます。
ですので、if文を使って条件分岐を行う際は、念入りに条件文の確認を行いましょう。
1 2 3 4 |
int tmp[] = new int[10]; for(int i=0;i<=10;i++){ System.out.println(tmp[i]); } |
例えば、上のソースコードのような場合、tmpという要素数10の配列を定義しているのに対して、
for文のループを回す回数は11回となっている為、実行中にエラーが発生してしまいます。
このエラーが発生してしまう原因は、for文の条件式に誤りがあるからです。
先程のif文の条件の時とよく似ているのですが、<としなくてはいけないのに、<=としてしまっています。
このことにより、10回ループを行うはずが11回行ってしまい、存在しない配列にアクセスし、エラーが発生してしまっています。
これも初歩的なミスなのですが結構やってしまっている人がいます。
机上でデバッグをしっかりと行っていれば防げるミスなので、注意して確認するようにしましょう。
まとめ
- 変数の値が想定しているのと違っている場合、どこで変更されたかを確認
- if文の条件は結構間違いやすいので注意
- for文のループの回数を間違うと実行中にエラーが発生してしまう可能性大なので要確認