Heisenbug este un termen de argou folosit în programare pentru a descrie o eroare de software care dispare sau își schimbă proprietățile atunci când este detectată. Acest cuvânt, spre deosebire de cuvântul „ bug ” ( în engleză bug ), este rar folosit în rusă. Nu complet identic, dar destul de apropiat ca înțeles de termenul rus - „eroare plutitoare”.
Exemple pot fi erori care apar în versiunea finală a programului, dar care nu sunt vizibile în modul de depanare sau erori de sincronizare într-o aplicație cu mai multe fire .
Acest nume este un joc de cuvinte și provine de la termenul „ principiul de incertitudine al lui Heisenberg ” din mecanica cuantică , care la nivel de zi cu zi este înțeles ca o schimbare neașteptată a obiectului observat ca urmare a faptului însuși al observației.
Într-un interviu acordat ACM Queue [1] , Bruce Lindsay spune că a fost prezent atunci când termenul a fost folosit pentru prima dată în sensul „te uiți la el - și el dispare” (comparați cu cuvintele lui Heisenberg , care a spus: „the mai atent te uiți la un lucru, cu atât mai puțină atenție acorzi la altceva.
De obicei, acestea sunt probleme de nivel scăzut:
Erori ale optimizatorului:
Heisenbug-urile sunt foarte greu de căutat, deoarece apar în funcție de factori aleatori și sunt reproduse instabile (complexitatea analizării stării unui sistem multithreaded joacă și ea rolul său). Prin urmare, încearcă să le întrerupă în faza de proiectare, gândindu-se la procedurile de sincronizare.
Aceste cuvinte, precum și „heisenbag”, practic nu se găsesc în rusă.
Borbag ( în engleză Bohr bug ) este un bug care, spre deosebire de Heisenbug, nu dispare și nu își schimbă proprietățile atunci când încerci să-l detectezi, similar cu stabilitatea modelului lui Niels Bohr al orbitalilor de electroni . Un analog similar în limba rusă este bug „stabil” sau „sustenabil” [2] , „eroare sistematică”.
Un mandelbug este un bug al cărui comportament este atât de complex încât pare haotic [3] . Numele provine de la numele lui Benoit Mandelbrot , fondatorul geometriei fractale . Cu toate acestea, merită remarcat (pe un principiu similar cu testul Turing ) că, dacă nu există nicio modalitate de a separa un bug al cărui comportament pare a fi haotic și un bug al cărui comportament este într-adevăr haotic, atunci nu are rost să facem distincție între un Mandelbug și un Heisenbug [4] . Unii folosesc termenul mandelbug pentru a descrie un bug al cărui comportament nu pare cu adevărat haotic, dar este atât de complex încât necesită rescrierea programului de la zero pentru a-l remedia. Un exemplu de astfel de eroare este o greșeală fundamentală făcută în proiectarea sistemului [5] .
Schroedinbug [6] ( ing. schroedin bug - în onoarea experimentului de gândire cu pisica lui Schrödinger ) este o eroare care nu se manifestă în niciun fel, dar apare brusc dacă cineva dă peste el în codul sursă sau încearcă să folosească programul în condiții neobișnuite și își dă seama că sistemul nu ar putea funcționa deloc în prezența unei astfel de erori. După aceea, programul nu mai funcționează până când eroarea este remediată. Deși sună incredibil, unele programe conțin astfel de erori.
Hindenbug [7] [8] ( ing. hinden bug - după denumirea dezastrului dirijabilului Hindenburg ) este un bug cu consecințe catastrofale, de exemplu, distrugerea completă a datelor.
Bugsonul Higgs [8] [9] ( ing. higgs-bugson - în cinstea particulei numite bosonul Higgs ) este un bug a cărui existență este prezisă (cel mai adesea, conform datelor indirecte sau rapoartelor unui singur utilizator), dar care este extrem de dificil, dacă nu imposibil, reproduceți artificial în condiții de dezvoltare sau testare. Termenul poate fi folosit și în legătură cu o eroare care este evidentă în cod (dovada matematică), dar nu a fost niciodată observată în condiții reale.