こんにちは、イーソル エンジニアリング本部 プロダクトサポート課のY.Kです。
私はイーソルで、カスタマサポートを担当しています。カスタマサポート窓口には、イーソル製品をご購入いただいたお客様から、使い方や仕様の確認など、様々なお問い合わせが寄せられます。
中には「思ったように動作しない」、といったトラブルシュート系のお問い合わせが来ることもあります。トラブルシュートの場合はまず現象の観察を行い、そこから原因を推測して仮説を立て、仮説に沿って追加の情報をとって確定する、という流れで進めていきます。
仮説を立てるためにはそのソフトウェアの実装を十分に知っておく必要があります。また組込みソフトウェアでは、時にハードウェアの動きも踏まえて仮説を立てる必要があります。中には症状を聞いただけでは原因の推測が困難なものもあります。そのような問題の調査は、カスタマサポートエンジニアの腕の見せ所です。様々な仮説を立てて追加の情報を取り、絞り込みを進めます。
ベテランのカスタマサポートエンジニアと仕事をしていると、豊富な経験と知識が背景にあることに気づきます。ソフトウェアの設計を知っているだけではなく、ハードウェアについても、特にソフトウェアの問題に関係しがちなポイントをよく知っています。このような知見は、たくさんのトラブルシューティングの経験を経てベテランエンジニアが体得したものだと思います。
私はしかし、実際に大変な思いをして問題を経験しなくても、トラブルシューティングの事例を共有して他のエンジニアの経験を疑似体験することで体得することもできるのではないかと考えます。
そこで、この記事ではベテランのカスタマサポートエンジニアによるトラブルシュートを、事例をあげてご紹介したいと思います。また、なぜベテランエンジニアがその問題を解決できたのか振り返り、どのようなポイントを押さえておけばベテランカスタマサポートエンジニアのように問題調査をうまく進めることができるのかを考察したいと思います。
トラブルシューティングの例:SDカード上のFATが壊れる
ご紹介するトラブルシューティングの例は、あるお客様から頂いた、SDカード上のFATが壊れるという問題です。
FATとはFATファイルシステムのメタ情報の一つで、SDカード上の空き領域を管理するためのテーブルです。このテーブルが0の場合、それに対応するSDカードの領域は未使用であり、逆に0ではない場合は使用中となります。症状は、FATが使用中にもかかわらず別の用途に割り付けられてしまうというものでした。SDアナライザのログを確認したところ、SDカードから読み出した時点ではFATが非0(使用中)の値を返しており、それをSDカードに書き戻す際には別の値に書き換わっている(別の目的に割り当てられている)ことがわかりました。
図1:発生している問題(※画像をクリックすると拡大します)
私が立てた仮説は、SDカードからFATを読み出してファイルシステムにわたるまでの間に何らかの理由でFATの一部、32バイトだけが0に書き換えられ、そのためファイルシステムがその領域を別の用途に割り当てている、というものです。
図2:私が立てた仮説(※画像をクリックすると拡大します)
そこで、もし連続して使用されているFATの途中32バイト分だけ0になっていたらトラップして停止させるというトラップコードをSDドライバやファイルシステムに埋め込み、どの時点でFATが壊れているのかを確認することにしました。しかし、どのトラップコードにもトラップされることはありませんでした。さらにSDドライバの書き込み処理でもトラップコードを入れてみましたが、トラップされることはなく、調査は暗礁に乗り上げてしまいました。
図3:トラップコードによる仮説の確認(※画像をクリックすると拡大します)
いかがでしょう、皆さんはこの情報からどのような仮説を立てますか。先輩が立てた仮説の詳細は後編でご紹介したいと思います。また、なぜ先輩が仮説を立てることができたのか振り返り、どのようなポイントを押さえておけばベテランカスタマサポートエンジニアのように問題調査をうまく進めることができるのかを考察したいと思います。ぜひ後編もお読みください。
プロダクトサポート課 Y.K