筆者のコーディングの実行結果が意図した通りにならないことがありました。可能性のある場所からデバッガで追ったのですが、なかなか原因が分かりません。
原因を探した結果、キャスト演算で変数がオーバーフローしていました。「こんな初歩的なことに悩まされたのか」とガッカリしましたが、バグが見つかった安心感で、「今日はぐっすり眠れる」と安心しました。
コンパイルする段階で、ワーニングが出ていないか確認しましょう。初心者にありがちなのは、動作するからといってワーニングを放置することです。筆者も、先輩に「ワーニングはエラーだと思って対処するように」と教わりました。
これを確認した上で、意図した実行結果とならない場合は、「変数の未初期化」「変数の見間違い」「記述ミスによる未定義動作」「キャストのミス」をコンソール出力やデバッガを使いながらじっくり確認しましょう。
統合開発環境の機能によっては、変数の未初期化などのバグは色付きでエディタに現れますし、変数名などの候補を表示できて便利です。使い慣れたテキストエディタを使用するのもよいのですが、他のツールを検討すると良いでしょう。技術の最先端を切り開くのがプログラマーなのに、「食わず嫌い」というか、新しいツールに対し、かなり強い拒否反応があるようです。新しいツールや新技術を取り入れましょう。
例えば、if (a == b)とすべきところを、if (a = b)としてしまったなどの単純なコーディングのミスは静的解析ツールが非常に有効です。プログラムを一通り作り終えた後、一回ツールにかけて問題点を見つけましょう。
筆者の経験上、大半のバグは初歩的なものです。その中でも、今回は、コーディングフェーズのバグを取り上げました。動作は複雑で難解でも、原因は、「変数の未初期化」「変数の見間違い」「記述ミスによる未定義動作」「キャストのミス」のような初歩的なバグの可能性が高いと思います。
実際の開発現場では、本コラムのような短いプログラムはありませんが、まずは、単純なコーディングのバグをうたぐってください。
山浦恒央先生が執筆した書籍「ソフトウェア技術者のためのバグ検出ドリル」が日科技連出版から発売中です。本連載「山浦恒央の“くみこみ”な話」とTechFactoryの連載「組み込みエンジニアの現場力養成演習ドリル」をベースに、大幅加筆、改訂した内容になっています。
内容は、「デバッグの詰将棋」で、要求仕様定義、設計、コーディング、テスト、保守の5フェーズでの「バグを埋め込んだ仕様記述やソースコード」を読んで、バグをピンポイントで見つける問題集になっています。全部で31問あり、難易度は初級から上級まで、いろいろです。興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.