ホームページ目次1996年前の話次の話

まだ続くハードディスククラッシュの影響

1996年10月5日

今日は、休み。それで、JAVAの練習のためにちょっと作っている 「ののぐらむ(お絵書きロジック)」 の手直しをした。

じつは、解くほうのプログラムにバグが残っていることが分かっていた。いっ たいどれだけの人が気がついたかは知らないが、正しく解けなかったのである。 絵を書いてから、それから問題を作れば、すくなくとも解は1つ存在するに決 まっているのだが、それでも解がでなくなることがあった。

まあ、公開しているJAVAプログラムから呼ばれるプログラムであったの であるが、しょせん遊び、だから重要なのであるが、直すのを延期していた。 今日は土曜ということで、プログラムに手をいれることにした。

このプログラムは、某氏に2年程前に作って頂いたものであるが、C++で書 かれている。デバッグするには、とにかくコンパイルしなければならないので、 ちょっとコンパイルと思ってやったら、調子良くコンパイルでき、実行しても 動くようであった。

しかし、データの量が増えて来ると、データ入力でコアを吐いてしまう。ス トップしてしまうのである。原因は、ライブラリにあるようだが、まあ、ライ ブラリやコンパイラを調整しても良かったんだが、プログラムの方をちょいと 直して対応した。

ちょっと専門的にいうと、istrstream のところがうまく動かなくなることが あったのである。まあ、こんなもの、入門書にはまず書かれていないし、便利 ではあるが使用するひとは少ない。だから、テストも不完全に決まっているで あろうと思い、コンパイラのより信頼性の高い部分だけを利用したプログラム になるように手直しした。

コンパイラやライブラリを直すなり、より正しいものをどこかから手に入れ ることにより解決するのが正当派である。しかし、いかに正しいプログラムを 書いても、十分すぎるほどテストされていない機能を使うようなプログラムは、 どうしても危険を伴う。だから、猿でも知っているような機能だけを使って開 発するのが安全確実を目指す時には絶対に重要なのである。

まあ、そういうふうに誤魔化して、きちんと動作はするようになった。といっ ても、まだプログラムのバグを直したのではない。ハードディスクがクラッシュ して、コンパイラなどあらゆる環境がバージョンアップされたので、必然的に 起きるに決まっている問題を1つ突破しただけである。

やっと、アルゴリズムのチェックの段階に入った。それにしても、パズルの プログラムは面倒である。バグが発生するデータを作り、ファイルにしておか ねばならない。この部分は、昨日作っておいた。(私は用意周到!)

で、そのデータファイルを使ってのデバッグである。しかし、パズルのプロ グラムは面倒である。単純に順にチェックして終りなんてことは少ない。少し ずつ、少しずつ問題発生の位置を絞り込み、やっと原因をつきとめるのに1時 間以上かかってしまった。

原因の個所は分かったが、それをどう直すかが難しい。自分の現在作りつつ あるプログラムでさえ大変なのに、昔他人様が作ったプログラム、それも難解 至極に決まっているパズルのプログラムである。下手に直すと、別のバグが発 生するかも知れない。それでも、プログラムをじっくりと読み耽ると、なんと か理解できたみたいで、10行程度の修正を加えた。

で、動作チェックが、またまた大変である。手元に持っている、さまざまな データを全部入れてチェックしてみた。もちろん、全部入れたからといって、 私が用意する程度のデータであるから、検査の抜けはいっぱいあるに違いない。 もちろん、人間が解ける程度の問題をいれてやったのでは役に立たない。人間 に解けないような難題をがんがん入れていじめ抜かないといけない。

これで、一応動くらしいので、次は、ネットワークセンターのマシンでコン パイルして、動作テストだ。単体テストの場合には、何ら問題なく動いた。さ らに、JAVAから呼び出すテストである。すると、どうだ、どんな場合にも動作 しなくなってしまった。

「んにゃ、なんでや?」と思って、色々調べたら、動かない理由が分かった。 Java appletから呼び出すときには、ちょっとした情報の加工をしてから出力 しているのであった。こんなところ、何の変更も必要ないと思っていたのが大 間違い。

この部分は、ハードディスクが潰れる直前に変更した部分で、バックアップ されていなかったのである。

「げぇー、どう作ったか思い出せない」

ということになってしまった。しかたがないので、呼び出し側や、ネットワー クセンターに残っていた古いオブジェクトを走らせて、実行結果を見たりして、 仕様を思い出しながら、また同じことをするのを作った。もちろん、同じ機能 を果たせばいいのだが、2度作れば、2度とも全然違うプログラムの追加にな るに決まっている。

でも、まあ、何とか動作するようになったかなぁ。まだ簡単なテストしかし ていない。ぐちゃぐちゃとマウスで人間様には解ける筈もなさそうな絵を書い て、何度も何度もチェックしてみた。今は、2分で解くのを打ち切るようになっ ている。ののぐらむ(お絵書きろじっく)は、めっちゃくちゃ時間がかかるパ ターンになることが頻繁にあるので、適当な制限時間を設けている。

今のところ、途中で中断することもできないし、まだまだ問題がいっぱいだ。 ちゃんとサーバ・クライアントでやるべきかなぁ。

まだまだ、ののぐらむ(お絵書きろじっく)は改良の余地がいっぱいあるの だが、その前に、ハードディスクのクラッシュの影響が今後も出ると思うと、 恐ろしいことばかりである。

みなさん、しっかりバックアップは取っておきましょう。


ホームページ目次1996年前の話次の話