Schrödinbug — je jedinečný typ softwarové chyby, která existuje v kódu, ale nikdy se neprojeví, dokud vývojář tuto část kódu nepřečte a neuvědomí si, že obsahuje chybu. Termín je slovní hříčkou s „Schrödingerovou kočkou”: chyba současně existuje a neexistuje, dokud ji někdo nepozoruje. Podle Wikipedie (2026) se tento termín používá převážně v profesionálním žargonu a popisuje spíše psychologický než technický fenomén v práci vývojáře.
Hlavní body
Schrödinbug — termín z profesionálního slangu vývojářů, označující softwarovou chybu, která existuje v kódu roky, ale nikdy nevede k selhání, dokud někdo tuto část kódu nepřečte a nepochopí, že je zde chyba. Poté se chyba začne projevovat.
Název jasně odkazuje na myšlenkový experiment Erwina Schrödingera s kočkou, která je současně živá i mrtvá, dokud pozorovatel neotevře krabici. V případě chyby — ta současně „funguje” a „je rozbitá”, dokud se vývojář na kód nepodívá.
Je důležité pochopit, že Schrödinbug — není technická vlastnost provádění programu, ale kognitivní fenomén. Kód objektivně obsahuje chybu, ale okolnosti nebo charakteristiky vstupních dat nikdy neaktivovaly problematickou cestu provádění, dokud vývojář kód neanalyzoval.
Z technického hlediska je Schrödinbug běžný logický defekt, který se nikdy nedostal do toku provádění programu, protože všechna volání procházela „šťastnou” cestou. Jakmile vývojář přečte kód, změní své chování nebo režim testování — a chyba se projeví.
Název Schrödinbug — kontaminace příjmení fyzika Erwina Schrödingera a slova „bug” (chyba). Schrödinger v roce 1935 navrhl myšlenkový experiment ilustrující problém kodaňské interpretace kvantové mechaniky.
Experiment s kočkou: v uzavřené krabici se nachází radioaktivní látka, Geigerův počítač a lahvička s jedem. Pokud se látka rozpadne — počítač spustí mechanismus, který rozbije lahvičku, a kočka zemře. Dokud je krabice zavřená, kočka je současně živá i mrtvá (superpozice stavů).
Analogie s programováním: dokud nikdo nečetl část kódu s chybou, program pracuje správně — chyba je současně „živá” i „mrtvá”. Jakmile vývojář otevře soubor a přečte kód, superpozice se zhroutí a chyba se začne projevovat („umírá” správná funkce programu).
Schrödinbug — je především psychologický fenomén, nikoli technická vlastnost provádění kódu. Podívejme se na mechanismus jeho vzniku z hlediska kognitivní psychologie programátora.
Když vývojář píše kód, je ve stavu „toku” a může si logické chyby nevšimnout. Kód projde kontrolou, testy, dostane se do produkce a funguje měsíce. Poté se vývojář k tomuto kódu vrátí kvůli refaktorizaci, pozorně ho přečte a najednou vidí: „Vždyť je to zřejmá chyba!”.
Po uvědomění si chyby začne vývojář záměrně hledat scénáře, ve kterých se chyba projeví. Mění testovací data, spouští debugger, prochází větvemi kódu — a v určitém okamžiku skutečně způsobí selhání. Chyba je „objevena” právě proto, že vývojář nyní ví, kde hledat.
Kognitivní zkreslení — confirmation bias — hraje klíčovou roli. Vývojář, který vidí chybu v kódu, podvědomě začíná hledat její projev v chování programu. Každý neobvyklý log nebo selhání je okamžitě interpretováno jako důsledek nalezené chyby, i když skutečná příčina může být jiná.
Podívejme se na několik reálných scénářů z vývojářské praxe, které popisují klasický Schrödinbug.
V aplikaci pro Android vývojář standardně používal příznak `isEnabled = true`, i když nová funkce měla být vypnutá. Kód s nesprávným příznakem fungoval v produkci tři měsíce — nikdo si nestěžoval, protože funkce skutečně měla být zapnutá. Když vývojář četl kód při přípravě další verze, pochopil chybu, opravil příznak na `false` — a okamžitě obdržel hlášení, že funkce zmizela.
Metoda knihovny obsahovala zřejmou chybu dělení nulou, ale nikdy nebyla volána v reálných scénářích. Knihovna byla používána v pěti projektech a nikdo si problému nevšiml. Při kontrole kódu nový vývojář na chybu poukázal — a po opravě se ukázalo, že jeden z projektů závisel na tomto „nesprávném” chování.
Schrödinbug zaujímá jedinečné místo v klasifikaci softwarových chyb. Porovnejme ho s jinými typy.
| Typ chyby | Projev před přečtením kódu | Projev po přečtení kódu | Povaha |
|---|---|---|---|
| Schrödinbug | Nikdy | Začíná se projevovat | Psychologická |
| Bohrbug | Vždy se stejnými daty | Vždy se stejnými daty | Deterministická |
| Mandelbug | Občas, chaoticky | Občas, chaoticky | Systémová |
| Heisenbug | Stabilně | Zmizí v debuggeru | Technická |
Schrödinbug — jediný typ chyby, jejíž projev přímo závisí na skutečnosti, že si vývojář chybu uvědomil. V tom spočívá jeho paradoxní povaha.
Ačkoli je Schrödinbug spíše psychologický fenomén, existují praktické metody minimalizace jeho vlivu na projekt.
Čím dříve je chyba odhalena, tím menší je pravděpodobnost, že spadne do kategorie Schrödinbug. Párové programování a povinná kontrola každého řádku kódu snižují počet skrytých defektů na minimum.
Statické analyzátory kódu (ESLint, detekt, ktlint, SpotBugs) odhalují potenciální chyby ve fázi kompilace, aniž by čekaly, až si jich člověk všimne. Lintery dokážou odhalit „spící” chyby v mrtvých větvích kódu.
Pokrytí testy všech větví kódu, včetně zřídka používaných, — je jediný způsob, jak zaručit, že Schrödinbug nebude roky čekat na svou chvíli. Nástroje jako JaCoCo pro Java pomáhají sledovat nepokryté větve.
// Příklad potenciálního Schrödinbug — chyba ve zřídka volané větvi
def processOrder(Order order) {
if (order.isRush()) {
// Tato větev nebyla nikdy testována v produkci
sendRushNotification(order) // může zde být chyba
}
}
V tomto příkladu může Schrödinbug existovat roky, pokud do systému nikdy nevstoupily naléhavé objednávky (rush). Jakmile se první taková objednávka objeví — chyba se projeví, ale do té doby si vývojáři myslí, že kód je správný.
Často kladené otázky
Schrödinbug — je skutečný fenomén z profesionálního žargonu, ale popisuje spíše kognitivní a psychologický jev než technickou kategorii chyby. Termín používají vývojáři k popisu situace, kdy uvědomění si chyby v kódu vede k jejímu prvnímu projevu.
Paradox spočívá v tom, že chyba objektivně existuje, ale subjektivně se neprojevuje až do okamžiku svého objevení. Před přečtením kódu program pracuje správně, i když obsahuje chybu. Po přečtení — se chyba „materializuje” a začíná způsobovat selhání.
Analogie je přímá: stejně jako Schrödingerova kočka je současně živá i mrtvá, dokud není krabice otevřena, je Schrödinbug současně „funguje” a „je rozbitý”, dokud vývojář neotevře soubor s kódem a nepřečte ho. Pozorování ničí superpozici.
Ano, Schrödinbug může být nebezpečný, pokud se skrytá chyba nachází v kritické části kódu, která se zřídka provádí — například při zpracování plateb za specifických podmínek nebo v logice obnovy po selhání. Odhalení takové chyby v nejnevhodnější chvíli může vést k vážným problémům.
Jedinou spolehlivou metodou je zajistit 100% pokrytí kódu testy, včetně všech větví a okrajových podmínek. Pokud je každý řádek kódu proveden alespoň v jednom testu, bude Schrödinbug odhalen ve fázi testování, nikoli po přečtení kódu v produkci.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také