Heisenbug - Heisenbug

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

Подобные термины, такие как борбуг, Мандельбаг,[2][3][4] инденбаг, и Schrödinbug[5][6] (см. раздел о связанные термины ) иногда предлагались для других видов необычных программных ошибок, иногда в шутку;[7][8] однако, в отличие от термина Heisenbug, они малоизвестны и не используются.[9][оригинальное исследование? ]

Примеры

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

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

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

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

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

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

А борбуг, по оппозиции, это «хороший, надежный баг». Как детерминированный Модель атома Бора, они не меняют своего поведения и относительно легко обнаруживаются.[12][13]

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

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

А инденбаг[14] (назван в честь Гинденбургская катастрофа ) является ошибкой с катастрофическим поведением.

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

История термина

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

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

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

Разрешение

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

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

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

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

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

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

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

  21. ^ П., Бирман, Кеннет (2005). Надежные распределенные системы: технологии, веб-сервисы и приложения. Нью-Йорк: Спрингер. ISBN  0387276017. OCLC  225378026.

внешняя ссылка