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