詳細設計書について思うこと

詳細設計書とは何か?ときかれれば下記のようなものを想像する人は多いと思う。
職業PGにわかるFizzBuzz

irofさんの上の記事をみて詳細設計書について思うことをtwitterで垂れ流していたら、


というツイートがTLに流れてきたので殴られないように
自分の考えをしっかり記事に書こうと思う。

さて、本題。
詳細設計書に対しての言われていそうな批判を思いつくだけ挙げてみた。
自分の意見と参考文献を交えながら一つずつ議論していこう。

”設計書”とは本来ソースコードのことではないのか。

オブジェクト指向言語関数型言語が普及したことによって、
もはやアプリケーションドメイン(解決したい問題領域)とソリューションドメイン(解決するためのデータ構造とアルゴリズム)の差は縮まり
わざわざ自然言語で設計書を作ることに意味が薄れてきている。
設計を直接、形式言語で表現することで、型による検証などの恩恵を受けることができる。
また近年のソフトウェアの複雑さから言って、設計を自然言語で記述することは非現実的だ。


設計をテストするには製造(ビルド)を行う必要があるが、
製造が非常に低コスト*1だということもソフトウェア工学の特徴の一つだ。
ソースコードを書き上げ、修正し、最終的なプロダクト(プログラム)に反映することは、
他の工業と比べ非常に低コストである。私の仕事でいえばビルド時間は3秒から30秒の間だ。
一息ついてる間に、テスト可能なプロダクトが目の前に現れる。
例えば自動車業界ではそうはいかない。設計を修正し、それを製造ラインに反映することは非常に高コストだ。
たった一つの変更でも巨額の金銭的損失が発生してしまうだろう。


プログラミング言語の高級化、製造の低コスト化が進んでいるソフトウェア工学において、
自然言語で記述された複雑な設計を形式言語に変換する作業はまったくもって無駄なのだ。


1992年にC++Journalで発表された What is Software Design で同じようなことが書かれている。

フローチャートを日本語化しただけにすぎない。

この意見は真っ当である。
処理のシーケンスを定義するのに自然言語は向いておらず(詳細というなら尚更のこと)
それより形式言語で定義しようとするのは当然のことだ。
UMLのアクティビティ図についての批判もこれに由来する。

アジャイルではドキュメントなんて一切不要だぜ ワイルドだろぉ?

これについては論外である。このような都市伝説は本当に実在するのだろうか。
アジャイルマニフェストをみても”包括的なドキュメントよりも動くソフトウェアを、”
とあるとおり、順序関係を定義しただけで、ドキュメントの重要性を無視する記述はない。
そして「ドキュメントは一切不要である」という論理はアジャイルのアンチパターンとしてよく語られる。

エクセルホーガン氏ェ・・・。

エクセルホーガン氏ェ・・・。

最後に

ここでは詳細設計書の存在価値を批判したが、ソースコード以外のドキュメントの存在価値を否定するわけでは一切ない。
ソースコードに記述することのできないソフトウェアのコンセプト、コンテキスト、制約、説明などのドキュメントは相変わらず重要であると考えている。

*1:ここでいうコストは、時間的コスト、人件費を含む金銭的コストのこと