その悩みは本当に設計上の悩みなのか?
設計のフレームワークを作っていたら、モデリングのフレームワークになっていた 要件定義、仕様策定、設計、実装は、すべてモデリングなのではないか モデリングのフレームワーク 実装で迷ったとき、「どこで迷っているのか」が分かるようになった そういえば、要件と仕様の違いをちゃんと理解していなかった 要件は What / Goal、仕様は How 「迷い」を上流へ遡る モデリングのフレームワークを作っていたから見えるようになった 設計のフレームワークを作っていたら、モデリングのフレームワークになっていた 現在、私はソフトウェア開発における「モデリングのフレームワーク」を作っています。 もともとは、より良い設計をするためのフレームワークを作ろうとしていました。 しかし、考えているうちに、あることに気が付きました。 要件定義、仕様策定、設計、そして実装は、それぞれ独立した活動ではなく、前工程で作られたものを、別の形でモデリングし直していく活動なのではないか。 この気付きから、現在は「設計のフレームワーク」ではなく、「モデリングのフレームワーク」として整理し直しています。 要件定義、仕様策定、設計、実装は、すべてモデリングなのではないか ソフトウェア開発では、一般的に、 要件定義 ↓ 仕様策定 ↓ 設計 ↓ 実装 という工程に分けて考えます。 以前の私は、これらをそれぞれ別の作業として捉えていました。 しかし、モデリングという視点から見ると、少し違った見え方をします。 例えば、要件定義では、現実世界の課題や目的を、「システムが何を達成する必要があるのか」という形に変換します。 仕様策定では、その要件を、「システムがどのように振る舞うべきか」という形に変換します。 設計では、その振る舞いを、「ソフトウェアをどのような構造にすれば実現できるか」という形に変換します。 そして実装では、その設計をコードという形に変換します。 つまり、 現実の課題・目的 ↓ 要件として表現 ↓ 仕様として表現 ↓ 設計として表現 ↓ コードとして表現 というように、同じ対象を、工程ごとに異なるモデルとして表現していると考えることができます。 この見方をすると、要件定義、仕様策定、設計、実装の間にあった境界が、少し違って見えてきました。 モデリングのフレームワーク 現在作っているフレームワークは、まだ大枠しか定まっていません。 イメージとしては、クリーンアーキテクチャのような同心円状の構造を考えています。 中心から外側に向かって、上流工程から下流工程へと進んでいきます。 そして、それぞれのレイヤーには、その工程で適切なモデリングを行うための考え方を配置します。 ┌───────────────────┐ │ 実装 │ │ ┌───────────────┐ │ │ │ 設計 │ │ │ │ ┌───────────┐ │ │ │ │ │ 仕様 │ │ │ │ │ │ ┌───────┐ │ │ │ │ │ │ │ 要件 │ │ │ │ │ │ │ └───────┘ │ │ │ │ │ └───────────┘ │ │ │ └───────────────┘ │ └───────────────────┘ まだこの図自体も発展途中です。 ...