「プログラム設計書」って必要?

最近のお題は「プログラム設計書」らしい。

私はプログラムに書くコメントが嫌いだ。それどころか

コメントを書いたら負け

とさえ思っている。同じ理由で、「プログラム設計書」とか「詳細仕様書」と呼ばれるコードレベルの設計書も嫌いだ。嫌いなだけじゃなくて不要だと思っている。

なんせそういったコードレベルの設計書に書くべきことは細かい。細かいということは、「実装を縛る」ものだから、その分精度が必要となる。ところが、精度を追及すると、

  • 書くのが大変
  • 検証が大変
  • 版管理が大変

ということになって、いたずらに工数が増える。そして、タチの悪いことに、

すぐ嘘になり、その嘘を検証するのが困難

ということになってしまう。

何しろ人間ってのは間違える。間違えなくても、想像力に限界がある。そのため、コードレベルの設計書はどんどん改訂しなきゃいけないことになるのだが、その改訂に付随する手間もさることながら、そうやっている時の間違いの検証が難しい。何しろ設計書に嘘を書いても、コンパイルエラーすら出ない。「デバッグ」するにもコード化してからでないと出来ない。

もちろんそのためにレビューをやるし、レビューをやれば精度は上がる。XPよろしく「ペアデザイン」をやるという手もある。でも、動かないものを、限りある人間の想像力で作業する限り、「思い込み」とか「勘違い」によるエラーを防ぐのは限界がある。「ペアデザイン」やっていても、二人で間違えていたら世話はない。

「ペアプログラミング」の時はすぐ間違いに気がつくことが出来るから、勘違いや思い込みによるエラーは消しやすい。「ペア」でなくても、かなり気がつく。ところが、そういった機械的客観的検証手段を持たない「詳細設計」は、いつまでも間違いに気がつかないこともある。

そういった意味で、私はコードレベルの設計書は、

書くだけムダ

とさえ思っている。

逆に、もっと上流の要件定義レベルだとか、概念設計レベルといった設計は、これは十分時間かけて良いものを作るべきだと思っている。これは顧客でも理解可能だから(そうでなかったらその時点で負け)、レビューもやろうと思えばちゃんと出来るし、この辺がおかしかったらこの先どれだけ精度上げても無意味だ。また、これはシステムの土台や骨組に当たるものであるから、ちゃんと作ってあればそうそう変更も必要がないはずだし、変更されても困る。本当はこのレベルまで反復設計法が使えると嬉しいと思うのだが、少なくとも日本の企業はそういったことには向いた組織になっていないし、担当者レベルでそこまでの見識を期待するのは難しい。「理念」に属することはやはりトップに意思決定して欲しいし、それでこそエンタープライズシステムだ。

だから、どうせすぐ紙くずになってしまうような、コードレベルの設計書なんてやめてしまって、コードレベルやデータベースの詳細設計レベルあたりまでは、

プログラマの仕事

と切り分けてしまって、アジャイルでも何でもやってしまえばいいと思う。その分、上流工程をしっかりやっておけばいい。「なんちゃら設計書」は、せいぜい「画面のファンクション」とか「データベースの概要」あたりまででやめておいて、それより下は「プログラマ頑張れ」にするべきなんじゃないかな。だいたい、不条理で妙に細かいコードレベル設計書を出されても、

プログラムは会議室じゃない。現場で作ってるんだ!

とプログラマは言いたいはずだ。また、そうやって「詳細設計よりもちょっと上」あたりにプログラマを活躍させるのは(そして担当者同士で会話することは)、モチベーション管理、キャリア設計、スキルアップといった点でも意味がある。また、「紙くず」の生産に時間や手間はコストをかけないでも済む。

確かにいろんな理由から、コードを縛りたいという要求はあると思う。また、プログラマを顧客に会わせたくないという場合もあったりもする。だけど、土台となる部分がちゃんとしていれば、コードは多少クソであっても最悪局所的な書き直しで済む。いや、そうなるような設計をしておくのが上流の仕事だ。またそうなれば、個々のコードをガチガチに縛る必要はない。

縛らない代わりに、何かの設計ミスやプログラマの問題が局所化されるように、きっちり上流を作っておけばいい。それが上流の「腕」だろう。だから、

コードレベルの設計書は、必要になったら負け

だと思うのだが、どう?

PS.

←に「プログラマ」と書いてるから誤解されるかも知れないけど、仕事ではコンサルからハードウェアまでやります。第8レイヤから第0レイヤまでカバーします。「システム開発」の世界だと、バリバリ上流工程な人です。連載の次回は「オープンソースと上流工程」とか書いてみるかな。

Google Reader Yahoo Facebook Twitter Digg FriendFeed Delicious Google Translate
This entry was posted on4月 15th, 2008 at 16:05:26. You can follow any responses to this entry through the RSS 2.0. Both comments and pings are currently closed.

