Гейзенбаг

Гейзенбаг

Гейзенбаг (англ. Heisenbug) — термин, используемый в программировании для описания программной ошибки, которая исчезает или меняет свои свойства при попытке её обнаружения. Это слово, в отличие от слова «баг», в русском языке практически не используется. Не полностью идентичный, но достаточно близкий по значению русскоязычный термин — «плавающая ошибка».

Примером могут являться ошибки, которые проявляются в окончательном варианте программы (релизе), однако не видны в режиме отладки, или ошибки синхронизации в многопоточном приложении.

Содержание

Происхождение названия

Данное название является игрой слов и происходит от физического термина «Принцип неопределённости Гейзенберга», который на бытовом уровне понимается как изменение наблюдаемого объекта в результате самого факта наблюдения, происходящее в квантовой механике.

В интервью журналу ACM Queue (номер 8 за ноябрь 2004) Брюс Линдсей рассказывает, что присутствовал в тот момент, когда данный термин был впервые употреблён в значении «ты смотришь на него — и он исчезает» (сравните со словами Гейзенберга, который говорил: «чем более пристально вы глядите на один предмет, тем меньше внимания вы уделяете чему-то ещё»).

Возможные причины возникновения

Как правило, это низкоуровневые проблемы:

  • Неинициализированная переменная — переменной не присвоено значение, но в отладчике она попадает на область памяти, заполненную нулями, а в реальной работе в памяти по тому же адресу находится произвольное значение.
  • Неправильный порядок инициализации — инициализация может происходить на более поздней стадии работы, чем первое использование, при этом после инициализации проблема не проявляется (при этом на стадии отладки порядок инициализации совпадает с порядком использования).
  • Ошибка синхронизации в многозадачной среде или многопоточном приложении (т. н. состояние гонки) — всевозможные ошибки от неправильной установки семафоров до ошибок, связанных с взаимными приоритетами работы потоков (приоритеты при отладке и в реальной работе могут отличаться).
  • Аппаратная ошибка.

Ошибки оптимизаторов:

  • Ошибка алгоритма удаления мёртвого кода — алгоритм может ошибочно посчитать, что блок не имеет побочных эффектов и удалить его, при этом вставка отладочных команд для вывода на экран или в лог уже не даст удалить этот блок, как мёртвый.

Методы борьбы

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

См. также

Ссылки



Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Полезное


Смотреть что такое "Гейзенбаг" в других словарях:

  • Мандельбаг — (англ. Mandelbug)  термин, используемый в программировании для описания программной ошибки, чьё поведение столь сложно, что выглядит хаотичным[1]. Это также подразумевает, что говорящий полагает, что это скорее борбаг, чем гейзенбаг.… …   Википедия

  • Баг — Эта статья должна быть полностью переписана. На странице обсуждения могут быть пояснения. Не следует путать с лагом. В программировании баг (англ …   Википедия

  • Принцип неопределённости Гейзенберга — Квантовая механика Принцип неопределённости Гейзенберга Введение Математические основы …   Википедия

  • Шрёдинбаг — Эта статья предлагается к удалению. Пояснение причин и соответствующее обсуждение вы можете найти на странице Википедия:К удалению/9 октября 2012. Пока процесс обсуждения не завершён, статью можно …   Википедия

  • Борбаг — Эта статья предлагается к удалению. Пояснение причин и соответствующее обсуждение вы можете найти на странице Википедия:К удалению/18 ноября 2012. Пока процесс обсуждения не завершён, статью можно …   Википедия

  • Неопределённостей соотношение — Квантовая механика Принцип неопределённости Введение ... Математическая формулировка ... Основа …   Википедия

  • Schroedinbug — Шрёдинбаг (англ. Schroedinbug) термин, используемый в программировании для описания программной ошибки, которая никак не проявляет себя, однако внезапно возникает, если кто то наткнётся на неё в исходном коде или попытается использовать программу …   Википедия

  • Неопределенность Гейзенберга — Квантовая механика Принцип неопределённости Введение ... Математическая формулировка ... Основа …   Википедия

  • Неопределённость Гейзенберга — Квантовая механика Принцип неопределённости Введение ... Математическая формулировка ... Основа …   Википедия

  • Принцип неопределенности — Квантовая механика Принцип неопределённости Введение ... Математическая формулировка ... Основа …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»