Schrödinbug — јединствени тип програмске грешке која постоји у коду, али се никада не манифестује све док програмер не прочита тај део кода и не схвати да садржи грешку. Термин је игра речи са „Шредингеровом мачком”: грешка истовремено и постоји и не постоји, док је неко не посматра. Према Википедији (2026), овај термин се користи претежно у професионалном жаргону и описује пре психолошки него технички феномен у раду програмера.
Главно
Schrödinbug — термин из професионалног жаргона програмера, који означава програмску грешку која годинама постоји у коду, али никада не доводи до отказа, док неко не прочита тај део кода и не схвати да је овде грешка. Након тога грешка почиње да се манифестује.
Назив јасно упућује на мисаони експеримент Ервина Шредингера са мачком, која је истовремено и жива и мртва, док посматрач не отвори кутију. У случају грешке — она истовремено „ради” и „покварена је”, док програмер не погледа код.
Важно је разумети да Schrödinbug — није техничка карактеристика извршавања програма, већ когнитивни феномен. Код објективно садржи грешку, али сплет околности или карактеристике улазних података никада нису активирали проблематични пут извршења док програмер није анализирао код.
Са техничке тачке гледишта, Schrödinbug је обичан логички дефект који никада није ушао у ток извршења програма, јер су сви позиви ишли „срећним” путем. Чим програмер прочита код, мења своје понашање или режим тестирања — и грешка се манифестује.
Назив Schrödinbug — контаминација презимена физичара Ервина Шредингера и речи „bug” (грешка). Шредингер је 1935. предложио мисаони експеримент који илуструје проблем копенхашке интерпретације квантне механике.
Експеримент са мачком: у затвореној кутији налазе се радиоактивна супстанца, Гајгеров бројач и бочица са отровом. Ако се супстанца распадне — бројач покреће механизам који разбија бочицу, и мачка умире. Док је кутија затворена, мачка је истовремено жива и мртва (суперпозиција стања).
Аналогија са програмирањем: док нико није читао део кода са грешком, програм ради исправно — грешка је истовремено „жива” и „мртва”. Чим програмер отвори фајл и прочита код, суперпозиција се руши и грешка почиње да се манифестује („умире” исправан рад програма).
Schrödinbug — пре свега је психолошки феномен, а не техничка карактеристика извршавања кода. Размотримо механизам његовог настанка са становишта когнитивне психологије програмера.
Када програмер пише код, налази се у стању „тока” и можда не примети логичку грешку. Код пролази преглед, тестове, долази на продукцију и ради месецима. Затим се програмер враћа на овај код ради рефакторисања, пажљиво га чита и одједном види: „Па овде је очигледна грешка!”.
Након схватања грешке, програмер почиње намерно да тражи сценарије у којима ће се грешка манифестовати. Мења тест податке, покреће отклањач грешака, пролази кроз гране кода — и у једном тренутку заиста изазива отказ. Грешка се „открива” управо зато што програмер сада зна где да тражи.
Когнитивна пристрасност — confirmation bias — игра кључну улогу. Програмер, видевши грешку у коду, подсвесно почиње да тражи њену манифестацију у понашању програма. Сваки необичан запис или отказ одмах се интерпретира као последица пронађене грешке, чак и ако стварни узрок може бити другачији.
Размотримо неколико реалних сценарија из праксе развоја који описују класичан Schrödinbug.
У Android апликацији програмер је подразумевано користио флаг `isEnabled = true`, иако је требало да нова функција буде искључена. Код са погрешним флагом радио је на продукцији три месеца — нико се није жалио, јер је функција заиста требало да буде укључена. Када је програмер читао код ради припреме следећег издања, схватио је грешку, исправио флаг на `false` — и одмах добио пријаву грешке да је функција нестала.
Метод библиотеке садржао је очигледну грешку дељења са нулом, али никада није позиван у реалним сценаријима. Библиотека је коришћена у пет пројеката и нико није приметио проблем. На прегледу кода, нови програмер је указао на грешку — и након исправке показало се да је један од пројеката зависио од овог „погрешног” понашања.
Schrödinbug заузима јединствено место у класификацији програмских грешака. Упоредимо га са другим типовима.
| Тип грешке | Манифестација пре читања кода | Манифестација после читања кода | Природа |
|---|---|---|---|
| Schrödinbug | Никада | Почиње да се манифестује | Психолошка |
| Bohrbug | Увек са истим подацима | Увек са истим подацима | Детерминистичка |
| Mandelbug | Понекад, хаотично | Понекад, хаотично | Системска |
| Heisenbug | Стабилно | Нестаје у отклањачу грешака | Техничка |
Schrödinbug — једини тип грешке чија манифестација директно зависи од чињенице схватања грешке од стране програмера. У томе је његова парадоксална природа.
Иако је Schrödinbug пре психолошки феномен, постоје практичне методе минимизације његовог утицаја на пројекат.
Што се грешка раније открије, мања је вероватноћа да ће ући у категорију Schrödinbug. Програмирање у пару и обавезни преглед сваке линије кода смањују број скривених дефеката на минимум.
Статички анализатори кода (ESLint, detekt, ktlint, SpotBugs) откривају потенцијалне грешке у фази компилације, не чекајући да их човек примети. Linter-и могу да открију „успаване” грешке у мртвим гранама кода.
Покривање тестовима свих грана кода, укључујући ретко коришћене, — једини је начин да се гарантује да Schrödinbug неће годинама чекати свој тренутак. Алати попут JaCoCo за Java помажу у праћењу непокривених грана.
// Primer potencijalnog Schrödinbug-a — greška u retko pozivanoj grani
def processOrder(Order order) {
if (order.isRush()) {
// Ova grana nikada nije testirana na produkciji
sendRushNotification(order) // možda ovde postoji greška
}
}
У овом примеру Schrödinbug може постојати годинама ако хитне поруџбине (rush) никада нису улазиле у систем. Чим се прва таква поруџбина појави — грешка ће се манифестовати, али до тог тренутка програмери мисле да је код исправан.
Често постављана питања
Schrödinbug — прави феномен из професионалног жаргона, али описује пре когнитивни и психолошки феномен него техничку категорију грешке. Термин користе програмери за описивање ситуације у којој схватање грешке у коду доводи до њене прве манифестације.
Парадокс је у томе што грешка објективно постоји, али се субјективно не манифестује до тренутка откривања. Пре читања кода програм ради исправно, иако садржи грешку. После читања — грешка се „материјализује” и почиње да изазива отказе.
Аналогија је директна: као што је Шредингерова мачка истовремено жива и мртва док се кутија не отвори, тако је и Schrödinbug истовремено „ради” и „покварен” док програмер не отвори фајл са кодом и не прочита га. Посматрање уништава суперпозицију.
Да, Schrödinbug може бити опасан ако се скривена грешка налази у критичном делу кода који се ретко извршава — на пример, у обради плаћања при специфичним условима или у логици опоравка након отказа. Откривање такве грешке у најнепогоднијем тренутку може довести до озбиљних проблема.
Једини поуздан метод је обезбедити 100% покривеност кода тестовима, укључујући све гране и граничне услове. Ако се свака линија кода извршава барем у једном тесту, Schrödinbug ће бити откривен у фази тестирања, а не након читања кода на продукцији.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође