Небольшое Эссе об программных ошибках ко дню программиста.

13.09.10

Сообщество - О жизни

Небольшая познавательная статья о некоторых частых ошибках в програмном коде

С багами сталкивается абсолютное большинство программистов, ошибки 
сама история о возникновении слова "баг" (англ. Bug - жук) уже набила оскомину, но вскользь упомяну и её: в 1945 году учёные Гарвардского университета столкнулись с ошибкой в расчетах, произведенной ЭВМ Mark II Aiken Relay Calculator. Причина несрабатывания реле был небольшой мотылек прилетевший на тепло и случайно попавший между контактами реле (Bug), тем самым породив рождение термина.
Сегодняшний рассказ об особенных ошибках, с которыми многие сталкивались, но даже не подозревали о том, что эти баги имеют свои индивидуальные названия:

Борбаг, Гейзенбаг, Мандельбаг и Шрёдинбаг.


Материал взят из Википедии — свободной энциклопедии.


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

Слово «шрёдинбаг» происходит от мысленного эксперимента с котом Шрёдингера, где кот, как известно, находясь в камере с устройством казни равновероятного срабатывания/несрабатывания, был полумертв-полужив (или и мертв, и жив одновременно в другой интерпретации) с точки зрения квантовой механики до тех пор пока был информационно изолирован от наблюдателя, дискретное однозначное и непредсказуемое состояние кота наступает только через час после открытия дверцы в эту камеру.


Возможные причины объяснения:

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


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


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

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


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

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


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


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


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

Данный тип ошибки характеризуется как устойчивый и поэтому назван в честь атомной модели, разработанной Нильсом Бором.


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


Название происходит от имени Бенуа Мандельброта, основоположника фрактальной геометрии. Это слово, в отличие от слова «баг», в русском языке практически не используется.

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

Примером такой ошибки может служить фундаментальная ошибка, допущенная при проектировании системы.


Всех с праздником! и да не будут с вами Гейзенбаги, Мандельбаги, Шрёдинбаги, Борбаги и прочие.

http://ru.wikipedia.org/wiki/Гейзенбаг
http://ru.wikipedia.org/wiki/Мандельбаг
http://ru.wikipedia.org/wiki/Шрёдинбаг
http://ru.wikipedia.org/wiki/Борбаг

 

См. также

О жизни Россия Бесплатно (free)

Данная статья сугубо для раздела «О жизни», но может оказаться полезна многим членам сообщества. Все описанное ниже соответствует актуальному российскому законодательству на момент публикации статьи. У вас нет и в ближайшее время не предвидится детей возрастом до 1.5 лет? Вспомните о родственниках / друзьях / коллегах / знакомых, у которых они есть, и отправьте ссылку на эту статью — она может быть им чрезвычайно полезна. Распространите среди жильцов вашего ЖЭКа, как говорилось в одном классическом произведении. Помните, что, ставя плюсы к статье, вы поддерживаете её автора!

01.07.2024    5339    madonov    47    

51

О жизни Linux Системный администратор Программист Платформа 1С v8.3 Россия Бесплатно (free)

Использование Linux в качестве основной ОС для программиста 1С, возможно ли это? Решил поделиться личным опытом работы перехода на эту систему. В статье моя история без технических деталей максимально простым языком. И, спойлер, да, жизнь на Линуксе для разработчика 1С возможна и с каждым годом становится всё комфортней. Статья рассчитана на людей, с Линуксом не знакомых, специалистов прошу не кидаться помидорами.

16.05.2024    5733    soulner    33    

47

О жизни Россия Бесплатно (free)

Подводим итоги работы в 1С за 2023 год. Все о вас: 4 подробных раздела с цифрами, графиками и ужасными цветами диаграмм (должна же где-то быть стабильность).

08.02.2024    28132    Neti    85    

121

О жизни Бесплатно (free)

В процессе написания статей на тему Идеальное место работы ЗУПера нужен аргументированный текст про адекватного работодателя. Информации получилось много, поэтому выделю в отдельные 2 статьи. Рассмотрим все недостатки работодателей от момента собеседования до момента увольнения. Все этапы, как всегда, подкреплены реальными случаями из моего опыта.

