仕様の多義性

「仕様」「機能」という日常語が、異なるレイヤーの概念を無区別に指してしまう問題。

「仕様」が指しうる3つのレイヤー

レイヤー 確立された用語 「仕様」と呼ばれる例
Requirements 要求 「商品を検索できるのが仕様です」
Contract 契約 「このAPIの仕様はGETで200を返す」
Implementation 実装 「内部の仕様としてキャッシュを使っている」

「機能」が指しうる3つのレイヤー

レイヤー より正確な語 意味
Requirements Capability ユーザーが得たい能力
Contract Protocol その能力を提供するI/Fの約束
Implementation Mechanism その約束を実現する内部構造と振る舞い

この曖昧さが生む具体的な問題

  1. レイヤーの混同:「この機能の仕様は?」がどのレイヤーの話か分からない
  2. 因果とプロセスの混同:「仕様を決める」がトップダウンの手順なのか、実体から導出される契約の確認なのか区別できない
  3. 乖離の不可視化:Requirements と Implementation が異なるとき、同じ「仕様」で覆い隠される

対処

Zave-Jacksonの枠組みの語彙(Requirements / Specification)や、Contract / Structure / Behavior の区別を明示的に使うことで、どのレイヤーの話をしているか特定できる。

認知的距離との関係

送り手と受け手が「仕様」という同じ語で異なるレイヤーの認知スキーマを参照してしまうことが根本原因。認知的距離のベクトル的解釈で言えば、同じ次元の深さが違うのではなく、そもそも異なる次元を指している状態。

関連