ソフトウェア技術者のためのバグ百科事典(10)デバッグの強力な手掛かり「ログ」のバグ:山浦恒央の“くみこみ”な話(131)(3/3 ページ)
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第10回は、デバッグの強力な手掛かりとなる「ログ」にまつわるバグを取り上げます。
5.筆者がやってしまったバグ
下記に筆者が過去にやってしまったログにまつわるバグを紹介します。
5.1 ログを入れたことによるバグが発生
プログラムが思うように動作しないため、ループ構造内にログを入れて動作を確認しようと思いました。ですが、先ほどとは別の事象が発生することが分かりました。途方に暮れながら帰宅し、次の日、もう一度確認しました。結果、ログを入れたことにより、処理負荷が増えてしまうことが原因でした。
当時を振り返ると、プログラムが正しく動作せず、焦ってログを追加してしまったのが原因でした。皆さんもくれぐれもご注意ください。
5.2 ログが大きすぎて開けない
筆者はプログラムの出力結果を確認できるように、CSV形式のファイルを出力し、Excelで確認し、結果を判断しようと思いました。デバッグ環境で、出力結果がExcel上で表示できているので問題ないと判断し、別の作業をしていました。
実機テストとなり、出力結果を確認したところ、CSVファイルの容量が非常に大きく、開けないことが分かりました。取得したデータを開く方法を考えた結果、テキストエディタなら見づらいものの、開けることが分かりました。よって、いったん、テキストエディタで結果を確かめ、次回からはデータを間引いて出力するように変更しました。
原因は、デバッグ時には長時間のデータを作成していないことと、ログ以外のところに気を取られてしまったことが原因でした。
6.バグの兆候
以下の現象となった場合は、ログのバグを疑いましょう。
- 取得したログの内容が間違っている
- 意図したログを取れていない
- 作成したログファイルの容量が大きすぎる
- 外部記憶装置の空き容量がなくなることで、今まで正常動作をしているプログラムが突然動作しなくなる
- 「ログを入れても意図したデータを取得できない」「新たな事象が発生した」となる場合は、自分のログが原因であるか確認しましょう
7.対策
対策案を下記に示します。
7.1 取得したいログが取れていない
データ型や変数名も含めて取得したいログか、ログが抜けていないか、一覧表自体に間違いがないかいま一度確認し、ログの記述をしましょう。特に一覧表は、間違いがあると分かっていてもなかなか更新しづらいため、早めに声を上げて対処しましょう。
7.2 ログファイルの容量が大きすぎる
デバッグ時にどの程度のログとなりそうか確認しておきましょう。その際、場合によっては「10回に1回はデータを間引く」のような考察をするとよいと思います。余裕があれば、Excelよりも使い勝手の良いツールを模索するとよいでしょう。
7.3 外部記憶装置を圧迫する
テストフェーズでフォルダがログファイルで埋まっていると感じる場合は、削除するべきか検討しましょう。数日たてばログを削除するようなスクリプトを書くと効果的です。この問題は、数日なら問題ないでしょうが、数年後に問題とならないように早目に対処することが大切です。
7.4 ログによる機能退行
ログを入れる際には、焦らず、周辺をよく見て確認しましょう。また、重大バグの原因調査を目的とするログの場合には、何をログしたいか計画を立てて、ログを入れ込みましょう。くれぐれも、やみくもにログを入れようとするとこの事象が発生する可能性があります。
8.まとめ
- ログのバグとは、ログに関連するバグのことである
- 取得したいログが取れていない場合は、変数名、データ型、一覧表が間違えていないか確認すること
- 取得したログの容量が大きすぎる場合は、プログラムの構造を確認し、ログを間引くなどの工夫をすること
- ログが増えてくると、最終的には外部記憶装置を圧迫し、プログラムの動作に影響を与える可能性がある。ただし、数あるうちの一つとして頭に留めておくこと。対策は、小まめにログを消していくか、数日たつとログを消すようなスクリプトなどを書いておくとよい
- バグの原因調査を目的とするログにバグが入り込み、別の事象を引き起こす場合がある。その場合は、焦らず、冷静にログを仕込み、事象が変化した場合はログのバグを疑うこと
9.終わりに
バグの原因を知る手掛かりとなるものがログです。ログによって、実行時の変数の値を確認できるので便利なのですが、ログに関連するバグも少なからずあります。今回は、ログに関連するバグを紹介しました。このバグは、他のバグと比べてクリティカルなものではないでしょうが、数あるバグの候補として覚えておいていただければと思います。
山浦先生執筆の書籍「ソフトウェア技術者のためのバグ検出ドリル」が発売中!
山浦恒央先生が執筆した書籍「ソフトウェア技術者のためのバグ検出ドリル」が日科技連出版から発売中です。本連載「山浦恒央の“くみこみ”な話」とTechFactoryの連載「組み込みエンジニアの現場力養成演習ドリル」をベースに、大幅加筆、改訂した内容になっています。
内容は、「デバッグの詰将棋」で、要求仕様定義、設計、コーディング、テスト、保守の5フェーズでの「バグを埋め込んだ仕様記述やソースコード」を読んで、バグをピンポイントで見つける問題集になっています。全部で31問あり、難易度は初級から上級まで、いろいろです。興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- ソフトウェア技術者のためのバグ百科事典(9)境界値のバグ
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第9回は、常連バグの代表格である、境界値に関する仕様の不良や勘違いのバグ「境界値のバグ」を取り上げます。 - ソフトウェア技術者のためのバグ百科事典(8)バグを見つけるテストがバグってる
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第7回は、プログラムのバグを見つける作業である「テスト」がテーマです。テストの作業次第では逆にバグを作り込むこともあり、「テストのテストのテスト」のように無限ループに陥りかねません。 - ソフトウェア技術者のためのバグ百科事典(7)要求仕様書がバグってる
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第7回は、ソフトウェアのライフサイクルで最も重要な要求仕様に焦点を当てます。要求仕様書をしっかり作成しないと、その後のフェーズでさまざまな問題が発生し、プロジェクトの進行に大きく影響するのです。 - ソフトウェア技術者のためのバグ百科事典(6)不信感を生む“文書作成のバグ”
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第6回は、ソフトウェア開発業務の中で圧倒的に大きな比率を占める「文書作成」における間違い、「文書作成のバグ」を取り上げます。プログラムの動作には影響しませんが、その文書を読んだユーザーに不信感を与えかねない危険なバグなのです。 - ソフトウェア技術者のためのバグ百科事典(5)意外に多い「実装抜け」のバグ
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第5回は、学生のプログラミング作成を事例に「実装抜け」のバグを取り上げます。学生の事例ですが、プロも意外とやりがちなので気を付けておきましょう。