stringtranslate.com

Гейзенбаг

На жаргоне компьютерного программирования гейзенбаг — это программная ошибка , которая, кажется, исчезает или меняет свое поведение, когда кто-то пытается ее изучить. [1] Термин является игрой слов на имя Вернера Гейзенберга , физика , который первым выдвинул эффект наблюдателя в квантовой механике , который гласит, что акт наблюдения за системой неизбежно изменяет ее состояние. В электронике традиционный термин — эффект зонда , когда присоединение тестового зонда к устройству изменяет его поведение.

Похожие термины, такие как bohrbug , mandelbug , [2] [3] [4] hindenbug и schrödinbug [5] [6] (см. раздел о связанных терминах), иногда предлагались для других видов необычных программных ошибок, иногда в шутку. [7] [8]

Примеры

Гейзенбаги возникают из-за того, что обычные попытки отладить программу , такие как вставка выходных операторов или запуск ее с помощью отладчика , обычно имеют побочный эффект в виде изменения поведения программы неявными способами, такими как изменение адресов памяти переменных и времени ее выполнения.

Одним из распространенных примеров гейзенбага является ошибка, которая появляется, когда программа компилируется с помощью оптимизирующего компилятора , но не когда та же программа компилируется без оптимизации (как это часто делается с целью ее проверки с помощью отладчика). Во время отладки значения, которые оптимизированная программа обычно хранит в регистрах, часто помещаются в основную память. Это может повлиять, например, на результат сравнений с плавающей точкой , поскольку значение в памяти может иметь меньший диапазон и точность, чем значение в регистре [ необходима цитата ] . Аналогичным образом, гейзенбаги могут быть вызваны побочными эффектами в тестовых выражениях, используемых в утверждениях времени выполнения в таких языках, как C и C++ , где тестовое выражение не оценивается, когда утверждения отключены в производственном коде с помощью NDEBUGмакроса.

Другие распространенные причины гейзенбагов — использование значения неинициализированной переменной (которая может изменить свой адрес или начальное значение во время отладки) или следование недопустимому указателю (который может указывать на другое место во время отладки). Отладчики также обычно позволяют использовать точки останова или предоставляют другие пользовательские интерфейсы, которые вызывают скрытное выполнение дополнительного исходного кода (например, средств доступа к свойствам), что, в свою очередь, может изменить состояние программы. [9]

Конечные пользователи могут столкнуться с гейзенбагом, когда процесс создания снимка экрана гейзенбага для наблюдения исправляет гейзенбаг, а снимок экрана показывает идеально работающее состояние. Этот эффект может возникнуть, когда сложные стеки программного обеспечения работают вместе, например, веб-браузер, использующий аппаратное ускорение графической карты, что приводит к ошибкам рендеринга на физическом экране, которые не отображаются на снимке экрана.

Время также может быть фактором гейзенбагов, особенно в многопоточных приложениях. Выполнение программы под управлением отладчика может изменить время выполнения программы по сравнению с обычным выполнением. Чувствительные ко времени ошибки, такие как состояния гонки , могут не возникать, когда программа замедляется пошаговыми исходными строками в отладчике. Это особенно верно, когда поведение включает взаимодействие с сущностью, не находящейся под управлением отладчика, например, при отладке обработки сетевых пакетов между двумя машинами, и только одна из них находится под управлением отладчика.

Гейзенбаги можно рассматривать как примеры эффекта наблюдателя в информационных технологиях . Разочарованные программисты могут с юмором списать гейзенбаг на фазу луны [10] или (если это произошло только один раз) могут объяснить его как мягкую ошибку из-за воздействия альфа-частиц или космических лучей на оборудование, хорошо документированное явление, известное как эффекты единичных событий .

Связанные термины

Бор -жук , напротив, является «хорошим, солидным жуком». Подобно детерминированной модели атома Бора , они не меняют своего поведения и сравнительно легко обнаруживаются. [11] [12]

Мандельбаг (названный в честь фрактала Бенуа Мандельброта ) — это ошибка, причины которой настолько сложны, что ее невозможно исправить, или ее поведение кажется хаотичным или даже недетерминированным . [2] Этот термин также относится к ошибке, которая демонстрирует фрактальное поведение (то есть самоподобие ), выявляя больше ошибок (чем глубже разработчик погружается в код, чтобы исправить его, тем больше ошибок он находит). [ необходима цитата ]

Ошибка Шрёдингера ( названная в честь Эрвина Шрёдингера и его мысленного эксперимента ) это ошибка, которая проявляется в работающем программном обеспечении после того, как программист замечает, что код изначально не должен был работать. [5]

Жук -хинденбург [13] (названный в честь катастрофы дирижабля «Гинденбург» ) — это насекомое с катастрофическим поведением.

Хиггс -багсон [14] [15] (названный в честь частицы бозона Хиггса ) — это ошибка, существование которой предсказывается на основе других наблюдаемых условий (чаще всего, неясно связанных записей в журнале и отдельных сообщений пользователей), но которую трудно, если не невозможно, искусственно воспроизвести в среде разработки или тестирования. Термин может также относиться к ошибке, которая очевидна в коде (доказана математически), но которую нельзя увидеть при выполнении (но которую трудно или невозможно фактически обнаружить в существовании).

Этимология

Термин был использован в 1985 году Джимом Греем в статье о сбоях программного обеспечения [16] (и иногда ошибочно приписывается ему из-за этой публикации), а также в 1986 году Джонатаном Кларком и Чжахаем Стюартом в списке рассылки (позднее новостной группе Usenet ) comp.risks . [17]

Брюс Линдси, исследователь из IBM , подтвердил в интервью ACM Queue 2004 года , что он присутствовал при первоначальном определении Гейзенбага. [18]

Более раннее появление в публикациях ACM относится к 1983 году. [19]

Разрешение

Гейзенбаги трудно идентифицировать и исправить; часто попытки их решить приводят к дальнейшему неожиданному поведению. Поскольку проблема проявляется как результат отдельной, лежащей в основе ошибки, поведение может быть трудно предсказать и проанализировать во время отладки. В целом количество выявленных гейзенбагов должно уменьшаться по мере развития программного обеспечения. [20]

Смотрите также

Ссылки

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

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

    Также цитируется в LeBlanc, Richard J.; Robbins, Arnold D.; Event-Driven Monitoring of Distributed Programs , в Трудах 5-й Международной конференции IEEE по распределенным вычислительным системам (ICDCS) , IEEE Computer Society, Computer Society Press, 1985, стр. 515-522 Поиск Google Books:

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

  20. ^ P., Birman, Kenneth (2005). Надежные распределенные системы: технологии, веб-сервисы и приложения . Нью-Йорк: Springer. ISBN 0387276017. OCLC  225378026.{{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )

Внешние ссылки