名探偵の秘密

ソフトウェアのカスタマーサポートという仕事をしていると、顧客から様々な問題が持ち込まれてくる。

先日取り組んでいたのは、カーネル内のある構造体のメンバ変数の不整合によりカーネルパニックが発生してしまうという問題だった。この手の障害解析には問題の再現環境を作ることが重要だが、顧客の開発部門での数カ月の努力にもかかわらず再現させることができず、製品のリリース時期が迫ってきたため私のところに持ち込まれてきたのだった。

私は3日ほどで再現プログラムを作ることができたが、このことに顧客の担当者は大変驚いたようだった。しかし、種明かしをすると、この問題はそれほど難しいものではなかった。この手のデータの不整合の原因としては、そのデータに関して何らかの競合状態が発生しているという場合が多い。そこでソースを見てみると、不整合の起きている構造体のメンバ変数は少し特殊な使われ方をされており、そのような競合状態の発生する可能性は1つしかないことがわかった。この時点で原因はわかったようなものなのだが、確認のためにアプリケーションからのAPI呼び出しでそのような状況を作ってみると見事に再現できた。

少し前のことだが、別の顧客で、アプリケーションを最適化オプションを有効にしてコンパイルするとある処理が遅くなってしまうという問題を扱ったことがある。原因は、最適化オプションの有無でその処理が読み書きするデータの配置されるアドレスが変化することにより、ページフォルトの発生状況が変化するというものだった。この問題には少し悩んだが、コードではなくデータが原因という視点が得られれば解決は容易かった。この問題も、種明かしをすると単純明快だ。

世界で最も有名な名探偵といえばシャーロック・ホームズである。物語の中で繰り返し出てくるエピソードとして、ホームズのもとを訪れた依頼人の職業を言い当ててしまうというものがある。最初、依頼人やワトソン博士は大層驚く。そこでホームズが種明かしをすると「何だ、そんなことですか」と言われてしまい、ホームズはがっかりしてしまう。ホームズは依頼人の服装や靴についた傷跡などから推理しているのだが、その推理の過程を説明されれば何も難しいことはない。

私はエンジニアとしての教育を受けたが、私の今の仕事はむしろシャーロック・ホームズの範疇に属すると思っている。私の仕事は、証拠を集め、推理し、真実を明らかにする。そして顧客に報告すると(つまり種明かしをすると)、決まって「何だ、そんなことですか」と言われ、私はがっかりしてしまうのだ。

私の顧客の中には、カスタマーサポートとはなんと簡単な仕事なのだろうと思う者もいるかもしれない。しかし私は、自分の仕事は十分に困難で、高度な技術を要求され、チャレンジのある仕事だと思っている。ただし、私の仕事は、何かものを作っている普通のエンジニアとはその性質が少し異なるかもしれない。ホームズがタバコの灰からその銘柄を言い当てることができるように、私の仕事ではメモリのダンプからプログラムの状態を言い当てることができなければならない。

実は、私の子供の頃のヒーローはシャーロック・ホームズだった。小学校の図書館で子供向けのホームズ物語を借りて読んだものだった。私は本物の探偵にこそならなかったが、カスタマーサポートと呼ばれる「ソフトウェアの探偵」になることができた。私の仕事には殺人事件のようなドラマはないが、カーネルパニックという「ソフトウェアの死」は私の専門である。

ついに問題の尻尾をつかんだとき、私はいつも自分をホームズに重ね合わせる。さあワトソン、獲物が飛び出したぞ!