пятница, 15 апреля 2011 г.

Бажная терминология

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

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

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

Шрёдинбаг (англ. Schroedinbug) — термин, используемый в программировании для описания программной ошибки, которая никак не проявляет себя, однако внезапно возникает, если кто-то наткнётся на неё в исходном коде или попытается использовать программу в необычных условиях и осозна́ет, что система вообще не могла работать при наличии такой ошибки. После этого программа перестаёт работать вообще до тех пор, пока ошибка не будет исправлена. Хотя это звучит невероятно, некоторые программы содержат в себе такие ошибки.

Баги фазы луны

Термин «фаза луны» зачастую возникает, как понятие о глупом параметре, от которого может зависит баг, после того, как все утомились искать истинные причины. Jargon File отмечает два редких случая, в которых проблемы с обработкой данных действительно вызваны фазами луны.

Статистические баги

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

Альфа-баг

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

Posted via email from Комуникликабельность

Комментариев нет: