いものやま。

雑多な知識の寄せ集め

ソフト開発における「設計」とは何なのか。(その4)

前回は「ソースコードを説明する文書」は「設計書」ではなく「開発者向けドキュメント」にすぎないという話をした。

では、結局「設計書」とは何なのかというのが今回のお話。

ソフトウェア開発の特異性

ソフトウェア開発では、製造業での開発と全然違う点が1つある。

それは開発がワンショットで終わらないということ。

製造業では一度設計書まで作ったら、あとはそれを製造するだけとなる。 基本的に設計書は使い切りで、細かい修正を入れたり、別の開発で参考にすることはあっても、その設計書にさらに手を加えて新しい設計書にするというのは考えられない。 企画した開発ごとに新しい設計書を書いていくことになる。

これがソフトウェア開発だと違ってくる。

一度ソースコード(=プログラムの設計書)を書いてプログラムをリリースしたあとも、次なる開発では基本的にはそのソースコードに手を入れて新しいプログラムをリリースしていく。 ソースコードは1回書いたら終わりというわけではなく、ずっと使い回しで更新されていく。 もちろん、どこかで従来のコードを捨てて1から新しく書き直すということもあるけどw

これは「製品」という枠で考えたときに、製造業では開発が1回で終わるのに対し、ソフトウェア開発では開発が複数に分割されているとも言える:

製造業の場合

製品 開発 設計 製造
製品A
製品A開発 製品A設計書 製品A
製品B
製品B開発 製品B設計書 製品B

ソフトウェア開発の場合

製品 開発 設計 製造
製品A
製品A ver.1開発 製品Aソース ver.1 ※新規 製品A ver.1
製品A ver.2開発 製品Aソース ver.2 ※更新 製品A ver.2
... ...(更新が続く) ...
製品B
製品B ver.1開発 製品Bソース ver.1 ※新規 製品B ver.1
製品B ver.2開発 製品Bソース ver.2 ※更新 製品B ver.2
... ...(更新が続く) ...

なので、ソフトウェア開発で作っているものは、実は「ソースコード」ではなく「ソースコードの差分」だったりする (ちなみにこれはver.1の開発のときも同じことが言える;「ソースコードの差分」=「ソースコード」となっているだけ)。 ソースコードを作ってるんだと勘違いしやすいけど。

そこに気付けばソフトウェア開発における「設計書」が「何の」設計書なのか分かるかと思う。

そう、ソフトウェア開発における「設計書」というのは、開発で生み出す「ソースコードの差分」を設計、説明した文書となっている。

ソースコードそのもの」ではなく「差分」を説明しているのが肝。 「そのもの」の説明だとソースコードの変化に追従していかないと腐るわけだけど、「差分」であればそれは変化していくものじゃなくて変化の内容それ自体なので、腐ることがない。

ちなみに、「要件定義書」というのも同様で、今回の開発(=生み出すソースコードの差分)で何を実現するのかを規定している文書といえる。 「ソースコードそのもの」で何を実現するかとなっちゃうと、対象の開発とは関係ない要件や仕様までカバーする必要が出てきちゃうからね。

図解すると次のようになる:

ソフトウェア開発の様子

ここまでを一度まとめておくと以下のようになる:

こうしたときに、それでもなお「設計書」は不要なのかや、必要なのだとしたらどういったことを書けばいいのかについては、次回以降に書きたい。

今回はここまで!