6 Responses

Comments(3)Trackbacks(3)

  1. おーちゃん

    >「プログラム設計書」って必要?
    うーん。必要はないと思います

    http://www.hotdocument.net/
    みたいなものを使えば、とりあえず雰囲気出せますよね。

    この雰囲気だけで、実際は必要ないと思います。

    2008/5/5 月曜日 11:50:55 | #1
  2. ogochan

    まぁ体装だけですよね。

    2008/5/5 月曜日 14:54:57 | #2
  3. KOU

    仕様書、設計書などのドキュメント類は多くのツールによって作ることが一般的だと思います。
    下記に情報を載せておきます。

    【A HotDocument】は、かなり多くの人が使っているようです。
    よろしければ参考にしてみてください。

    ドキュメント自動生成ツール【A HotDocument】
    http://www.hotdocument.net/

    Excel/chm/html形式出力のドキュメントギャラリー
    http://www.hotdocument.net/gallery/index.html

    ドキュメント出力サンプルのダウンロード
    http://www.hotdocument.net/main/downfile.html

    各種製品概要は下記の通りです。
    http://www.hotdocument.net/product/vb7.html – VB版 仕様書 作成
    http://www.hotdocument.net/product/cpp.html – C言語/C++版 仕様書 作成
    http://www.hotdocument.net/product/cs.html – C#版 仕様書 作成
    http://www.hotdocument.net/product/access.html – Access版 仕様書 作成
    http://www.hotdocument.net/product/excel.html – Excel版 仕様書 作成
    http://www.hotdocument.net/product/java.html – Java版 仕様書 作成

    関連サイトも書いておきます。
    http://www.hotdocument.jp/ – VB、VC++、C#、Java、Access、Excel対応仕様書
    http://document-csharp.com/ – C# プログラム設計書 サンプル集
    http://document-cpp.com/ – C言語/C++ プログラム設計書 サンプル集
    http://document-java.com/ – Java プログラム設計書 サンプル集
    http://document-vb.com/ – VB プログラム設計書 サンプル集
    http://document-access.com/ – Access プログラム設計書 サンプル集
    http://document-excel.com/ – Excel プログラム設計書 サンプル集
    http://www.coding-standard.com/ – コメント規約、コーディング規約

    2008/8/14 木曜日 14:58:04 | #3
  1. Slashcolon /: より:

    最近のお題はプログラム設計書らしいので釣られてみる…

    おごちゃんの雑文の「プログラム設計書」って必要?って意見にほぼ全面的に同意
    全面的に同意してるので、新たに書くこともないのだが…
    はっきり言って、うんこ文書を生産して満…

  2. [...] original article « 「私のTwitterアカウント売ります」–Rocketboom創設者の提案が投げかける疑問:スペシャルレポート – CNET Japan Rails 2.0 » オープンソースなRailsアプリケーションは集合!「Open Source Rails」 » [...]

  3. 表現の手段と交換の手段…

    「「プログラム設計書」って必要?:おごちゃんの雑文」とか 「業務システム開発でドキュメントを作ることについて:満足せる豚。眠たげなポチ。」とか読んでいろいろ思い出しつつ…

  • 私について

    ただのプログラマです、ハッカーではありません。

    秋葉で暮し秋葉で仕事してますが、秋葉系は嫌いです。物事を冷静に分析することは好きですが、ニヒリストは嫌いです。

    秋葉でちっこい会社をやってます。 こーゆーことがお仕事です。

    詳しいことは、自己紹介のページでも見て下さい。また、mixiの方でもいろいろわかるかも知れません。twitterは@ogochanですが、たいしたこと言ってません。近頃はShorplug内の別館で日記書いたりもしてます。だいたいここのコピーだったりしますが、ログインするとコメントがつけられます。

    日経ITProに連載(生越昌己のオープンソースGTD)を書いています。「ちゃんと書いた文章」が読みたい人は、そっちを読む方がいいと思います。

  • このページについて

    ここは私の雑文の置き場です。WordPressを使っていますが、いわゆるblogのつもりで書いているわけではありません。「覗き見のできるチラ裏」くらいの意味しかありません。

    もしかしたら有用なことがあるかも知れません。あるいはむかつくことも書いてあるかもしれません。それらはみな「そんなものだ」と思っておくに留めましょう。

    コメントを書くのは構いませんが、「反論」の類はよそでやって下さい。同意する気のない人達と議論する気は全くありませんので、議論したければよそで勝手にやって下さい。

    と言っても、「読むな」「広めるな」というわけでもありません。リンク、ブクマの類は御自由に。

  • カテゴリ

  • 過去の記事

  • メタ情報