Defekty oprogramowania możemy dzielić na wiele różnych sposobów. Często klasyfikujemy je ze względu na krytyczność oraz ze względu na priorytet (pilność naprawy). Inną możliwością jest definiowanie reprodukowalności defektów. Wśród tych z najniższą reprodukowalnością znajduje się właśnie heisenbug.
Nie da się w łatwy sposób wyizolować warunków występowania heisenbuga, ponieważ wymyka się on standardowym regułom reprodukcji defektów. Przy kolejnej próbie jego odtworzenia w tych samych warunkach przestaje on występować lub daje zupełnie inne rezultaty. Sama nazwa jest nawiązaniem do Wernera Heisenberga, autora zasady nieoznaczoności i jednego z pionierów mechaniki kwantowej. Uznał on, że sam fakt obserwacji pewnych efektów w mechanice kwantowej ma wpływ na stan obserwowanego obiektu. Podobny przykład możemy znaleźć w elektronice i określa się to mianem efektu próbnika, czyli sytuacja, gdy stosowanie narzędzia pomiarowego ma bezpośredni wpływ na zachowania elementu.
Heisenbug w oprogramowaniu może występować przykładowo wtedy, kiedy obserwuje się zachowanie oprogramowania przy pomocy debuggera, który potrafi zmienić sam kod, adresy pamięci zmiennych, czy czas uruchomienia.
Przy okazji zaproponowano kilka innych pojęć nawiązujących do (nie)typowych defektów jak:
- bohrbug - solidny i zawsze reporodukowalny defekt
- mandelbug - defekt tak skomplikowany, że utrudnia swoją naprawę
- schrödinbug - defekt, który pojawia się w oprogramowaniu, które programista ocenia jako niemożliwe do uruchomienia
- hindenbug - defekt o katastrofalnych konsekwencjach.
Nazwy te nie są jednak tak rozpowszechnione jak heisenbug.
Źródła
https://en.wikipedia.org/wiki/Heisenbug