« 妥当性検査をDB側に集約する | トップページ | アプリケーションドライバ発表会(3/26,Fri) »

2010.02.28

キレイなコードでも仕様書の代わりにはならない

 4GL(第四世代言語。既に死語)を使っていた頃に「ソースコードが仕様書だ」と言い張っていたことがある。テーブル操作コマンドと統合されているそのプログラミング言語を使えば、じっさい英語の文章のように明解にコーディングできた。しかしそんな強力な言語を前提にしても、今から考えれば「コードが仕様書だ」と主張したのは間違いだった。

 理由は単純。仕様書として通用するほどキレイにコーディングが可能と謳われている言語を使ったとしても、コーディングがキレイになることが「保証」されているわけではないからだ。まあ当然のことで、文章の読みやすさが書き手によってまるで違うのと同様、コードの読みやすさはプログラマによってまるで違う(その日の気分や体調によっても違うかもしれない)。いかに標準化を徹底しようが、同じ動きをするのにいっぽうは読みやすくいっぽうはわけがわからないなんて事態は日常的に起こる。そして、システム開発・保守が特定の人物のみによって継続されることはほとんどなく、遅かれ早かれ別の担当者に申し送られる。その際の引継者のコーディングスキルや体調がすぐれているとは限らない。

 つまり、「コードが仕様書だ」という主張は「誰が書いたものであってもコードを仕様書としてみなせる」という一般論の謂いではなく、「私が書いたコードは仕様書と呼べるほどに美しい」という自惚れ屋のひとりごとみたいなものでしかない。もちろん、キレイにコーディングできることそのものは、システムの保守性が高まるゆえに価値ある技能である。しかしその事実と矛盾することなく、開発者のコーディング能力の偏差に対する備えとして業務システムに仕様書は必要になる。読みにくいコードよりは読みにくい仕様書のほうが、様式化の度合いの高さゆえに「プログラムの意匠や意図」がわかりやすいからだ。

 もうひとつの理由は、プログラミング言語が移ろいゆくものである点だ。どんなに一世を風靡しようが、どんな言語も廃れる時が来る。Javaについても「えーっ、あの大昔のプログラミング言語でしょ?そのコードを読むのぉ、サイテー」なんて愚痴られる時代が来る。長い目で見れば「コードが仕様書だ」なんてちょっと恥ずかしくて言えない。

 なお、ここで言う「コード」には、コードから自動生成されたクラス図や各種ドキュメントも含めている。コードを他の何かに加工することで自動的にわかりやすくなるとの期待があるなら、それは幻想だ。もともとわかりにくく書かれている外国語の文章を翻訳してもわかりにくさが改善されないのと同じ理屈である。じっさい、上述の4GLを自然言語に変換するツールを試してみたことがあるが、わかりやすいコードならまあまあわかりやすく、わかりにくいコードならますますわかりにくく変換されたものだ。何であっても、コードから導出されたものは、仕様書にはなり得ない。仕様書が存在しない場合にはそういうものでも利用せざるを得ないが「味の悪い代用品」でしかない。

 ただし私は、現在の仕様書のあり方を是としているわけではない。問題は以下のようにいろいろある。

1.仕様がいつまでも確定しなかったりする
2.説明が意味不明だったりする
3.作成やプログラムとの整合性維持に手間がかかる

 1は、ユーザの姿勢と設計者のスキルレベルとが複合的に絡んだ社会的な問題なので簡単には解決できない。いっぽう2や3は、仕様書が人間向けに書かれているという体制上の問題なので技術的に解決できる。すなわち、EXCEL方眼紙あたりを使って「人間にしか読めないし人間にも読めないことのある仕様書」を書くという無駄をやめ、専用の仕様書エディタを使って「人間にも機械にも読める仕様書」を書けばよい。

 アプリケーションドライバ(XEAD Driver)は、そのためのソフトウエアだ。仕様書にもとづいてシステムが動くことの爽快さを実感してほしい。

|

« 妥当性検査をDB側に集約する | トップページ | アプリケーションドライバ発表会(3/26,Fri) »

コメント

キレイなコードでも仕様書の代わりにはならないには同意しますが、結論には同意しかねます。
綺麗なコードと言うのは、必要最小限に記述で、仕様をすべて満たしているモノを指すと思います。そのため、コードからだけでは、その仕様の背景(複雑な運用方法)などを導きだすのは困難を極めることもあります。
ですから、良い仕様書というのは、仕様の背景となる前提条件から、実現すべき仕様が明確になっており、その実装方法までがもれなく記述してあるものを言います。
決して浅知恵で作ったツールで解決するようなものではありません。

投稿: ベンダーSE | 2010.04.17 16:46

ベンダーSEさん

てへへ、浅知恵ですかね(^^; 仕様書に求められているものは言われるようにハイレベルで、そのために作成にどえらい手間がかかります。だからこそ仕様書にもとづいてシステムがダイレクトに動くような工夫をしないと、あまりにモッタイナイと私は思うんですよね。

投稿: わたなべ | 2010.04.19 14:07

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: キレイなコードでも仕様書の代わりにはならない:

« 妥当性検査をDB側に集約する | トップページ | アプリケーションドライバ発表会(3/26,Fri) »