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

Cプログラミング診断室 第3部救命救急センター 向きプログラムに遭遇

2001年4月29日

Javaに見えないJavaプログラムを見てしまった というのに1年半前に遭遇したのであった。これを見てから、Javaでもプログラミング 診断室が書けるかと思ったが、さすがにそのレベルの優れたソースはその後集まらず、 執筆はネタ不足で挫折したのであった。

それが、先日、Cのプログラムで、ちゃんと汚いのに遭遇してしまったのである。 まあ、そのうち見なければいけないかなと思っていたソフトなのであった。 色々イワクがあって、それを書くととっても興味深く、日本の社会構造の奥深い ところが分かるのであるが、事情があって書けないことになっている。

そういう訳なので、何かあるとは見る前から思っていた。事情が事情だから、 おもいっきり手抜きのコーディングとか、その類のものかと思っていたのだが、 あまりにも明らかなバグもあるのが分かっていたので、単なる手抜きというのも 考え難かったのである。

何しろ、Sparc上のSolarisで動いているプログラムであり、かなり立派な、 つまり高価なマシン、ということは貧乏人の私には入手困難な高級マシンだったのだが、 ちょっとソースファイルのあるディレクトリを覗いた時に、行数だけ数えたら 3万行あったのである。Cで3万行もあったら、かなりのことが出来ると普通なら 思うのであるが、実際にはあまりたいしたことができないどころか、使いにくい ソフトの上に、Solarisまで落してしまうという鬼のようなプログラムらしいのである。

OSを落してしまう理由はどこにあるかちょっと見当が付かなかったが、とりあえず 入手することになってしまった3万行を、とりあえずその3万行対策会議の前に、 最低限の責任を果たすべく眺めようと思ったのである。ちょっと細工をして、 自分のマシンから見えるようにして、ちょっと見始めたら、なかなかのものであった。

WEB関係のソフトなので、当然文字列処理がいっぱいなのであり、そのところが 『Cプログラミング診断室』の「第7章文字列処理は得意」よりも、もっともっと 強力であったのだ。よくあるように、関数strcat(str1,str2)は、最初の文字列str1に 文字列str2を繋いでしまうために、文字列str1のためのバッファが短いと、繋げたときに オーバーランしてしまい、トラブルになることがよくあるわけで、その対策として もし足りなければ自分で勝手にメモリを確保しながら文字列を繋げる関数を用意してある。 でも、その用意されたプログラムは、当然出来は悪かった。

こういう人のプログラムには、memset, strcat, sprintf がいっぱいあって、 さらに & もいっぱい使われていて、そして文字列処理の部分はプログラムが 黒々しているのである。そして、その黒々としているところが繰り返されたりするのである。

という訳で、プログラマの方は、どうも努力して作り上げたらしき痕跡がプログラムの あちこちに散見されるのであった。よくこんなに書く気になったなぁ、私だったら、 もっとサボったコーディングをするのだがと思ったのだが、努力している人に、 努力をしないで仕上げる方法を教えるなどという悪の道を教えるのはやはり良くない のであろう。こんなに努力したんだから、大変な労力を使ったのであり、投入した 経費を考えるとかなりの資産価値があるソフトウェアということに経理上は なっていたりするのである。それを、見るなり「ゴミ!」と言ってしまう私は、 相手の立場を考えていない訳で、そのソフトウェアの質によって被害やら不満やらを 感じている人がいかに膨大な数がいようとも、開発者に礼儀を示さないということで、 とんでもない悪者扱いとか、圧力をかけられたことさえあったなぁ。

まあ、そいういう風に感じながら、あちこち見たのである。これで、Cプログラミング 診断室の「第2部 集中治療室」の後ろに「第3部 救命救急センター」というのを 追加できるかと思うのは自然なことであろう。なぜ救命救急センターかというと、 このプログラム、とても手を入れられるようなものではないなということなのである。 つまり、救命救急センターというところは、もうほとんど死んでいる人が運び込まれる ことが多く、実際に救命できることは少なく、まして社会復帰することは1%にも 満たないらしいのを先日文庫本で読んだところであった。このプログラムも、 ちゃんと社会復帰するのは無理だろうと思って、救命救急センターという題名を 思い付いたのである。

そういう感想を持って、先日某所で対策会議なるものが行われたのであったが、 このプログラムを捨てるというのは、かなりあっさり決まったのであった。 なあに、作成者たちも既に居ないような状態で、手をつけられる人がいないのである。 問題のあるシステムではありがちな状態である。

このプログラムが単独で動いているのなら、単に捨てて書き換えれば済むことなのであるが、 データベースから情報を引き出してはWEBページを動的に生成するということをやっているので、 ちょっとややこしいのである。データベースの方にもちょっと問題があったが、 まあこちらは手をつけると、WEBサーバ以外のシステムにまで影響が出てしまうので、 システム全体のうち、WEBサーバだけを入れ替えることにとりあえず落ち着いたのである。 つまり、不特定多数の人に対するサービスはちゃんとしないと、サービスしていることが プラスどころかマイナスになってしまうからであろう。

納品が終了しているプログラムで、検査成績書もあったのだが、データ入力部分は 分厚いのがあり、検査もちゃんとやったらしく手書きで日付などが書かれていた。 でも、WEB部分は、データ入力部分に比較すると、その数%程度しかなく、 こちらは全部ワープロ出力だけみたいで、検査の日付も納品日に統一されていたようで、 こんなのでいい訳ないなと思うしかなかったのである。もちろん、画面コピーも なければ、どんなブラウザを使って確認したかの記述もなかったようである。 本当に、どうやってテストしたんだろう?

しかし、「第3部 救命救急センター」を書き足して、増補改定判を出すためには 許可を取らないといけないのだが、とても許可を出してくれそうにない相手なので、 見なかったことにしようと思う。あれは、ただの悪夢だったのだ。


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