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

山浦恒央の“くみこみ”な話(131):ソフトウェア技術者のためのバグ百科事典(10)デバッグの強力な手掛かり「ログ」のバグ (3/3)

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

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や書店でチェックしてください!

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

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


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

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


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.