Кіріспе
Linux дистрибутивін жөндеу кезінде өзгеріп тұрған сияқты бағдарламалық қате Heisenbug деп аталады. Компьютерлік бағдарламалау тілінде heisenbug – оны зерттеуге тырысқанда жоғалып кететін немесе мінез-құлқын өзгертетін бағдарламалық қате. Бұл термин кванттық механиканың бақылаушы әсерін алғаш рет айтқан физик Вернер Гейзенбергтің есімімен байланысты, ол жүйені бақылау әрекеті оның күйін өзгертетінін көрсеткен. Электроникада бұған ұқсас құбылыс зонд эффектісі деп аталады, яғни құрылғыға сынақ зондын қосу оның жұмысын өзгертеді. Сондай-ақ, bohrbug, mandelbug, hindenbug және schrödinbug сияқты басқа да есімдер (қатысты терминдер бөлімін қараңыз) кейде әзіл ретінде немесе ерекше бағдарламалық қателерін сипаттау үшін ұсынылады.
the Linux distribution codenamed Heisenbug
In computer programming jargon, a heisenbug is a software bug that seems to disappear or alter its behavior when one attempts to study it. The term is a pun on the name of Werner Heisenberg, the physicist who first asserted the observer effect of quantum mechanics, which states that the act of observing a system inevitably alters its state. In electronics, the traditional term is probe effect, where attaching a test probe to a device changes its behavior. Similar terms, such as bohrbug, mandelbug, hindenbug, and schrödinbug (see the section on related terms) have been occasionally proposed for other kinds of unusual software bugs, sometimes in jest.
Мысалдар
Heisenbug пайда болады, өйткені бағдарламаны жөндеуге жасалатын әрекеттер, мысалы, шығыс мәлімдемелерін қосу немесе оны жөндеу құралымен іске қосу, әдетте бағдарламаның мінез-құлқын сезімтал түрде өзгертудің қосымша әсерін тудырады, мысалы, айнымалылардың жад мекенжайларын және оның орындалу уақытын өзгерту. Heisenbug-тің кең таралған мысалы – бағдарламаны оңтайландырылған компилятормен жинағанда пайда болатын, бірақ сол бағдарлама оңтайландырусыз жинағанда пайда болмайтын қате (әдетте оны жөндеу құралымен қарау үшін осылай жасалады). Жөндеу кезінде, оңтайландырылған бағдарлама әдеттегідей регистрлерде сақтайтын мәндер көбінесе негізгі жадқа көшіріледі. Бұл, мысалы, қозғалатын нүктелі салыстырулардың нәтижесіне әсер етуі мүмкін, себебі жаттағы мәннің регистрдегі мәнге қарағанда кішірек диапазоны мен дәлдігі болуы мүмкін. Сол сияқты, heisenbug-тар C және C++ сияқты тілдердегі орындалу уақытындағы растауларда қолданылатын тесттік өрнектердің қосымша әсерлерінен туындауы мүмкін, онда NDEBUG макросы қолданылып, өндіріс кодында растаулар өшірілген кезде тесттік өрнектер бағаланбайды. Heisenbug-тардың басқа да жиі кездесетін себептері – инициализацияланбаған айнымалының мәнін пайдалану (оның мекенжайы немесе бастапқы мәні жөндеу кезінде өзгеруі мүмкін) немесе жарамсыз мекенжайға сілтеме жасау (жөндеу кезінде ол басқа орынға сілтеме жасауы мүмкін). Жөндеу құралдары сондай-ақ тоқтату нүктелерін пайдалануға мүмкіндік береді немесе қосымша бастапқы кодты (мысалы, қасиеттерге қол жеткізушілерді) жасырын түрде орындауға себеп болатын басқа пайдаланушы интерфейстерін ұсынады, бұл бағдарламаның күйін өзгерте алады. Соңғы пайдаланушылар heisenbug-ты бақылау үшін скриншот жасағанда, ол түзетіліп, скриншотта бағдарлама толыққанды жұмыс істейтін күйде көрсетілуі мүмкін. Бұл эффект бағдарламалық қамтамастың күрделі жиынтығы бірлесіп жұмыс істегенде пайда болуы мүмкін, мысалы, веб-браузер аппараттық графикалық картаны жеделдетуді пайдаланады, бұл физикалық экранда скриншотта көрінбейтін қателерге әкелуі мүмкін. Уақыт та heisenbug-тардың факторы болуы мүмкін, әсіресе көп өрістік қолданбаларда. Бағдарламаны жөндеу құралының бақылауында орындау, бағдарламаның орындалу уақытын қалыпты орындаумен салыстырғанда өзгерте алады. Уақытқа сезімтал қателер, мысалы, жарыс жағдайлары, бағдарламаны жөндеу құралындағы жекелеген жолдарды баяулату кезінде пайда болмауы мүмкін. Бұл әсіресе, әрекеттесу жөндеу құралының бақылауында емес, басқа бір объектімен болғанда дұрыс, мысалы, екі машина арасындағы желілік пакеттерді өңдеуді жөндеу кезінде және олардың тек біреуі ғана жөндеу құралының бақылауында болғанда. Heisenbug-тарды ақпараттық технологиядағы бақылаушы әсерінің мысалы ретінде қарастыруға болады. Көңілі толмаған бағдарламашылар heisenbug-ты ай фазасына жаба алады немесе (егер ол бір рет қана орын алса) оны альфа бөлшектерінің немесе ғарыш сәулелерінің аппаратқа әсер етуінен туындаған жұмсақ қате деп түсіндіре алады, бұл бір оқиға әсерлері деп белгілі жақсы құжатталған құбылыс.
Қатынасты терминдер
Ал бұршақ құрт – "жақсы, сенімді құрт". Детерминистік Бор атомдық моделі сияқты, олар өз мінез-құлқын өзгертпейді және салыстырмалы түрде оңай анықталады. Мандельбрат құрты (Бенуа Мандельброттың фракталының құрметіне аталған) – себептері соншалықты күрделі, оны жөндеуге болмайды немесе оның мінез-құлқын хаотикалық, тіпті детерминистік емес етіп көрсетеді. (Хинденбург апатынан кейін аталған) – катастрофалық мінез-құлыққа ие құрт. Хиггс бозоны құрты (Higgs bugson) – басқа байқалған жағдайларға (көбінесе, нашар байланысты журнал жазбалары мен пайдаланушылардың айтқан әңгімелері) сүйене отырып, бар болуы болжанған, бірақ дамыту немесе сынақ ортасында жасанды түрде қайта жасау қиын, тіпті мүмкін емес құрт. Бұл термин кодта анық көрінетін (математикалық тұрғыдан дәлелденген), бірақ орындалғанда байқаылмайтын (әлі де табу қиын немесе мүмкін емес) құртқа да қатысты болуы мүмкін.
Этимология
Терминді 1985 жылы Джим Грей бағдарламалық қателер туралы мақаласында қолданды (бірақ кейде осы жарияланымға байланысты оған қате атрибуцияланады), сондай-ақ 1986 жылы Джонатан Кларк пен Жахай Стюарт пошта тізімінде (кейін Usenet жаңалықтар тобы) comp.risks пайдаланды. IBM зерттеушісі Брюс Линдсей 2004 жылғы ACM Queue сұхбатында Хайзенбұқтың алғашқы анықтамасы кезінде қатысқанын растады. ACM басылымдарында одан бұрын 1983 жылдан бастап кездеседі.
Қаулы
Хайзенбұттарды анықтау және түзету қиын; көбінесе оларды жоюға тырысып, жағдайды одан бетерлетесіз, күтпеген жаңа мінез-құлықтар пайда болады. Проблема жеке, жасырылған қатеден туындағандықтан, оның қызметін жөндеу кезінде болжау және талдау қиын. Бағдарламалық қамтамастың жетіліп дамуымен анықталған хайзенбұттардың саны азаюы керек.