6000ステップのプログラム

前の大学の卒業生が書いているBBSにとんでもないと思えた話が書かれていた。6000行のプログラムをひとつにまとめろと品質管理担当者にいわれたらしい。信じられない。6000行である。藤原さんの有名な著作Cプログラミング診断室(http://www.pro.or.jp/~fuji/mybooks/cdiag/)にある最長不倒関数でもこんな長くなかった。今調べると、3000行である。その倍に当たるプログラムを目にしたら、たぶん私は1日途方に暮れてしまうだろう。
まず何が嫌かといえば、おそらくそれだけ処理があるということは変数の数は馬鹿にならないはずだ。つまり処理全体をまかなう変数の数をプログラムの先頭で供給せねばならない。だから5行目の宣言が5000行目で使われるなんていうことが起こってしまう。
他にも、処理が多すぎて単体テストカバレッジが大変になりそうだとか、ループでインデントが深くなりすぎないかなどと考えてしまう。
そして、一番の問題点は6000行は人間が一度に理解できる量を超えているということだ。どこにどんなことがあり覚えきれず、整合性が取れているのか不安で仕方がない。
しかし、研究室の同僚と議論をしていたら、これは「COBOL独特の記法では?」ということになり、一緒にネット上のCOBOLソースを拾ってみることにした。そうすると、COBOLでは関数という概念がなく、副プログラムというものしか存在していないようだ。そして、この副プログラムは1ファイルに書かなければならない。これでは副プログラム化は骨が折れる。
そこで、どうするかというと、プログラム中をラベルやコメントの区切りを使って処理の単位を示している。こんなアセンブラみたいなやり方は初めて見た。
また、同じような処理が繰り返し現れてもCOBOLでは普通のようだ。コピーアンドペーストで作るプログラムが普通なのかもしれない。
というわけで、かなりのカルチャーショックを受けた。なにか全く今まで知らなかった別の世界のようだ。
「他のモジュールで使う予定がないので一つのプログラムにしてください」と指示があったらしい。COBOLの人にとっては、「他のプログラムからコールされなければ、ひとつのプログラムにすべきだ」という考えらしい。COBOLのことを知らないときは何を馬鹿なことを言っているのか、とたかをくくっていたが、今はただ冷や汗をかくしかないかもしれない。そして、C言語など他の言語になれてしまった私にはものすごく拒絶反応を起こす言語であることは間違いない。
確かに、分けすぎたプログラムは処理が深すぎてトレースが難しい場合があるが、変数のスコープさえ気をつけていれば、一つ一つの動きは確認できるため、単体レベルでの品質の向上は望めるはずだ。しかし、この6000行というのは、私にはただただ、途方に暮れるしかない。