Heisenbug

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - Dacă sunteți în căutarea distribuției Linux numită Heisenbug, consultați Fedora (calcul) .

În limbajul de programare , un heisenbug este un bug care pare să dispară sau să se comporte diferit atunci când încercați să-l studiați și să-l depanați. [1] Termenul este un joc de cuvinte pe numele de familie al lui Werner Heisenberg , fizician care formulează principiul incertitudinii lui Heisenberg . Conform acestui principiu, referindu-se la mecanica cuantică , chiar faptul de a observa un fenomen modifică fenomenul în sine într-o oarecare măsură. Pentru rezolvarea heisenbug-urilor este necesară o depanare foarte atentă, poate cu analiza depozitelor de proces și a jurnalelor de scame sau a altor software-uri similare.

Programatorii se pot referi ironic la heisenbugs argumentând că comportamentul programului depinde de faza lunii [2] sau, dacă comportamentul a fost observat o singură dată, a fost cauzat de fenomene improbabile, cum ar fi acțiunea razelor cosmice. pe luna.hardware .

Termenii înrudiți pentru referirea la alte tipuri particulare de bug-uri sunt bohrbug , mandelbug , [3] [4] [5] și schrödinbug . [6] [7]

Exemple

Un heisenbug se datorează faptului că tehnicile de depanare implică modificarea codului sursă într-o oarecare măsură sau modificarea stării sistemului în timpul rulării, cum ar fi adresarea variabilă sau timpi de execuție. Din acest motiv, dacă o eroare depinde de acești factori, comportamentul său poate fi modificat prin încercările de depanare.

Un heisenbug poate apărea atunci când programul este compilat cu directive de optimizare, dar același comportament poate să nu apară atunci când același cod este compilat fără optimizare (de exemplu, atunci când este compilat pentru analizarea cu un depanator). În timpul fazei de depanare, variabilele care rămân în registre sunt adesea păstrate în memorie și acest lucru poate influența rezultatul operațiilor în virgulă mobilă, deoarece valorile din memorie pot avea o acuratețe diferită de cele din registre. O heisenbug se poate datora, de asemenea , efectelor secundare ale expresiilor utilizate în afirmații executate în timpul rulării în scopuri de testare (de exemplu, cu biblioteca C assert.h ), care se manifestă sau dispar când afirmațiile sunt dezactivate.

Un heisenbug poate fi, de asemenea, cauzat de un factor de timp, în special în cazul aplicațiilor cu mai multe fire. Executarea programului sub controlul depanatorului modifică momentul execuției și paralelismul, mascând de exemplu unele cazuri de condiții de cursă sau creând probleme atunci când programul interacționează cu entități care nu se află sub controlul depanatorului, de exemplu când funcționează pe pachete transmise prin rețea de alte mașini.

Istoria termenului

Termenul a apărut în publicațiile ACM din 1983. [8] A fost folosit în 1985 de Jim Gray într-un articol despre eșecurile software-ului [9] (până la punctul în care introducerea acestuia este uneori greșită) și în 1986 de Jonathan Clark și Zhahai Stewart pe lista de e-mail comp.risks (care a devenit ulterior un grup de știri Usenet ). [10]

Termeni înrudiți

Spre deosebire de heisenbug, un bug "solid", care nu își schimbă comportamentul, se numește bohrbug , deoarece este determinist ca modelul atomic formulat de Bohr . [11] [12]

O mandelbug (de la numele de familie al lui Benoît Mandelbrot , un matematician renumit pentru studiul său asupra fractalelor ) este o eroare atât de complexă încât nu poți găsi o modalitate de a o elimina sau al cărei efect apare haotic și pare nedeterminist.

Un schrödinbug (de la Erwin Schrödinger , referindu-se la binecunoscutul paradox pe care l-a formulat) este un bug care nu se manifestă până când cineva nu folosește programul într-un mod neobișnuit sau verifică codul și descoperă că programul nu ar fi trebuit să funcționeze niciodată. [13]

O hindenbug [14] (numită după dirijabilul LZ 129 Hindenburg , care a fost distrusă la aterizare în urma unui accident grav) este o eroare ale cărei consecințe sunt deosebit de grave.

Notă

  1. ^ The Jargon File: heisenbug , la catb.org .
  2. ^ CATB.org, „faza lunii”
  3. ^ Fișierul jargon: Mandelbug , la catb.org . Adus la 5 septembrie 2013 .
  4. ^ Raymond, Eric S.; The New Hacker's Dictionary , ediția a III-a, 1996
  5. ^ Clarke, Arthur C. , Fantoma din marile bănci , Bantam Books, 1990
  6. ^ Fișierul jargon: Schroedinbug , la catb.org . Adus la 5 septembrie 2013 .
  7. ^ Raymond, Eric S.; The New Hacker's Dictionary , ediția a III-a, 1996
  8. ^ Proceedings of the ACM SIGSOFT / SIGPLAN Software Engineering Symposium on High-Level Debugging, Pacific Grove, California, 20-23 martie 1983 , Association for Computing Machinery, 1983, Google Books search :

    „Acesta este principiul incertitudinii Heisenberg aplicat la depanare (o instanță a unui astfel de bug a fost numită„ Heisenbug ”de către un participant.)”

    De asemenea, citat în LeBlanc, Richard J; Robbins, Arnold D.; Monitorizarea bazată pe evenimente a programelor distribuite , în Proceedings of the IEEE 5th International Conference on Distributed Computing Systems (ICDCS) , IEEE Computer Society, Computer Society Press, 1985, pp. 515-522 Căutare Google Cărți :

    „Acesta este principiul incertitudinii Heisenberg aplicat la depanare, numit uneori principiul„ Heisenbug ”[ACM83].”

  9. ^ Jim Grey, De ce se opresc computerele și ce se poate face despre asta? , pe Raportul tehnic 85.7 , Tandem Computers, 1985.
  10. ^ (16 decembrie 1986) RISKS DIGEST 4.30 - (23 decembrie 1986) RISKS DIGEST 4.34 , moderat de Peter G. Neumann
  11. ^ Goshgarian, Gary; Exploring Language , HarperCollins College Publishers, 1995
  12. ^ "Astfel de eșecuri software tranzitorii au primit numele capricios„ Heisenbug ”, deoarece dispar atunci când sunt reexaminate. În schimb,„ Bohrbugs ”sunt bug-uri solide bune.” (Știrile IEEE Computer Group, volumul 24, numerele 7-12, 1991)
  13. ^ schroedinbug , la catb.org .
  14. ^ Hinden Bug , la c2.com .

linkuri externe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT