あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先
デバッグ勝負に勝つ (2004.02.06)

職場の設備管理用のコンピュータソフトにささやかなトラブルがあって、ソフト業者さんに調子を見てもらいました。
トラブルの発生条件がなかなか見つからず苦戦していましたが、私と業者さんとで色々実験、相談しているうちに特定できました。
簡単に言うと、ソフト起動後、処理Aの後に処理Bを実行すると百発百中でした。

私はこれで業者さんも原因を突き止められるだろうと安心していたら、ちっとも原因を見つけてくれません。で、「原因がわかり
ません。」だって。ユーザのマシンに開発環境入れたまま納品して、その中で再現できるのに原因がわかんねーだぁ?
再現できてるクセに原因がわかんないようじゃ、業者(以後、呼び捨て)に会社で調べさせても無理なんで、現場で原因を
調査することにしました。

業者がそれっぽい所を眺めているのを横から見ていて、気が付きました。処理AではAssignFile()の後でFileModeに0代入だって。
処理BにはFileModeの代入はなかった。もしこのFileModeがクラスのメンバ変数だとして、APIと同じ名前のメンバ関数内でFileMode
見てたら、やっかいだなぁ。そこで、業者に質問「処理AでFileModeに代入してるけど、これのスコープは?」検索かけても業者の
コードに定義がなく、ヘルプファイル見てびっくり。処理系のグローバル変数だって。今時あんのかそんなもん。

ソフト起動時はFileModeが2で処理Bをするとうまく動作するけど、処理Aをすると0になり、その後で処理Bでトラブルに。処理Aの
最後で2に戻すようにしてもらったら、途端に再現しなくなりました。「はい、技術料5,000円。(と手を差し出す)」(笑)
業者がわからないバグを高々10分で見つける技術は、いくらの価値があるでしょう?というか、日給6,000円の「電気のおじさん
(私)」にソフト業者が負けていいのか。職業プログラマ辞めて早4年、だが若いモン(経験15年以下)にはまだまだ負けない。

今度、原因が突き止められなかったら、こっちでコッソリ改良するぞ(爆笑)。
あ、それじゃ何のためにWi(おえぇぇ)wsから足洗ったかわかんないや。あーやめやめ。