せっせとプログラミングをしたにもかかわらず、処理を実行すると異常終了で処理落ちてしまう・・プログラムなんてのは書いた通りにしか動かないわけですから、どこかに異常終了の原因となるようなコーディングミスがあるはずです。

プログラマーはテストをしながらバグつぶしをしていくわけですが、バグの原因はマシンが教えてくれるわけでもなく、自分自身でデバッグしていかなければなりません。ですがどれだけソースを追ってもバグの原因が見つからない! という経験をしたことのあるSEは多いはず。そういった場合は、案外単純なコーディングミスをしているものなのです。

単純なコーディングミスほどバグを見つけにくい理由

通常であればバグを見つける時には、インプットデータ、条件式、処理内容、アプトプットデータなどに注目するはずです。まずはインプットデータがおかしくないかを確認し、処理分岐の条件式が間違っていないかや、処理内容が意図したものになっているかなどを確認していき、バグの原因となっている箇所を見つけていくものです。

だからそうした部分が問題なくコーディングされていると「何でだろう・・」と悩み、バグを見つけるにも時間がかかってしまうのです。時には異常終了してしまう箇所は特定したのにもかかわらず、何が間違っているのかが分からない、なんてこともあります。

また単純なコーディングミスほど見つけにくくなってしまうのは、インプットデータや処理分岐といったプログラムの重要ポイント以外の部分が原因となっているだけでなく、プログラマーの「ここはこうなっているだろう」という先入観も相まってしまうのが厄介なところです。

単純なコーディングミスの事例

いつも以上に時間をかけてバグ探しをしているにもかかわらず、たいていは単純なコーディングミスが原因になっているため、バグを見つけてもスカッとするわけでもなく、どっと疲れが押し寄せてきます。そんな無駄な疲労を避けるためにも、さっと問題を解決できるように、よくある事例は押さえておきましょう。

ついついやってしまいがちで、バグを見つけるのが難しい単純なコーディングミスの事例を紹介していきます。

全角スペースが混じっている

基本プログラミングは半角文字の世界です。
プログラミングにおいて全角文字も使用OKなときは、変数名と文字列の挿入ぐらいではないでしょうか。逆にそれら以外で全角文字を使おうものならエラーとなってしまいます。

通常であれば全角文字を使ってしまったとしても、カナでも英字でも、文字の大きさ自体が違いますので、パッと見ればすぐ間違いに気づくものです。

しかし見落としてしまいがちなのが”全角スペース”です。ただしこれもプログラミング用のテキストエディタや専用の開発環境でコーディングしていると、全角スペースも機械的に間違いだと教えてくれることもありますが、SQLの発行時だけは非常に見つけにくくなります。

もしSQLを発行する際に、文字列変数に文字列としてのSQL文(全角スペース混じり)を格納し、それをそのまま発行しようとするとエラーが発生して処理が終了します。文字列変数にSQL文を代入している時点では、たとえ全角スペースが混じっていたとしても、機械的に間違いを指摘してくれません。

プログラマーはエラーの原因を調べるにも、SQL構文が間違っていないか必死になって確認しますが、構文自体は間違っていないため、エラーの原因を見つけるのにも時間がかかってしまいます。SQL構文が間違っていない場合は、全角スペースが混じっていないかを確認するようにしましょう。

変数名のスペル間違い

変数名も「x」が「i」となっていれば、すぐに間違いに気づくことができます。しかし変数名を命名する際のポイントは、一目でどんな処理に使うのかが判断できる名前にすることです。

そのため例えばですが、教師の人数をカウントする処理には「teacher_cnt」といったような変数名の変数を使用するとします。そこで変数宣言では「teacher_cnt」と記述したにもかかわらず、実際には「teecher_cnt」と書いてしまった場合(aがeになっている)、エラーとなってしまいます。

コーディングする際のエディタが間違いを指摘してくれればよいのですが、そうでない場合、スペル間違いは見つけるのに苦労します。先ほどの全角スペースの時と同じく、こう書いているはずという先入観が邪魔してしまうのです。

 

おわりに

何度も言うようですが、プログラミングは書いた通りにしか動きませんので、バグの原因が見つからないなんてことはありません。デバッグをしてみて、インプットデータや処理ロジックに問題がない場合、単純なコーディングミスが原因になっていることがほとんどです。

そうしたバグは見つけるのも時間がかかりますし、疲れるだけなので、コーディング中から単純ミスを生まないように、集中して作業に取り組むのも対策の一つとなるでしょう。

 



【X(旧twitter)でも情報発信中】

Xを最近始めたので、フォローしてもらえると嬉しいです(エンジニア界隈の方はフォローバックさせていただきます)! システム開発に関することや、最新テクノロジーのことなど、世のエンジニアにとって有用な情報を発信してます!

"X" @TECH_KEYSYS