仕様の多義性
「仕様」「機能」という日常語が、異なるレイヤーの概念を無区別に指してしまう問題。
「仕様」が指しうる3つのレイヤー
| レイヤー | 確立された用語 | 「仕様」と呼ばれる例 |
|---|---|---|
| Requirements | 要求 | 「商品を検索できるのが仕様です」 |
| Contract | 契約 | 「このAPIの仕様はGETで200を返す」 |
| Implementation | 実装 | 「内部の仕様としてキャッシュを使っている」 |
「機能」が指しうる3つのレイヤー
| レイヤー | より正確な語 | 意味 |
|---|---|---|
| Requirements | Capability | ユーザーが得たい能力 |
| Contract | Protocol | その能力を提供するI/Fの約束 |
| Implementation | Mechanism | その約束を実現する内部構造と振る舞い |
この曖昧さが生む具体的な問題
- レイヤーの混同:「この機能の仕様は?」がどのレイヤーの話か分からない
- 因果とプロセスの混同:「仕様を決める」がトップダウンの手順なのか、実体から導出される契約の確認なのか区別できない
- 乖離の不可視化:Requirements と Implementation が異なるとき、同じ「仕様」で覆い隠される
対処
Zave-Jacksonの枠組みの語彙(Requirements / Specification)や、Contract / Structure / Behavior の区別を明示的に使うことで、どのレイヤーの話をしているか特定できる。
認知的距離との関係
送り手と受け手が「仕様」という同じ語で異なるレイヤーの認知スキーマを参照してしまうことが根本原因。認知的距離のベクトル的解釈で言えば、同じ次元の深さが違うのではなく、そもそも異なる次元を指している状態。
関連
- 認知的距離 - レイヤー混同はスキーマレイヤーの不一致
- Requirementsの外部性
- Contract(ソフトウェアにおける契約)
- 「仕様」の正体:Requirements・Contract・Structureによるソフトウェアの理解
- SSoT
- 翻訳方向の非対称性