で、あなたは何をしたの?



 昨日の夕方頃、顧客担当者からソフトウェアの不具合調査の要請があった。ここで言う顧客とはあの「小渕首相も株で一儲けしたという殿様商売で有名な某携帯電話会社D」のことである(あ、DDIじゃないからね。念のため)。その担当者からの第一報は「ソフトウェアを起動するとフリーズする」というものだった。最初はそれ以外の情報が全く伝わってこなかったのだが、後になって少しずつ、「起動 - フリーズ - 電源断」を何度か繰り返すと正常に動作するようになる、正常に動作するようになると以後不具合は発生しない、不具合は特定のマシンでしか発生しない、などの追加情報が断片的に入ってきた。この時点で直感的に機種依存(ある特定のパソコンだけで発生する)の不具合ではないかと推測する。

 問題のフリーズするソフトというのは僕が担当したものだ。とある大きなシステムにおける、ある特定の機能を実現するためのモジュール的なもので、ほんの100ステップ程度しかない小さなソフトである。ただでさえこんな小さなソフトにバグなんぞ入り込む余地などないんだが、なんてったって顧客が「小渕首相も株で一儲けしたという殿様商売で有名な某携帯電話会社D」である。失敗したらどんな責任を取らされるか分かったもんじゃない。おまけに上の人はそんなことお構いなし。に大きなお金を目の前にして行け行けドンドン状態で、何かあったときの事など全く考えていなかった(ソフトウェアの使用許諾条件だって僕が指摘して初めて気が付いたんだから)。会社の最下位層である開発者としては最悪の事態を想像するとゾッとしたものである。ってなわけで最大限の身の安全を確保するため、これでもか!これでもか!というぐらいにテストを繰り返し、出荷した曰く付きのソフトなのである。もちろん品質には300%の自信がある(たかが100ステップだしねえ)。

 ソフトウェアの厄介なところは不具合の原因が他のソフトウェアにあっても、その症状を表面化させた部分(エラー表示する、ハングする)が真っ先に槍玉にあげられることだろうか?例えばAというソフトとBというソフトを同時に動かしたとする。Bが原因でAが動かなくなったとしても、ユーザーには「Aが動かなくなった!」と見えるわけだ。ソフトウェア同士の衝突(コンフリクト)は特に珍しい話でもないのだが、そんな業界の常識など一般ユーザーには通用するはずもなく、「何でも良いからとにかく動かしてくれ」という話になる。

 僕の作成した小さなソフトは別会社が作成した特殊なライブラリを参照している。症状を聞く限り、今回の不具合はその外部ライブラリにある可能性が高い。そうなれば僕がやらなければならないことはただ一つ。原因が僕のソフトウェアに無いことを確認して、身の潔白を証明することである。

 僕はその手段として最もオーソドックスな「デバッグ文を使った検証」を選択した。ソフトウェア内部のの各ポイントに、制御がその部分を通過したことを示す為のデバッグ文を追加するのだ。こうするとソフトウェアが起動されてから終了するまでの各ポイントで「処理開始」「初期化処理」「外部モジュール参照」「処理結果出力」「終了」ってな感じでメッセージを表示させることができる。ソフトウェアのどの部分まで進んで、どの部分でフリーズしているのかが一目瞭然になるというわけだ。デバッグの基本中の基本である。

 ちゃっ、ちゃっ、とデバッグ処理を追加したソフトウェアを作成。顧客担当者に送信して現場で検証してもらった。その結果「外部モジュールを参照」というデバッグ文のメッセージを表示したままフリーズすることが判明。これ即ち、原因は外部モジュールにあるということ。晴れて僕も無実は証明されたわけであるやった〜ほれみたことかさざあみろあっはっはあとはよろしくね、ということでホッと一安心。担当者にその旨を伝えて通常の業務に戻った。ここまでの時点で、担当者からの電話攻勢にさんざん振り回されていたのであった。あとは外部モジュールを作成した部隊が調査するはずである。ふう。

 しかし、ものの30分もしないうちにまたもや担当者から連絡が入った。

 「デバッグ文を表示してる部分と外部モジュール参照の間でフリーズしている可能性はないの?」

 あのねえ・・・。デバッグ文は外部モジュールを参照している部分の直前に入れてあるの。だからデバッグできるのね(これ当たり前)。デバッグ文と外部モジュール参照の間に処理は何にも無いの。何にもないところでフリーズするわけないでしょ?デバッグの基本ですよ、基本。わかりる?ってな内容を懇切丁寧に説明した(何で担当者にこんなこと説明しなきゃならんのだ)。

 「でもねえ、それを顧客にうまく説明できないんだよ・・・」

 説明も何も無いっつーの!。今言ったことをそのまま言えば良いだけなの。デバッグ文を使って外部モジュールを参照している直前までの動作を確認しました。よって問題は外部モジュールの中にあります。そう言えばいいの。デバッグってのはそういうものなの。わかりる?説明できない?僕より給料たくさん貰ってんだからそのぐらいやってよ。

 「う〜ん、でもねえ。それじゃうちが悪くないって完全に証明されたことにはならないと思うんだよ。例えばダミーの外部モジュールをつくってさあ、それをコールしてもフリーズしない、ってことを言えれば良いと思うんだけど・・・」

 いいえ、うちが悪くないって完全に証明されてます。外部モジュールを参照する直前まで動作することを確認しました。外部モジュールを参照したとたんにフリーズしました。これ以上、何を証明しろっつーの?ダミーの外部モジュールって?何で僕が作らなきゃならないの?そういうのは外部モジュールを作成した部隊が作るべきものなの。そんなことうちが勝手にやっても信憑性に欠けるし、そもそもやっちゃいけないの。わかりる?なんでもかんでも顧客(小渕首相も株で一儲けしたという殿様商売で有名な某携帯電話会社D)に言われたことをそのまま下に垂れ流してんじゃないよ!

 こんな感じの押し問答を延々とやる羽目になった。あげくの果てには「僕じゃ分からないから君がこっちへきて顧客に説明してくれ」ときたもんだ。いいですか、それはあなたの仕事なの。あなたはそれで給料を貰ってるの。僕は開発担当者の責任として、不具合の調査をしたし原因も特定した。おまけにこれは無償奉仕だぞ。言いたかないが本来なら作業経費が発生するんだよ。10分おきに電話してきといて調子の良いことを言ってんじゃないよ。

 あんまりしつこいので「外部モジュールを参照している部分を削除したソフト」を作成して担当者に送りつけてやった。これで動けば文句無いはずだ。結局、全くのサービス(それも顧客担当者に対する、だ)でデバッグ用のソフトウェアを2本も作る羽目になった。なんでこんなことをしなくちゃならんのだ。

 2本目のソフトを送った後、担当者からの連絡がぷっつり途絶えてしまった。10分おきに電話がかかってきてたのが嘘みたいである。なんだよ、動いちゃったら音沙汰無しかい?結果ぐらい連絡しろよお。怒りを通り越してだんだん可笑しくなってきた。あは、あはははは。付き合ってられないのでその日はそのまま帰宅した。もうどーなっても知らんけんね。無責任にも程があるっつーの。

 何がムカツクって「小渕首相も株で一儲けしたという殿様商売で有名な某携帯電話会社D」の横柄な態度もそうだが、顧客の言ってるアホないちゃもんをそのままオウム返しで下に投げるアホな担当者の対応である。自分の頭で考えて、顧客が言ってることが間違ってるんだったらちゃんと「それは違います」って言いなさい。それがあなたの仕事なの。でっかい金を持ってる顧客にヘイコラして、言われたことを何でもホイホイ聞いてきて、それをそのまま垂れ流すだけの思考もプライドの無い連中にはホント頭にくる。他の人はどうか知らないけど、僕はごめんだね。おつかれさま。