ミレニアム・バグに挑んだ勇者

村中 順

ラスボスは、メモリリークだ

「おい、デバックシステムがダウンしたって? 網羅的にチェックしたじゃなかったけ? 」

部下の佐藤が、血相変えて言ってきたのを、つい厳しい言葉で返してしまった。


 あー、これで今日も帰れない。布団が恋しい。


 2000年まで、後7日に迫った年末のことである。2000年問題に対処するべくシステム改修を1年かけてやってきた。


 古いコンピュータのプログラムでは、メモリを節約するために、4桁の西暦を下2桁だけで記録することが、常套手段であった。例えば1999年なら、99だけを記録していたわけであるが、2000年になった時、この2桁は当然00となってしまう。


 すると、判りやすい例を挙げれば、データベースなどを日付で並び替えてしまうと、一番新しいはずのデータが、一番古い1900年のデータと間違えてしまうのである。


 そのため、2000年に生まれた子供が、100歳の年寄りになったりする。この程度なら、可愛いもので、メモリの中が2桁分、ずれてしまうので、おかしなプログラムを組んでいると、全く違う振る舞いをして、システムダウンすることがある。


 この1年、システムを解析し、ドキュメントに残し、修正し、試験を行う、の繰り返しだ。

 ここ数週間は本格切り替えに向けて、全システムの接続試験を行っていた。


 徹夜の連続である。あー 布団が恋しい。風呂入りたい。


「何処ら辺りに問題がありそうか、見当はついたのかな? 」

なるべく、『優しく』を心がけて、話をしないと行けない。


 全員、殺気立っていて、喧嘩になりかねない。


「そう、過負荷になると発生しそうだということかな。再現性は? 」


 このような、過渡現象で起きるバグ、つまり間違いを見つけるには、ソースリストと睨めっこしても見つからない場合が多い。なぜなら、プログラム間の微妙なタイミングの違いで引き起こしている場合が多いためである。


 つまり、この微妙なタイミングの違いをできないと、何処に問題があるのかがわからないし、修正した時、正常になったかの検証ができないのである。

 ところが、この再現の条件を突き止めるのが非常に難しい場合がある。1,000回やっても1回しか起きないとか、10,000回やっても1回しか現象が起きないとかである。


 このような、納期に迫られたソフトウェアプログラマーには、悪魔の囁きが聞こえることがある。


「そんなに確率が低いなら、起きることは少ない、いや起きないじゃね」


とか、


「起きてしまったとき対処するプログラムを入れておけばいいじゃね」


とかである。


 だが、経験的には、前者の起きることは少ないという予測は、ほぼ間違いなく、早い段階で玉砕する。デバックシステムで、人が介在して作り出した状況など、実環境では驚くほど簡単に起きてしまうからである。


 後者の対症療法的な対応は、一件上手く行くようでも、ちょっと条件が変わると対症療法が効かないで、また、同じようなバグが起きる場合がある。そして後世、他の人がそのプログラムを見た時、「なんでこんな変なプログラムが入っているのだ?」と不思議がられたりする謎のソフトとなる場合が多い。


 きっちりと再現して、問題箇所を修正して、同じ条件で起きない事を確認するのが最良である。


「なに、メモリリークだって、過負荷になるとメモリリークが起きるって? 」


 いや、これは不味いな。後数日で2000年になろうって時に、こんな大物がやってくるとは。

 ラスボスと思って、ポーションも、スキルも総動員して倒したかと思ったら、さらに強いボスが出てきた。そんな感じである。


 普通、プログラムは記憶領域を、その都度確保して、使い終わったら開放する処理が入っている事がある。もし、確保し続けて、開放せず、更に確保するを繰り返すと、いつか有限の記憶領域を使い果たしてしまう。ちょっと、例えが乱暴だが、借金をして返済前に、また借金をする多重債務みたいなもので、いつか破産するのと似ている。


 このメモリリークは、見つけにくいことが多い。しかも過負荷の時だけとなると、なおさらだ。多重割り込みが引き金と考えることが普通だけど、桁を増やしただけだからな。。。


 と、また、コンピュータ室で、悩む夜がくる。あー布団が恋しい。


 デバックが進まず、根本原因がわからない時、営業経由で顧客に頼み込んで、切り替えを伸ばしてもらう、つまり納期を伸ばしてもらうことがある。ゲームプログラムの販売時期を遅らせるってやつだ。もちろん、見切り発車で行うこともあるが、後で大変な目に合うことが多い。


 ところが、今回は2000年と言う納期は、待ってくれない。冷酷無比の顧客である。

 強いボスを相手にしているのに、そのボスに人質を取られていて、時間と共に人質のHPが減っていく、0になったら、ゲームオーバーって奴だ。


 佐藤が少し喜んで、やって来た。

 なに、再現の条件が判って、試していたら、古い他社製のプログラムに問題があるのが判った? 

「判った、修正箇所を、みんなで、吟味して他のバグを誘発しないか会議を招集してくれ」


 これもよくある。他社のシステムを請け負った時、顧客は、このプログラムは『全く問題ないはずだから、見積もりから外して』である。

『全く問題ない』、『今までと全く同じ』、『今回のバグには全く関係ない』

 この『全く』は、それこそ、『全く当てにならない』と解釈したほうが良い場合が多い。


 さて、修正の方向性は決まった。修正後の総合試験のやり直しを命じた。

 ここで、手を抜くと、後で痛い目にあうことが多い。


 ここでは、カリスマ性が必要である。

「将来、睡魔に襲われて、死ぬことがあったとしても、それは、今じゃない。将来、バグが発生して、顧客に怒られることが有っても、それは、今じゃない。今は各自が持てる能力を使って最善を尽くす時だ」


 ちょっと『ロードオブ・ザ・リング 王の帰還』ぽく、違うか。大体、この映画は2003年封切りだし。この台詞好きなんだよね。『雑貨の主人』にも使いたい。


 まあ、いづれにしても、このときは修正を終え、試験も修了。


 時計の針が、後3分、2分、1分となる間、心臓はドキドキものだ。誰も喋らない。

 ただ、コンソールを見て、時計を見て、バグがありませんようにと祈るのみ。


 このような時は何時もだが、神に祈る気持ちだ。でも、信心深くはないだろうな。よく裏切られるからね。


 2000年1月1日元日、ニュースでもしきりに2000年問題を報道しているが、うちのシステムは、特に何も起きなかった。。


 僕が家に帰ったのは、1月1日の昼頃だ。そして1月2日の朝まで、緊急コールもなく、この一年間の努力が実を結んだ『最高の目覚め』を迎えた。


  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

ミレニアム・バグに挑んだ勇者 村中 順 @JIC1011

★で称える

この小説が面白かったら★をつけてください。おすすめレビューも書けます。

カクヨムを、もっと楽しもう

この小説のおすすめレビューを見る

この小説のタグ