Heisenbug

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 21 noiembrie 2016; verificările necesită 30 de modificări .

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 .

Originea numelui

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.

Cauze posibile

De obicei, acestea sunt probleme de nivel scăzut:

Erori ale optimizatorului:

Metode de luptă

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.

Concepte similare

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.

Note

  1. Bruce Lindsay. O conversație cu Bruce Lindsay  (engleză)  // ACM Queue : revistă. - 2004. - Noiembrie ( nr. 8 ). Arhivat din original pe 4 februarie 2022.
  2. Fișierul jargon. Bohr-bug Arhivat pe 12 ianuarie 2013 la Wayback Machine 
  3. Noul dicționar al hackerilor Arhivat 8 septembrie 2013 la Wayback Machine  .
  4. M. Grottke și KS Trivedi, Software faults, software aging and software rejuvenation. Journal of the reliability engineering Association of Japan, numărul 27, numărul 7, 2005, paginile 425-438.
  5. Michael Grottke, Kishor S. Trivedi, „ Fighting bugs: remove, retry, replicate, and rejuvenate Arhivat 27 martie 2010 la Wayback Machine ”  . Computer, numărul 40, numărul 2, februarie 2007, paginile 107-109, doi:10.1109/MC.2007.55
  6. Fișierul jargon. Schroedinbug Arhivat pe 8 septembrie 2013 la Wayback Machine 
  7. Hindenbug . wiki.c2.com. Preluat la 24 octombrie 2019. Arhivat din original la 8 august 2020.
  8. ↑ 12 Matt Lynley . 20 de expresii hilare din jargon de programare pe care ar trebui să le folosiți când vorbiți cu inginerii . insider de afaceri. Preluat la 24 octombrie 2019. Arhivat din original la 24 octombrie 2019.
  9. Jargon nou de programare . blog.codinghorror.com. Preluat la 24 octombrie 2019. Arhivat din original la 4 noiembrie 2019.