stringtranslate.com

Гейзенбаг

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

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

Примеры

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

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

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

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

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

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

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

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

Schrödinbug или schroedinbug (названный в честь Эрвина Шрёдингера и его мысленного эксперимента ) — это ошибка, которая проявляется при запуске программного обеспечения после того, как программист замечает, что код вообще не должен был работать. [5]

Гинденбаг [13] (названный в честь катастрофы в Гинденбурге ) — это ошибка с катастрофическим поведением .

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

Этимология

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

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

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

Разрешение

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

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

Рекомендации

  1. ^ "Жаргонный файл: heisenbug" .
  2. ^ ab "Жаргонный файл: Mandelbug". Catb.org . Проверено 5 сентября 2013 г.
  3. ^ Раймонд, Эрик С.; Словарь нового хакера, 3-е издание, 1996 г.
  4. ^ Кларк, Артур К. , Призрак из Гранд-Бэнкса, Bantam Books, 1990.
  5. ^ ab "Жаргонный файл: Шрёдинбаг" . 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. ОСЛК  225378026.{{cite book}}: CS1 maint: несколько имен: список авторов ( ссылка )

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