Heisenbug er et slangudtryk , der bruges i programmering til at beskrive en softwarefejl, der forsvinder eller ændrer dens egenskaber, når den opdages. Dette ord, i modsætning til ordet " bug " ( engelsk bug ), bruges sjældent på russisk. Ikke helt identisk, men ret tæt på betydningen af det russiske udtryk - "flydende fejl".
Eksempler kan være fejl, der vises i den endelige version af programmet, men som ikke er synlige i debug -tilstand , eller tidsfejl i et program med flere tråde .
Dette navn er et ordspil og kommer fra begrebet " Heisenbergs usikkerhedsprincip " fra kvantemekanikken , som på det daglige plan forstås som en uventet ændring i det observerede objekt som følge af selve observationen.
I et interview med ACM Queue [1] siger Bruce Lindsay , at han var til stede, da udtrykket første gang blev brugt i betydningen "du ser på ham - og han forsvinder" (sammenlign med ordene fra Heisenberg , der sagde: "den mere indgående ser du på én ting, jo mindre opmærksomhed er du på noget andet.
Typisk er disse problemer på lavt niveau:
Optimeringsfejl:
Heisenbugs er meget vanskelige at lede efter, da de optræder afhængigt af tilfældige faktorer og gengives ustabile (kompleksiteten ved at analysere tilstanden af et multitrådsystem spiller også sin rolle). Derfor forsøger de at afskære dem på designstadiet ved at tænke synkroniseringsprocedurerne igennem.
Disse ord, såvel som "heisenbag", findes praktisk talt ikke på russisk.
Borbag ( engelsk Bohr bug ) er en bug, der i modsætning til Heisenbug ikke forsvinder og ikke ændrer dens egenskaber, når man forsøger at opdage den, svarende til stabiliteten af Niels Bohrs model af elektronorbitaler . En lignende russisk-sproget analog er "stabil" eller "bæredygtig" fejl [2] , "systematisk fejl".
En mandelbug er en fejl , hvis adfærd er så kompleks, at den ser kaotisk ud [3] . Navnet kommer fra navnet på Benoit Mandelbrot , grundlæggeren af fraktal geometri . Det er dog værd at bemærke (på et princip svarende til Turing-testen ), at hvis der ikke er nogen måde at adskille en fejl, hvis adfærd ser ud til at være kaotisk, og en fejl, hvis adfærd er virkelig kaotisk, så er der ingen mening i at skelne mellem en Mandelbug og en Heisenbug [4] . Nogle bruger udtrykket mandelbug til at beskrive en fejl, hvis adfærd ikke virker rigtig kaotisk, men er så kompleks, at det kræver at omskrive programmet fra bunden for at rette det. Et eksempel på en sådan fejl er en grundlæggende fejl i systemdesignet [5] .
Schroedinbug [6] ( eng. schroedin bug - til ære for tankeeksperimentet med Schrödingers kat ) er en fejl, der ikke viser sig på nogen måde, men pludselig opstår, hvis nogen falder over den i kildekoden eller forsøger at bruge programmet under usædvanlige forhold og indser, at systemet slet ikke kunne fungere i nærvær af en sådan fejl. Derefter stopper programmet overhovedet med at fungere, indtil fejlen er rettet. Selvom det lyder utroligt, indeholder nogle programmer sådanne fejl.
Hindenbug [7] [8] ( eng. hinden bug - efter navnet på Hindenburg luftskibskatastrofen ) er en fejl med katastrofale konsekvenser, for eksempel fuldstændig ødelæggelse af data.
Higgs bugson [8] [9] ( eng. higgs-bugson - til ære for partikelen kaldet Higgs boson ) er en fejl, hvis eksistens er forudsagt (oftest ifølge indirekte data eller enkeltbruger rapporter), men som er ekstremt vanskelig, hvis ikke umulig. , reproducere kunstigt under udviklings- eller testforhold. Udtrykket kan også bruges i forhold til en fejl, der er tydelig i koden (matematisk bevis), men som aldrig er blevet observeret under virkelige forhold.