Гейзенбаг
На компьютерного программирования жаргоне «гейзенбаг» — это программная ошибка , которая, кажется, исчезает или меняет свое поведение, когда кто-то пытается ее изучить. [1] Этот термин является каламбуром от имени Вернера Гейзенберга , физика , который первым заявил об эффекте наблюдателя в квантовой механике , который утверждает, что акт наблюдения за системой неизбежно изменяет ее состояние. В электронике традиционным термином является «зондовый эффект» , когда присоединение тестового щупа к устройству меняет его поведение.
Подобные термины, такие как bohrbug , mandelbug , [2] [3] [4] хинденбаг и шрёдинбаг [5] [6] (см. раздел о связанных терминах ) иногда предлагались для обозначения других необычных ошибок программного обеспечения, иногда в шутку. [7] [8]
Примеры
[ редактировать ]Гейзенбаги возникают потому, что обычные попытки отладки программы , такие как вставка операторов вывода или запуск ее с помощью отладчика , обычно имеют побочный эффект в виде тонкого изменения поведения программы, например, изменения адресов переменных в памяти и времени. его исполнения.
Одним из распространенных примеров ошибки Гейзенбага является ошибка, которая появляется, когда программа компилируется оптимизирующим компилятором , а не тогда, когда та же программа компилируется без оптимизации (как это часто делается с целью проверки ее отладчиком). Во время отладки значения, которые оптимизированная программа обычно хранит в регистрах, часто передаются в основную память. Это может повлиять, например, на результат сравнения чисел с плавающей запятой , поскольку значение в памяти может иметь меньший диапазон и точность, чем значение в регистре. [ нужна ссылка ] . Точно так же ошибки Heisenbug могут быть вызваны побочными эффектами в тестовых выражениях, используемых в утверждениях во время выполнения в таких языках, как C и C++ , где тестовое выражение не оценивается, когда утверждения отключены в рабочем коде с помощью NDEBUG
макрос.
Другими распространенными причинами ошибок Heisenbugs являются использование значения неинициализированной переменной (которая может изменить свой адрес или начальное значение во время отладки) или следование недопустимому указателю (который может указывать на другое место при отладке). Отладчики также обычно позволяют использовать точки останова или предоставляют другие пользовательские интерфейсы, которые вызывают скрытое выполнение дополнительного исходного кода (например, средств доступа к свойствам), что, в свою очередь, может изменить состояние программы. [9]
Конечные пользователи могут столкнуться с ошибкой Heisenbug, когда при создании снимка экрана ошибки Heisenbug для наблюдения ошибка исправляется, и на снимке экрана отображается идеально работающее состояние. Этот эффект может произойти, когда сложные пакеты программного обеспечения работают вместе, например, веб-браузер, использующий аппаратное ускорение графической карты, что приводит к ошибкам рендеринга на физическом экране, которые не отображаются на снимке экрана.
Время также может быть фактором возникновения ошибок Heisenbug, особенно в многопоточных приложениях. Выполнение программы под управлением отладчика может изменить время выполнения программы по сравнению с обычным выполнением. Ошибки, чувствительные ко времени, такие как условия гонки , могут не возникать, если программа замедляется из-за одношаговых строк исходного кода в отладчике. Это особенно верно, когда поведение включает взаимодействие с объектом, не находящимся под контролем отладчика, например, при отладке обработки сетевых пакетов между двумя компьютерами, и только один находится под контролем отладчика.
Гейзенбаги можно рассматривать как примеры эффекта наблюдателя в информационных технологиях . Разочарованные программисты могут с юмором обвинить в гейзенбаге фазу луны . [10] или (если это произошло только один раз) может объяснить это мягкой ошибкой , вызванной воздействием альфа-частиц или космических лучей на оборудование, - хорошо документированное явление, известное как эффекты одиночного события .
Связанные термины
[ редактировать ]Bohrbug , напротив, является «хорошей, надежной ошибкой». Как и детерминированная модель атома Бора , они не меняют своего поведения и сравнительно легко обнаруживаются. [11] [12]
Мандельбаг ) — это (названный в честь Бенуа Мандельброта фрактала хаотичным ошибка, причины которой настолько сложны, что ее невозможно исправить или из-за которой ее поведение кажется или даже недетерминированным . [2] Этот термин также относится к ошибке, которая демонстрирует фрактальное поведение (то есть самоподобие ), обнаруживая больше ошибок (чем глубже разработчик погружается в код, чтобы исправить его, тем больше ошибок он находит). [ нужна ссылка ]
Schrödinbug мысленного или schroedinbug (названный в честь Эрвина Шредингера и его эксперимента ) — это ошибка, которая проявляется при запуске программного обеспечения после того, как программист замечает, что код вообще не должен был работать. [5]
Хинденбаг [13] (назван в честь катастрофы в Гинденбурге ) — ошибка с катастрофическим поведением.
Хиггс -Багсон [14] [15] (названный в честь частицы бозона Хиггса ) — это ошибка, существование которой прогнозируется на основе других наблюдаемых условий (чаще всего, смутно связанных записей журнала и неофициальных отчетов пользователей), но которую трудно, если не невозможно, искусственно воспроизвести в ходе разработки или тестирования. среда. Этот термин также может относиться к ошибке, которая очевидна в коде (доказана математически), но которую нельзя увидеть во время выполнения (но ее существование трудно или невозможно обнаружить).
Этимология
[ редактировать ]Этот термин был использован в 1985 году Джимом Греем в статье о сбоях программного обеспечения. [16] (и иногда ошибочно приписывается ему из-за этой публикации), а также в 1986 году Джонатаном Кларком и Жахаем Стюартом в списке рассылки (позже Usenet новостная группа ) comp.risks . [17]
Брюс Линдсей, исследователь из IBM , подтвердил в интервью ACM Queue в 2004 году , что он присутствовал при первоначальном определении Гейзенбага. [18]
Более раннее появление в публикациях ACM датируется 1983 годом. [19]
Разрешение
[ редактировать ]Гейзенбаги трудно идентифицировать и исправить; часто попытки решить их приводят к дальнейшему неожиданному поведению. Поскольку проблема проявляется в результате отдельной основной ошибки, ее поведение может быть трудно предсказать и проанализировать во время отладки. В целом количество обнаруженных ошибок Heisenbug должно уменьшаться по мере развития программного обеспечения. [20]
См. также
[ редактировать ]- Программирование культа карго
- Jinx Debugger — инструмент, который автоматически исследует выполнения, которые могут выявить ошибки Heisenbugs.
- Отладчик памяти
Ссылки
[ редактировать ]- ^ «Жаргонный файл: heisenbug» .
- ^ Jump up to: а б «Жаргонный файл: Мандельбаг» . Catb.org . Проверено 5 сентября 2013 г.
- ^ Раймонд, Эрик С.; Новый словарь хакера , 3-е издание, 1996 г.
- ^ Кларк, Артур К. , Призрак из Гранд-Бэнкса , Bantam Books, 1990.
- ^ Jump up to: а б «Жаргонный файл: Шрединбаг» . Catb.org . Проверено 5 сентября 2013 г.
- ^ Раймонд, Эрик С.; Новый словарь хакера , 3-е издание, 1996 г.
- ^ В следующей статье исследуются различные определения борбуга, мандельбуга и гейзенбуга, предложенные в литературе, а также утверждения, сделанные о взаимосвязи между этими типами неисправностей: Гроттке, Михаэль; и Триведи, Кишор С .; Сбои программного обеспечения, старение программного обеспечения и обновление программного обеспечения , Журнал Японской ассоциации инженеров по надежности , Vol. 27, № 7, стр. 425–438, 2005.
- ^ Гроттке, Майкл; и Триведи, Кишор С.; Борьба с ошибками: удаление, повтор, репликация и обновление , IEEE Computer vol. 40, нет. 2 (февраль 2007 г.), стр. 107–109.
- ^ «Переопределение Java toString() с инициализацией как побочный эффект». Архивировано 30 декабря 2014 г. на Wayback Machine.
- ^ CATB.org, «Фаза луны»
- ^ Гошгарян, Гэри; Изучение языка , издательство HarperCollins College, 1995 г.
- ^ «Такие временные сбои программного обеспечения получили причудливое название «Heisenbug», потому что они исчезают при повторном изучении. Напротив, «Bohrbugs» - это хорошие серьезные ошибки». (Новости IEEE Computer Group, том 24, номера 7–12, 1991 г.)
- ^ «Хинден Баг» . [ нужен лучший источник ]
- ^ «Новый жаргон программирования» . 20 июля 2012 г.
- ^ «20 забавных жаргонных фраз программирования, которые следует использовать в разговоре с инженерами» . Бизнес-инсайдер .
- ^ Грей, Джим (1985). «Почему компьютеры останавливаются и что с этим можно сделать?» . Технический отчет 85.7 . Тандемные компьютеры.
- ^ (16 декабря 1986 г.) ДАЙДЖЕСТ РИСКОВ 4.30 - (23 декабря 1986 г.) ДАЙДЖЕСТ РИСКОВ 4.34 , модератор Питер Г. Нойманн
- ^ « Разговор с Брюсом Линдси», ACM Queue, том 2, № 8 — ноябрь 2004 г.» . Queue.acm.org . Проверено 5 сентября 2013 г.
- ^ Материалы симпозиума ACM SIGSOFT/SIGPLAN по разработке программного обеспечения по высокоуровневой отладке, Пасифик-Гроув, Калифорния, 20–23 марта 1983 г. , Ассоциация вычислительной техники, 1983 г., поиск в Google Книгах :
Это принцип неопределенности Гейзенберга применительно к отладке (пример такой ошибки один из участников назвал «ошибкой Гейзенберга»).
Также цитируется у Леблана, Ричарда Дж.; Роббинс, Арнольд Д.; Событийно-ориентированный мониторинг распределенных программ , в материалах 5-й Международной конференции IEEE по распределенным вычислительным системам (ICDCS) , IEEE Computer Society, Computer Society Press, 1985, стр. 515-522 Поиск в Google Книгах :
Это принцип неопределенности Гейзенберга применительно к отладке, иногда называемый «принципом Гейзенберга» [ACM83].
- ^ П., Бирман, Кеннет (2005). Надежные распределенные системы: технологии, веб-сервисы и приложения . Нью-Йорк: Спрингер. ISBN 0387276017 . OCLC 225378026 .
{{cite book}}
: CS1 maint: несколько имен: список авторов ( ссылка )
Внешние ссылки
[ редактировать ]- Технология отладки Гейзенберга
- История о магии
- OpenOffice не будет печатать по вторникам — ошибка Гейзена, на устранение которой ушло почти девять месяцев.