Jump to content

Гейзенбаг

На компьютерного программирования жаргоне «гейзенбаг» — это программная ошибка , которая, кажется, исчезает или меняет свое поведение, когда кто-то пытается ее изучить. [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]

См. также

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

    Это принцип неопределенности Гейзенберга применительно к отладке (пример такой ошибки один из участников назвал «ошибкой Гейзенберга»).

    Также цитируется у Леблана, Ричарда Дж.; Роббинс, Арнольд Д.; Событийно-ориентированный мониторинг распределенных программ , в материалах 5-й Международной конференции IEEE по распределенным вычислительным системам (ICDCS) , IEEE Computer Society, Computer Society Press, 1985, стр. 515-522 Поиск в Google Книгах :

    Это принцип неопределенности Гейзенберга применительно к отладке, иногда называемый «принципом Гейзенберга» [ACM83].

  20. ^ П., Бирман, Кеннет (2005). Надежные распределенные системы: технологии, веб-сервисы и приложения . Нью-Йорк: Спрингер. ISBN  0387276017 . OCLC   225378026 . {{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0fa6609220280e71967cc44092e51a66__1710153600
URL1:https://arc.ask3.ru/arc/aa/0f/66/0fa6609220280e71967cc44092e51a66.html
Заголовок, (Title) документа по адресу, URL1:
Heisenbug - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)