ソフトウェア技術者のためのバグ百科事典(13)デバッガとビルド構成のバグ山浦恒央の“くみこみ”な話(134)(3/3 ページ)

» 2020年10月19日 10時00分 公開
前のページへ 1|2|3       
※本記事はアフィリエイトプログラムによる収益を得ています

5.ビルド構成で表面化するバグ

 上記に紹介した通り、デバッガは非常に有用ですが、以下のように、デバッガ使用時に特有のトリッキーなバグが発生する可能性があります。

5.1 ビルド構成を切り替えると再現しない

 成果物にもよりますが、ビルド構成を切り替えるとバグが再現しない場合があります。例えば、デバッグビルドで一通り作成し、リリースビルドでテストすると、意図した動作となりません。事象を再確認するために、デバッグビルドに変更すると、事象が再現されなくなります。理由の一つが最適化で、デバッグビルドとリリースビルドのメモリ配置が異なっていることが原因かもしれません。

5.2 ビルド構成特有の処理

 エンジニアにもよるでしょうが、デバッグ時にはデバッグ特有の処理を記述することがあります。例えば、ifdefなどを使用してデバッグビルドとリリースビルドの使い分けをします。その際、「デバッグ用の処理がなくなることによるタイミングのずれ」や「どちらかの差分にバグを作りこんだ」ことにより、意図した動作をしない可能性があります。

5.3 処理時間の未達を見落とす可能性がある

 デバッガは、プログラムを一時停止しながら実行するので、「処理時間がオーバーしてプログラムが停止する」などのバグを見つけることは非常に困難です。ロジックが正しくないと思ってデバッガでチェックしても見つかりません。周波数100Hzの処理なのに1秒間に10回ではなく、8回しか実行しないなど、処理時間関係のバグは別の深い箇所に原因があります。

6.バグの兆候

 バグの兆候は、ビルド構成を変更すると、意図した動作とならない場合です。その場合は、デバッグビルドとリリースビルドにログや標準出力などの目に見える差分がないか確認しましょう。その後、最初に取り上げたデバッグ作業(標準出力、ログ、コメントアウト)を活用しバグの場所を絞り込みましょう。

7.対策

 このバグの有効な対策はあまりありませんが、成果物のバグ発生が収束してきたら、リリースビルドを使用して回帰テストを実施しましょう。くれぐれも、リリース直前までデバッグビルドで確認し続けないことが重要です。

8.終わりに

 思い通りのプログラムを作ることは簡単ではありません。今回は、デバッガの使い方とビルド構成に関連するバグを紹介しました。もし、プログラムの動作に悩んでいる新人を見かけたら、デバッガの具体的な使用方法を教えるといいでしょう。

 また、ビルド構成の違いでバグが発生すると、原因が分からず悩みます。デバッグビルドで正常動作を確認しても、安心できません。リリースビルドで再確認し、ビルド構成が変わっても問題ないか確認しておきましょう。

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

 山浦恒央先生が執筆した書籍「ソフトウェア技術者のためのバグ検出ドリル」が日科技連出版から発売中です。本連載「山浦恒央の“くみこみ”な話」と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.