# Heisenbug
## 定義
Heisenbug(ハイゼンバグ)とは、再現が困難で、デバッグやプログラム状態の観察によって消えてしまうソフトウェアバグの類型である。物理学のハイゼンベルクの不確定性原理に由来する名称で、[[Jim Gray]] が [[@1985__Tandem__Why Do Computers Stop and What Can Be Done About It]] において対概念の Bohrbug(ボーアバグ)と共に定義・普及させた。Bohrbug はボーア原子模型のように確実で再現可能なバグであり、標準的なテスト技法で発見される。一方 Heisenbug は、レースコンディション、一時的なハードウェア状態、境界条件(ストレージ枯渇、カウンタオーバーフロー、割り込み消失)などに起因し、状態を再初期化して再実行すれば発現しないことが多い。
Gray は本番ソフトウェア(設計レビュー、品質保証、アルファテスト、ベータテスト、本番運用を経たもの)では「硬い」Bohrbug はすでに除去されており、残留バグの大多数は Heisenbug であると主張した。これを裏づける実測として、Tandem のスプーラのフェイルファストプロセスのエラーログを調査し、132 件のソフトウェア障害のうち 131 件が Heisenbug(兄弟プロセスによる再実行で再現せず)、1 件のみが Bohrbug であったと報告した。また IBM MVS/XA の機能回復ルーチン(FRR)が 76% の成功率でソフトウェア障害からの回復に成功し、システムソフトウェア MTBF を 4 倍に延伸した事例も引用している。(Source: [[@1985__Tandem__Why Do Computers Stop and What Can Be Done About It]])
## 横断的知見
(本概念について複数ソースの突き合わせによる知見は、2 ソース目以降の ingest で蓄積する。)
## 未解決の問い
- Gray の Heisenbug 比率(132 件中 131 件、99.2%)はスプーラという単一サブシステムの測定に限定される。現代の大規模分散システム(マイクロサービス、LLM 訓練フレームワーク)における Bohrbug/Heisenbug の比率は体系的に測定されているか。
- Heisenbug 仮説は「状態を再初期化して再実行すれば再現しない」ことを前提とするが、LLM 訓練のような非決定的な並列計算では「同一状態への再初期化」自体が困難——再実行が別の結果を与えるのは Heisenbug が治ったのか、別のバグを踏んでいるのか区別できるか。
- フェイルファスト + 再実行による Heisenbug 許容は、[[耐障害LLM訓練]]におけるチェックポイント + 再起動パターンの祖形と見なせるか。両者の本質的な差異はどこにあるか。
- サイレントデータ破壊(SDC)は Bohrbug と Heisenbug のどちらに分類されるか。SDC はフェイルファスト前提を破るため、Gray の枠組みでは捕捉できない障害類型である可能性がある。
## 関連
- [[ソフトウェア耐障害性]] — Heisenbug 仮説が支える上位概念
- [[プロセスペア]] — Heisenbug 許容のための冗長実行パターン
- [[耐障害LLM訓練]] — チェックポイント + 再起動による現代的な Heisenbug 許容
- [[障害注入]] — 意図的に障害を導入して耐障害性を検証する手法
## 出典
- [[@1985__Tandem__Why Do Computers Stop and What Can Be Done About It]]