Ein Heisenbug ist ein Fehler, der verschwindet, wenn man ihn näher beobachten will. Das Wort ist einen Zusammensetzung aus Heisenberg und Bug. Heisenberg war ein Physiker, der erstmals postulierte, dass Dinge "sowohl als auch" sein können (Unschärferelation) und erst durch Beobachtung sich in einem bestimmten Zustand manifestieren.
Heisenbugs können durch Beobachtung verschwinden, weil ihre Ursachen auf bestimmten zeitlichen Bedingungen basieren, die bei Einsatz von Debugging-Software nicht mehr gegeben sind. Auch fehlerhafte Verweise auf leere Bereiche, die beim Testen dann durch die Debugsoftware gefüllt sind, können unerwartetes Verhalten produzieren.
Methoden zum Finden von Heisenbugs können sein
- Hardware-Simulatoren statt Testsoftware
- Compiler übersetzen den Programmcode "strikt", d.h. normalerweise tolerierbare Fehler im Programm werden als Fehler markiert
- Ein Code-Walkthrough am Schreibtisch