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

Context-Blind Change

A Failure Pattern of Context Erosion and Unverifiable Correctness

Summary

Context-Blind Change は、変更が継続的に行われているにもかかわらず、 その前提・判断理由・制約条件が共有されないまま失われていく Failure Pattern である。

本 Pattern では、変更を速く行うこと自体は否定されない。 むしろ、不確実性が高く変更頻度が求められる状況において、 前提を明文化しないまま進むことが最も合理的な選択となり、 その結果として「正しさ」を検証できなくなる構造を扱う。


Context

運用中のソフトウェアでは、 仕様変更、機能追加、リファクタリング、バグ修正など、 大小さまざまな変更が継続的に発生する。

多くの場合、個々の変更は局所的に合理的であり、 レビューやテストも通過している。 しかし、その変更が どの前提や制約に基づいて行われたか は、 コードやチケットから読み取れないことが多い。

この状態が続くと、 ソフトウェア全体としての振る舞いや制約条件を 誰も説明できなくなる。

Forces

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

  • 変更速度への圧力
    変更を止めること自体がリスクとみなされ、 前提の確認よりも実装を進める判断が優先されやすい。

  • 前提の暗黙化
    チーム内で共有されているつもりの理解が文書化されず、 判断理由がコードや差分の外側に留まる。

  • 局所最適の連鎖
    各変更は個別には正しく見えるため、 全体の整合性が失われていることに気づきにくい。

  • 支援ツールの補完効果
    AI や自動化ツールが変更作業を補助することで、 前提を明示しないままでも変更が成立してしまう。

Failure Mode

前提が共有されないため、 変更の正当性を事後に検証できなくなる。

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

  • 「正」がコード断片へ拡散する
    仕様やルールが実装の断片に埋め込まれ、 どれが基準なのか判断できなくなる。

  • 状態遷移の理由が追跡できなくなる
    なぜその状態に遷移するのかが特定できず、 表示と内部状態の不整合が検出されにくくなる。

  • 変更理由が追跡できない
    何を守るための変更だったのかが失われ、 後続の変更が推測に基づいて行われる。

Consequences(定着する影響)

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

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

  • 変更内容ではなく、 守ろうとしている前提や制約を先に言語化する
  • すべてを文書化せず、 変更判断に必要な最小コンテクストを残す
  • 変更が正しかったかどうかを、 後から検証できる形で残す

Resulting Context(新しい当たり前)

変更は依然として頻繁に発生し、 すべての判断が事前に確定することはない。

しかし、前提が可視化されることで、 変更の是非を事後に検証できるようになる。

その結果、変更は単なる差分ではなく、 学習可能な判断の履歴として扱われる。

See also

  • Specification-by-Absence
    前提が明示されないまま変更が積み重なり、未定義が事実上の仕様として固定化される派生パターン。

  • Test-Passing Illusion
    前提条件が共有されない環境で、限定的な成功が正しさの代理指標として扱われやすくなる構造。


Appendix: Conceptual References

Appendix: References

  • Pamela Zave, Michael Jackson, Four Dark Corners of Requirements Engineering, 1997.
  • David L. Parnas, On the Criteria To Be Used in Decomposing Systems into Modules, 1972.
  • Barry W. Boehm, Software Engineering Economics, 1981.
  • Gojko Adzic, Specification by Example: How Successful Teams Deliver the Right Software, 2011.