torutkのブログ

ソフトウェア・エンジニアのブログ

ソフトウェア設計とは?

ソフトウェア開発において、「設計」という用語が明確に定義されて使われているのか疑問を感じたので、整理をかねてメモ。

ここでは以下のように定義してみる。

  • 設計作業とは、ソースコードを作成する作業である。
  • 設計成果物とは、ソースコードである。
  • 設計作業の入力は、ソフトウェア要求仕様である。

開発するソフトウェアが複雑になると、複数の設計者が分担しながら、段階的にソースコードを作成していくことになる。ここにいろいろな設計技法が登場することになる。

設計という一まとまりの作業を、途中で分断して別の担当者に分けてしまうことは難しいのに、世の中ではそのような分担が横行している。分担は、要求仕様の項目(つまり入力)で分割するのが自然である。

検証の観点では、入力のソフトウェア要求仕様と出力のソースコードの間の対応関係が明確になっている必要がある。いわゆるトレーサビリティか。

上述定義の設計作業の過程で中間的な成果物を作ることがある。これは保守で役立つものではない。
保守で必要な資料は、設計作業完了後に起こす必要がある。

モデリングと設計の怪しい関係

  • モデルとは「ある人にとっての、ある状況、あるいはある状況についての概念の明示的な解釈」

(「UMLモデリングの本質」で引用されたBrian Wilson氏の言葉)

ソフトウェア要求仕様に盛り込むモデルが分析モデルか?