連載
» 2020年11月12日 11時00分 公開

ソフトウェア技術者のためのバグ百科事典(14)地獄の作業と化すコーディングのバグ山浦恒央の“くみこみ”な話(135)(3/3 ページ)

[山浦恒央 東海大学 大学院 組込み技術研究科 非常勤講師(工学博士),MONOist]
前のページへ 1|2|3       

4.やってしまったバグ

 筆者のコーディングの実行結果が意図した通りにならないことがありました。可能性のある場所からデバッガで追ったのですが、なかなか原因が分かりません。

 原因を探した結果、キャスト演算で変数がオーバーフローしていました。「こんな初歩的なことに悩まされたのか」とガッカリしましたが、バグが見つかった安心感で、「今日はぐっすり眠れる」と安心しました。

5.傾向

 コンパイルする段階で、ワーニングが出ていないか確認しましょう。初心者にありがちなのは、動作するからといってワーニングを放置することです。筆者も、先輩に「ワーニングはエラーだと思って対処するように」と教わりました。

 これを確認した上で、意図した実行結果とならない場合は、「変数の未初期化」「変数の見間違い」「記述ミスによる未定義動作」「キャストのミス」をコンソール出力やデバッガを使いながらじっくり確認しましょう。

6.対策

6.1 機能付きのエディタを使用する

 統合開発環境の機能によっては、変数の未初期化などのバグは色付きでエディタに現れますし、変数名などの候補を表示できて便利です。使い慣れたテキストエディタを使用するのもよいのですが、他のツールを検討すると良いでしょう。技術の最先端を切り開くのがプログラマーなのに、「食わず嫌い」というか、新しいツールに対し、かなり強い拒否反応があるようです。新しいツールや新技術を取り入れましょう。

6.2 静的解析ツールを使用する

 例えば、if (a == b)とすべきところを、if (a = b)としてしまったなどの単純なコーディングのミスは静的解析ツールが非常に有効です。プログラムを一通り作り終えた後、一回ツールにかけて問題点を見つけましょう。

7.終わりに

 筆者の経験上、大半のバグは初歩的なものです。その中でも、今回は、コーディングフェーズのバグを取り上げました。動作は複雑で難解でも、原因は、「変数の未初期化」「変数の見間違い」「記述ミスによる未定義動作」「キャストのミス」のような初歩的なバグの可能性が高いと思います。

 実際の開発現場では、本コラムのような短いプログラムはありませんが、まずは、単純なコーディングのバグをうたぐってください。

山浦先生執筆の書籍「ソフトウェア技術者のためのバグ検出ドリル」が発売中!

 山浦恒央先生が執筆した書籍「ソフトウェア技術者のためのバグ検出ドリル」が日科技連出版から発売中です。本連載「山浦恒央の“くみこみ”な話」とTechFactoryの連載「組み込みエンジニアの現場力養成演習ドリル」をベースに、大幅加筆、改訂した内容になっています。

 内容は、「デバッグの詰将棋」で、要求仕様定義、設計、コーディング、テスト、保守の5フェーズでの「バグを埋め込んだ仕様記述やソースコード」を読んで、バグをピンポイントで見つける問題集になっています。全部で31問あり、難易度は初級から上級まで、いろいろです。興味のある方は、Amazon.comや書店でチェックしてください!

【 筆者紹介 】
山浦 恒央(やまうら つねお)

東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)


1977年、日立ソフトウェアエンジニアリングに入社、2006年より、東海大学情報理工学部ソフトウェア開発工学科助教授、2007年より、同大学大学院組込み技術研究科准教授、2016年より非常勤講師。

主な著書・訳書は、「Advances in Computers」 (Academic Press社、共著)、「ピープルウエア 第2版」「ソフトウェアテスト技法」「実践的プログラムテスト入門」「デスマーチ 第2版」「ソフトウエア開発プロフェッショナル」(以上、日経BP社、共訳)、「ソフトウエア開発 55の真実と10のウソ」「初めて学ぶソフトウエアメトリクス」(以上、日経BP社、翻訳)。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.