ハイゼンバグ(Heisenbug)とは、デバッグしようとすると挙動が変わり、バグが消えてしまう現象を指す。追跡しづらいバグの一種。ハイゼンベルクの不確定性原理が由来らしい。

他にもそういう「なんちゃらバグ」があるのか調べたら、1990年にウェブに公開されたThe Jargon Fileという古典1にいろいろ載っていた。それを参照元としてWikipediaのHeisenbugにもまとめられている。

バグ名特徴由来・比喩
Heisenbug観測すると消えるバグハイゼンベルグの不確定性原理
Bohrbug常に再現可能な安定したバグニールス・ボーアの古典的物理モデル
Schrödinbug読むまでバグと気づかないが、実はバグってるシュレーディンガーの猫
Mandelbugあまりに複雑で原因が特定できないバグマンデルブロ集合の複雑性
Hindenbug発生するとシステム全体を壊滅的に破壊するバグ飛行船ヒンデンブルク号
Phase-of-the-Moon Bug理由が不明で、まるで月の満ち欠けで変わるようなバグオカルト的な比喩
Higgs-Bugson存在が予測されているが、まだ観測されていないバグヒッグス粒子のような存在

ほぼ初耳。

ChatGPTに聞いたら他にZombiebugとかGremlinbugも挙げてきたけど、それぞれゾンビプロセスとかカオスエンジニアリングツールGremlin2とかのハルシネーションだろうか。

大抵の教科書的なコーディング本には、「まずはエラーを安定化させよ」とある。以下は、CODE COMPLETEからの引用

欠陥を検出するための効果的な方法は、次のようになる

  1. エラーを安定させる(確実に再現させる)。
  2. エラーの原因を特定する。
  3. 欠陥を修正する。
  4. 修正をテストする。
  5. 同様のエラーを探す。

CODE COMPLETE 下 p96

これがデバッグにおける科学的アプローチと解説している。

エラーを安定化させる

エラーを確実に再現することができなければ、診断することはほぼ不可能である。ときどきしか発生しないエラーを予測可能にすることは、デバッグにおいて最も困難なことである。

CODE COMPLETE 下 p97

ハイゼンバグはその出だしで躓く感じ。

CODE COMPLETE 第2版 下 完全なプログラミングを目指して スティーブ マコネル

  1. 1970年ごろからまとめられたも用語集を源流としているので、本当に古典の域 ↩︎

  2. Reliability Testing & Chaos Engineering | Gremlin ↩︎