自分史上最悪のトラブル(後編)

本テキストは続編となっています。
前編のテキストは、「自分史上最悪のトラブル(前編)」です。

商社の部長は自分に責任がのしかかってくるので厳しいが、その下の課長さんはだいぶ気が楽なようで、昼間は沈黙しているのだが、夜中の2時〜3時くらいになると、ちょいちょい電話をかけてくる。その電話はこんな感じ。
商社の課長「どーですかー!」
まだ解析中です。。。
商社の課長「やってますかー!」
やってますよ。。。
商社の課長「メール読みましたかー!」
はいはい、いま読みます。。。
商社の課長「寝てますかー!」
そりゃもちろん寝たいです。。。
商社の課長「食べてますかー!」
そういや、もう20時間以上も何も食べてない。。。
商社の課長「差し入れいりますかー!」
そりゃうれしいですね。。。
商社の課長「いまから飲み行っちゃいますかー!」
いや、そんな場合ではなく。。。
商社の課長「焼肉オゴっちゃいましょーかー!」
無茶な誘いはやめてください。。。

しかしこの課長、絶対「責任取るのは俺じゃねぇ」って思ってやがる。。。

前編に書いた通り、このソフトは、元は5年前にインドの会社が作っている。それがまったく動かなかったため、そのときうちの会社が終盤でファイヤーマンを請け負っている。

インドの会社が書いた部分には、コメントがまったくない。だったら、うちの会社がファイヤーマンで入ったとき、コメントを入れておきゃあよかったのに、突貫工事でコードを直したためなのだろう、入れるのをサボっていた(お約束通り、設計書などは一切存在していない)。

「コメントはまったくゼロなのか?」と聞かれると、それはFalseである。5年前にうちの会社が入れたコメントが、ほ〜んの若干だが存在する。しかし、そのコメントがこんな感じ。

// きっと5秒周期で動く。

「きっと」って。。。

// ↓ここ問題あります。

どんな問題だ! 問題の内容を書かんかい!

// コマンドタイマールーチン外で行う>暫定

もしかして、いまも「暫定」のままですか?(汗)

// EEPROM問題ある:最大256?

うわ、読まなきゃよかった!

ならばソース自体は読みやすいかというと、そんなことあるわけがない。前述の通り、とんでも密林ジャングルである。OSだって載っちゃいない。そのジャングルが40KLOC(リアルステップで4万ライン)あり、

volatile int i;
for (i = 0; i < 1000; i++) ;

こんなんが59箇所もあって、絶妙の(奇跡とも言う)タイミングで動いている。1000を900に変えた日にゃあ、何が起こるかわからない

フラグだって、

extern USHORT flag;
extern USHORT xxflag;
extern USHORT xxflag2;

こんなexternフラグが数百もある(extern volatileフラグだけで20個も)。しかもそのフラグ操作が、

xxflag = 4;

とか書いてある。あのー、4てなんですか?(汗)
で、当たり前のように、

if (xxflag == 3) {
    :
} else if (xxflag == 4) {
    if (xxflag2 == 3) {
        :
    }
}

などとゆー判定が大量に存在しており、でも#defineで定数値は一通り切られていて、たまたま直値を書いちゃってる箇所があるだけなんだよね、だったらヘッダ見れば値の意味がわかるよね――と思ったら、どこにも定数値が切られてない。orz
こぉのフラグども、お前らの取り得る値の範囲はどこまでなんじゃー!

Mさんに、「ねぇ、この処理ってさ、いったい何やってんの?」と聞いても、
「わからない」
「じゃあさ、この領域に書かれてる値って、モノは何?」と聞いても、
「わからない」
処理を聞いてもわからない〜 値を聞いてもわからない〜
  にゃん、にゃん、にゃにゃーん にゃん、にゃん、にゃにゃーん
泣〜いてばかりいる……って、泣きたいのは俺だー! 子猫ちゃん、お前が先に泣くなー!

こんなソースを、ロクに睡眠も食事も取らずに解析し続け、各方面からの電話がガンガン鳴り続け、メールがびゅんびゅん飛び続けたら、いーかげん気絶しそうになる。イスに座ってても脳がぐらんぐらん揺れて、「あれ、俺ってば、船酔いしてる? ここはタイタニック?」とか思った。

――いずれ補足を書くかもしれませんが、キリがなくなりそうなので、この辺で。