Heisenbug on slangitermi , jota käytetään ohjelmoinnissa kuvaamaan ohjelmistovirhettä , joka katoaa tai muuttaa ominaisuuksiaan, kun se havaitaan. Tätä sanaa, toisin kuin sana " bug " ( englanniksi bug ), käytetään harvoin venäjäksi. Ei täysin identtinen, mutta merkitykseltään melko lähellä venäläistä termiä "kelluva virhe".
Esimerkkejä voivat olla virheet, jotka näkyvät ohjelman lopullisessa versiossa, mutta jotka eivät näy virheenkorjaustilassa , tai ajoitusvirheet monisäikeisessä sovelluksessa.
Tämä nimi on sanaleikkiä ja tulee kvanttimekaniikan termistä " Heisenbergin epävarmuusperiaate " , joka arkipäivän tasolla ymmärretään havainnoinnin tosiasian seurauksena tapahtuvaksi odottamattomaksi muutokseksi havaittavassa objektissa.
ACM Queuen [1] haastattelussa Bruce Lindsay sanoo, että hän oli läsnä, kun termiä käytettiin ensimmäisen kerran merkityksessä "katso häneen - ja hän katoaa" (vertaa Heisenbergin sanoihin , joka sanoi: " Tarkemmin katsot yhtä asiaa, sitä vähemmän kiinnität huomiota johonkin muuhun.
Yleensä nämä ovat matalan tason ongelmia:
Optimoijan virheet:
Heisenbugeja on erittäin vaikea etsiä, koska ne ilmenevät satunnaisten tekijöiden mukaan ja toistuvat epävakaina (monisäikeisen järjestelmän tilan analysoinnin monimutkaisuus vaikuttaa myös). Siksi he yrittävät katkaista ne suunnitteluvaiheessa ja harkitsevat synkronointimenettelyjä.
Näitä sanoja, samoin kuin "heisenbag", ei käytännössä löydy venäjästä.
Borbag ( englanniksi Bohr bug ) on bugi, joka, toisin kuin Heisenbug, ei katoa eikä muuta ominaisuuksiaan, kun yrität havaita sitä, mikä on samanlainen kuin Niels Bohrin elektronikiertomallin stabiilius . Samanlainen venäjänkielinen analogi on "stabiili" tai "kestävä" bugi [2] , "systeeminen virhe".
Mandelbug on bugi , jonka käyttäytyminen on niin monimutkaista, että se näyttää kaoottiselta [3] . Nimi tulee fraktaaligeometrian perustajan Benoit Mandelbrotin nimestä . On kuitenkin syytä huomata (periaatteella, joka on samanlainen kuin Turingin testi ), että jos ei ole mahdollista erottaa vikaa, jonka käyttäytyminen näyttää kaoottiselta, ja bugi, jonka käyttäytyminen on todella kaoottista, ei ole mitään järkeä erottaa toisistaan Mandelbug ja Heisenbug [4] . Jotkut käyttävät termiä mandelbug kuvaamaan virhettä, jonka käyttäytyminen ei vaikuta todella kaoottiselta, mutta on niin monimutkaista, että se vaatii ohjelman uudelleenkirjoittamista tyhjästä sen korjaamiseksi. Esimerkki tällaisesta virheestä on järjestelmän suunnittelussa tehty perustavanlaatuinen virhe [5] .
Schroedinbug [6] ( eng. schroedin bug - Schrödingerin kissalla tehdyn ajatuskokeilun kunniaksi ) on bugi, joka ei ilmene millään tavalla, vaan syntyy yhtäkkiä, jos joku törmää siihen lähdekoodissa tai yrittää käyttää ohjelmaa epätavallisissa olosuhteissa ja ymmärtää, että järjestelmä ei voisi toimia ollenkaan tällaisen virheen esiintyessä. Sen jälkeen ohjelma lakkaa toimimasta ollenkaan, kunnes virhe on korjattu. Vaikka se kuulostaa uskomattomalta, jotkut ohjelmat sisältävät tällaisia virheitä.
Hindenbug [7] [8] ( eng. hinden bug - Hindenburgin ilmalaivan katastrofin nimen jälkeen ) on bugi, jolla on katastrofaaliset seuraukset, esimerkiksi tietojen täydellinen tuhoutuminen.
Higgs-bugson [8] [9] ( eng. higgs-bugson - Higgsin bosoniksi kutsutun hiukkasen kunniaksi ) on bugi, jonka olemassaolo ennustetaan (useimmiten epäsuorien tietojen tai yksittäisen käyttäjän raporttien mukaan), mutta joka on erittäin vaikeaa, ellei mahdotonta. , lisääntyä keinotekoisesti kehitys- tai testausolosuhteissa. Termiä voidaan käyttää myös sellaisen virheen yhteydessä, joka on ilmeinen koodissa (matemaattinen todistus), mutta jota ei ole koskaan havaittu todellisissa olosuhteissa.