Requirementsの外部性
Requirements(要求)はソフトウェアの外にある——ステークホルダーが世界に対して望む状態・結果であり、ソフトウェアの性質ではない。
核心
Requirements は「商品を検索できる」「月末に請求書が発行される」といった、環境(世界)に対する期待だ。ソフトウェアはその期待を実現する手段にすぎない。
この区別は Zave-Jacksonの枠組み の中核的な洞察であり、S ∧ D ⊨ R という定式化において R(Requirements)が S(Specification)とは明確に分離されている。
なぜこの区別が重要か
「仕様」という言葉が Requirements と Specification(Contract)の両方を指してしまうことで、以下の混乱が生じる:
- 「仕様通りです」が Requirements を満たしていないケース
- 「仕様と違う」が Contract の問題なのか Requirements 自体の誤りなのか区別できないケース
- Requirements を直接実装しようとして、Contract の設計を飛ばしてしまうケース
開発プロセスとの関係
開発プロセスでは Requirements → Contract → Implementation の順で考えるが、これは思考の順序であって因果の方向ではない。因果は逆向きで、Implementation が Contract を実現し、Contract が(Domain Knowledge と合わさって)Requirements を達成する。