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