メインコンテンツまでスキップ

Specification-by-Absence

A Derived Failure Pattern of Implicit Rules and Unverifiable Expectations

Summary

Specification-by-Absence は、明示された仕様が存在しない状態において、 「何も書かれていないこと」自体が事実上の仕様として扱われる Failure Pattern である。

本 Pattern が扱うのは、仕様を十分に書いていないという問題ではない。 不確実性や変更圧力の中で仕様の明文化が後回しにされ、 その空白が暗黙の期待や慣習によって埋められていく構造である。


Context

運用中のソフトウェアでは、 すべての仕様を事前に定義することは現実的ではない。

特に既存機能の振る舞いや例外的なケースについては、 「これまでこう動いていた」という事実が、 明文化された仕様の代替として扱われやすい。

このような状況では、 仕様は明示されていないにもかかわらず、 期待だけが固定化されていく。

Forces

この Pattern を生み出す主な力学は以下である。

  • 仕様記述コストの高さ
    正確な仕様を書くには時間と合意が必要であり、 変更が頻発する環境では後回しにされやすい。

  • 既存挙動への依存
    動いているコードが事実上の仕様として参照され、 振る舞いの意図が言語化されない。

  • 確認コストの非対称性
    仕様を明示するコストに比べ、 暗黙の期待を前提に進める方が短期的には安く見える。

  • 変更の局所化
    影響範囲を限定した変更が積み重なり、 全体としての仕様像が共有されなくなる。

Failure Mode

仕様が明示されないため、 期待と実装の差異を事後に検証できなくなる。

その結果、以下のような壊れ方が同時に進行する。

  • 期待がコードレビュー後に現れる
    実装後になって初めて「想定と違う」と指摘される。

  • 仕様確認が過去の挙動参照に置き換わる
    正しさの根拠が履歴や記憶に依存する。

  • 変更が仕様の根拠として扱われる
    たまたま入った実装が、 後続の仕様判断の参照点として固定化される。

Consequences(定着する影響)

Countermeasures(向きを変える最小介入)

以下は解決策の一覧ではなく、 Failure Mode に対して最小限の介入で力学を変えるための対抗パターンである。

  • 「何を決めていないか」を明示的に扱う
  • 挙動の事実と期待を区別して言語化する
  • すべてを書こうとせず、 判断に必要な最小仕様を残す

Resulting Context(新しい当たり前)

仕様は依然として不完全であり、 すべてが明文化されることはない。

しかし、未定義である部分が可視化されることで、 期待と実装のズレが早期に扱えるようになる。

その結果、仕様は固定された成果物ではなく、 判断を支える参照点として機能する。

See also

  • Context-Blind Change
    変更時に前提が共有されないことで、仕様不在が構造として固定化される基底パターン。

  • Test-Passing Illusion
    明示的な仕様が存在しない環境で、検証の成功が正しさの代替として扱われやすくなる派生パターン。


Appendix: Conceptual References

Appendix: References

  • Pamela Zave, Michael Jackson, Four Dark Corners of Requirements Engineering, 1997.
  • Barry W. Boehm, Software Engineering Economics, 1981.
  • Gojko Adzic, Specification by Example: How Successful Teams Deliver the Right Software, 2011.