仕様文書を抽出する(承前)


仕様文書をソースプログラムから生成しようというアイディアはかなり昔からあって、 これを徹底的に行った例としてD.KnuthのDocument Webと いうのがあります。WebといってもWWWとは関係ないので念のため。

どんなC++プログラムからでも抽出できるようにしようと考えると、 C++の構文解析系なんかを持ち出しておおげさな話になってしまいます。 でも、ソースプログラムの書き方を自分なりに決めておけば、 C++とのつきあい方(4)で書いたように、 簡単なスクリプトでかなりのことができます。


それにしても

私がこの仕様書自動生成方式を始めたのは10年位前、 C++はまだ普及していなくてCで開発していたころです。 当時はPerlでなくawkでスクリプトを作っていました。

函数1個あたり5〜20行程度のものが多く、それほど大規模なプログラムでは ないんだけど函数の個数は数百ありました。 当時COBOLなんかで開発していた人たちには、函数の行数の少なさは 驚きだったみたいですね。

完成間近のころ、電話がかかってきて、「函数は全部でいくつ位ありますかねえ」。 さっそく数えて回答したところ、しばらくして、 A3のワークシートを数百枚、かついで現れました。 枠がきれいに引かれていて、手続き名とか入力パラメーターとか、 書き込む欄がある。「きれいに」と書いたけど、実際は3回位コピーを 繰り返した原稿だったみたいで、ややぼやけていました。

「これに仕様を書いて欲しいんですけど」

そういう本人もちょっとためらいがちなのは、 多分よく事情を知らない課長あたりから「仕様書はこの書式で書くように」と 言われたんでしょう。 でもねえ、枠のついたワークシートが先に用意されているということは、

せっせと鉛筆で書けということ

なんですな。 しかも、たとえ書いたところで、誰も読まないことはほぼ明らか。

建前としては、先に紙に仕様書を書いて、それからプログラムを書き始めることに なっていました。所謂「落水(WaterFall)」モデルです。 でも、当時既にこのモデルは現実に合わないと言われていましたし、 実際、プログラムを書き始めてから仕様が変わるなんてのは普通のことでした。 ということで、仕様書は事後に出てくるものだ、というのはほぼ全員に 暗黙に諒解されていました。

それにしても、このとき作ったのは、これまで紙とエンピツと消しゴムで やっていた設計工程の一部を自動化しようという実験プログラムだったんです。 足元をすくわれる、という思いでしたね。

「紙とエンピツ」ではなく「紙とエンピツと消しゴム」と書いたけど、 当時は本当に消しゴムが重要だったんですよ。 エンピツで書いておいて、承認印をもらった後、ハンコ以外をきれいに消して書き直したり。 電動消しゴムが必需品でした。 私は不器用で消している最中に紙をぐちゃっとやってしまうもので、 あまりそんなことやれとは言われませんでしたけどね。