22.01.2024    5559    biimmap    67    

76

О жизни Конфигурации 1cv8 Бесплатно (free)

В процессе написания статей на тему Идеальное место работы ЗУПера нужен аргументированный текст про адекватного работодателя. Информации получилось много, поэтому выделю в отдельные 2 статьи. Рассмотрим все недостатки работодателей от момента собеседования до момента увольнения. Все этапы, как всегда, подкреплены реальными случаями из моего опыта.

16.01.2024    7193    biimmap    100    

79

О жизни Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)

Импортозамещение увеличило потребность в архитекторах, аналитиках, разработчиках 1С, в т.ч. по ЗУП. Все их ищут всеми возможными способами, но не могут найти и не знают, чем же их завлечь к себе!? Давайте разберёмся в этом вопросе!

27.11.2023    5785    biimmap    52    

74

О жизни Сообщество Бесплатно (free)

Прочитав название публикации, мысль возникает о свадьбе... Но речь не об этом!

25.08.2023    3215    biimmap    24    

51
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Свой 164 13.09.10 16:32 Сейчас в теме
занятно, такие ошибки способны довести до отчаяния программиста
2. quadder 15 13.09.10 16:37 Сейчас в теме
Занятная статья, спасибо автору :!:
3. Wolfis 7 13.09.10 16:41 Сейчас в теме
Хорошая статейка...позновательная
4. script 128 13.09.10 22:48 Сейчас в теме
Шрёдинбаг - распространенная ошибка в самописных 1С-ных конфигурациях, в которых алгоритм работы протестирован на некоторых данных и в некоторых условия. Более того иногда встречаются случаи когла код программы специально привязываеться к данным программы.
После установки "чистых" таких конфигураций очень часто программа даже не наченае работать а сразу же ругается на что то недостающее....
Leja; Smoky L@dy; charushkin; iov; +4 Ответить
6. iov 407 13.09.10 22:55 Сейчас в теме
(4) А в не самописных конфах это запротоколированный баг. :D
ChiginAV; +1 Ответить
8. Dansur 262 14.09.10 17:05 Сейчас в теме
(6) а иногда и фича, или как это........ БАГОФИЧА!! ))))
7. Dansur 262 14.09.10 17:04 Сейчас в теме
(4) типичнейший пример в 7-ке это путанье ссылки на объект с спозиционированой выборкой объекта.
5. iov 407 13.09.10 22:54 Сейчас в теме
* Microsowt СООБЩАЕТ
- РУССКИЕ хакеры ВЗЛОМАЛИ САЙТ И ОПЕРАЦИОННУЮ СИСТЕМУ ВЧЕРА ВЕЧЕРОМ.
- Спасибо теперь все работает.
* P.S. Соарону посвящается. (семерочники помнят и благодарят)
9. zk96 14.09.10 20:45 Сейчас в теме
Даже не предпологал, что для обозначения ошибок программиста есть столь умные и мудреные названия, теперь буду ошибаться с чувством собственного достоинства :D
10. psamt1k 16.09.10 20:28 Сейчас в теме
Я так и представляю:
Пользоватаель: у вас тут ошибка!
Я: Это не ошибка, это Шредингбаг! Хотя и маскируется под Мандельбаг...
Пользователь: о_О *крестится*
KeyMaster; hame1e00n; marsohod; Smoky L@dy; savageRrr; Dansur; ChiginAV; +7 Ответить
11. okanat 16.02.12 15:58 Сейчас в теме
познавательно,,,тут не до юмора )))
12. Evil Beaver 8250 06.08.13 16:45 Сейчас в теме
О, да это мой любимый боян про программерские неологизмы.
А как же еще "Мегамот" (Megamoth) и "Буказоидный подход к документации" (Bukazoid documentation pattern)?
13. Evil Beaver 8250 06.08.13 16:55 Сейчас в теме
Ах, да, еще есть "Защитный" он же "Ипотечный" код.
Code purposely so terrible that only you can maintain it, forcing your employer to keep you, thus providing job security (so you can pay your mortgage)
Оставьте свое сообщение