Heisenbug - Heisenbug

V počítačové programování žargonu, je heisenbug je softwarová chyba , která se zdá, že zmizí nebo změnit své chování, když jeden pokusy studovat. Termín je hříčka na jménu Werner Heisenberg , je fyzik , který nejprve prohlašoval pozorovatelský efekt v kvantové mechaniky , v němž se uvádí, že akt sleduje systém nevyhnutelně mění svůj stav. V elektronice je tradičním termínem efekt sondy , kdy připojení testovací sondy k zařízení mění její chování.

Podobné výrazy, jako je bohrbug , mandelbug , hindenbug a schrödinbug (viz část o souvisejících pojmech ), byly příležitostně navrženy pro jiné druhy neobvyklých softwarových chyb, někdy v žertu; na rozdíl od výrazu heisenbug však nejsou široce známé ani používané.

Příklady

K Heisenbugs dochází, protože běžné pokusy o ladění programu , jako je vkládání výstupních příkazů nebo jeho spouštění pomocí debuggeru , mají obvykle vedlejší účinek změny chování programu jemnými způsoby, jako je změna adres paměti proměnných a načasování jeho provedení.

Jedním z běžných příkladů heisenbug je chyba, která se objeví, když je program kompilován s optimalizačním kompilátorem , ale ne, když je stejný program kompilován bez optimalizace (jak se často dělá za účelem prozkoumání debuggeru). Při ladění se hodnoty, které by optimalizovaný program normálně uchovával v registrech, často přesouvají do hlavní paměti. To může ovlivnit například výsledek porovnání s plovoucí desetinnou čárkou , protože hodnota v paměti může mít menší rozsah a přesnost než hodnota v registru. Podobně mohou být heisenbugs způsobeny vedlejšími efekty v testovacích výrazech používaných v běhových aspektech v jazycích, jako je C a C ++ , kde se testovací výraz nevyhodnocuje, když jsou tvrzení vypnuta v produkčním kódu pomocí NDEBUGmakra.

Dalšími běžnými příčinami heisenbugs jsou použití hodnoty neinicializované proměnné (která může během ladění změnit její adresu nebo počáteční hodnotu) nebo sledování neplatného ukazatele (což může při ladění ukazovat na jiné místo). Debuggery také běžně umožňují použití zarážek nebo poskytují jiná uživatelská rozhraní, která způsobují, že se další zdrojový kód (jako jsou přístupové objekty vlastností) spouští nenápadně, což může zase změnit stav programu.

Čas může být také faktorem heisenbugs, zejména u aplikací s více vlákny. Spuštění programu pod kontrolou ladicího programu může změnit načasování spuštění programu ve srovnání s běžným spuštěním. Časově citlivé chyby, jako jsou závodní podmínky, se nemusí objevit, když je program zpomalen jednokrokovými zdrojovými řádky v ladicím programu. To platí zejména v případě, že chování zahrnuje interakci s entitou, která není pod kontrolou ladicího programu, například při ladění zpracování síťových paketů mezi dvěma počítači a pouze jeden je pod kontrolou ladicího programu.

Na Heisenbugs lze pohlížet jako na příklady pozorovacího efektu v informačních technologiích . Frustrovaní programátoři mohou vtipně obviňovat heisenbuga z fáze měsíce , nebo (pokud k němu došlo jen jednou) jej mohou vysvětlit jako měkkou chybu způsobenou částicemi alfa nebo kosmickými paprsky ovlivňujícími hardware.

Související pojmy

Bohrbug tím, že opozice je „dobrý, pevný bug“. Stejně jako deterministický model Bohrova atomu nemění své chování a jsou relativně snadno detekovatelné.

Mandelbug (pojmenoval podle Benoît Mandelbrot ‚s fraktální ) se jedná o problém, jehož příčiny jsou tak složité, že vzdoruje opravu, nebo dělá jeho chování objevit chaotické , nebo dokonce non-deterministický . Tento termín také odkazuje na chybu, která vykazuje fraktální chování (tj. Vlastní podobnost ) odhalením více chyb (čím hlouběji vývojář přejde do kódu, aby jej opravil, tím více chyb najde).

Schrödinbug nebo schroedinbug (pojmenoval Erwin Schrödinger a jeho myšlenkový experiment ) je chyba, která se projevuje v softwaru, který běží po oznámení programátor, že kodex by měl nikdy pracovali na prvním místě.

Hindenbug (pojmenoval podle Hindenburg pohroma ) se jedná o problém s katastrofálním chování.

Higgs-bugson (pojmenoval podle boson Higgs částečky) je chyba, která se předpokládá, že existuje vychází z ostatních sledovaných podmínek (nejčastěji, nejasně související položky protokolu a neoficiální uživatelských zpráv), ale je obtížné, ne-li nemožné, aby uměle reprodukovat vývojové nebo testovací prostředí. Termín může také odkazovat na chybu, která je v kódu zřejmá (matematicky prokázaná), ale kterou nelze vidět v provedení (přesto je obtížné nebo nemožné ji ve skutečnosti najít).

Etymologie

Termín byl také použit v roce 1985 Jimem Grayem , v dokumentu o selhání softwaru (a je mu někdy kvůli této publikaci mylně přisuzován) a také v roce 1986 Jonathanem Clarkem a Zhahai Stewartem na seznamu adresátů (později zpravodajská skupina Usenet ) komp . rizika .

Bruce Lindsay, výzkumný pracovník společnosti IBM , v rozhovoru pro ACM Queue 2004 potvrdil , že byl přítomen, když byl Heisenbug původně definován.

Dřívější vydání v publikacích ACM je z roku 1983.

Řešení

Heisenbugy je obtížné identifikovat a opravit; často pokus o jejich vyřešení vede k dalšímu neočekávanému chování. Protože se problém projevuje v důsledku samostatné, podchycené chyby, může být chování během ladění obtížné předvídat a analyzovat. Celkově by se počet identifikovaných heisenbugů měl snižovat, protože kus softwaru dozrává.

Viz také

Reference

externí odkazy