自分史上最悪のトラブル(後編)
本テキストは続編となっています。
前編のテキストは、「自分史上最悪のトラブル(前編)」です。
商社の部長は自分に責任がのしかかってくるので厳しいが、その下の課長さんはだいぶ気が楽なようで、昼間は沈黙しているのだが、夜中の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さんに、「ねぇ、この処理ってさ、いったい何やってんの?」と聞いても、
「わからない」
「じゃあさ、この領域に書かれてる値って、モノは何?」と聞いても、
「わからない」
♪ 処理を聞いてもわからない〜 値を聞いてもわからない〜
にゃん、にゃん、にゃにゃーん にゃん、にゃん、にゃにゃーん
泣〜いてばかりいる……って、泣きたいのは俺だー! 子猫ちゃん、お前が先に泣くなー!
こんなソースを、ロクに睡眠も食事も取らずに解析し続け、各方面からの電話がガンガン鳴り続け、メールがびゅんびゅん飛び続けたら、いーかげん気絶しそうになる。イスに座ってても脳がぐらんぐらん揺れて、「あれ、俺ってば、船酔いしてる? ここはタイタニック?」とか思った。
――いずれ補足を書くかもしれませんが、キリがなくなりそうなので、この辺で。