Нет в мире человека, который пользуется компьютером или другим устройством, и при этом ни разу не сталкивался с какой-то ошибкой. А как мы любим сейчас называть такие ошибки? Именно, баги. Сленговое слово, которое крепко закрепилось в лексиконе любого современного человека. Но это далеко не единственный перл народного творчества в контексте ошибок. Ведь ошибок, то бишь багов, существует несколько видов, названия которых также полны и смысла, и креатива. О них сегодня и пойдет речь. Надеюсь, данный материал вас позабавит, как позабавил меня. Поехали.

Что есть слово «баг» и почему именно оно?

Слово «баг» (bug на английском) это самый обыкновенный жучек. Нет, не тот, что в шпионских фильмах устанавливают в телефон для прослушки. А обыкновенное насекомое. Точнее выражаясь, любое насекомое из отряда Hemiptera, также именуемого как «настоящие / истинные жуки». Но как биологический термин стали применять в компьютерных технологиях.

Самой распространенной теорией является случай с Грейс Хоппер. Она работала в Гарвардском университете с ЭВМ Harvard Mark II. Устройство работало не так, как следовало. В итоге Грейс обнаружила между замкнувшими контактами сгоревшего мотылька (судя по внешним характеристикам). После этого госпожа Хоппер вклеила маленького диверсанта в свой технический отчет и написала: «First actual case of bug being found» (Первый реальный случай обнаружения бага). Произошло все это в 1946 году 9 сентября.



Случай действительно забавный, но не первый. До него, во времена Второй мировой, ошибки в работе электроники радиолокационных устройств также называли «багами».

А еще раньше, в 1878 году, Томас Эдисон написал следующие строки:

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

Но это не удивительно, назвать раздражающую тебя ошибку в честь насекомого, которые так же часто могут нас доставать, кружась вокруг, кусая, жаля и жужжа на ухо.

Нестандартная классификация багов

Баги бывают разного типа, все зависит от места их обнаружения, от жертвы их активности, от последствий и т.д. Основываясь на этих данных баги классифицируют, так сказать, по-научному. Это и семантические, и синтаксические, и состояние гонки, и т.д. и т.п. Мы же будем рассматривать термины не столь серьезные, но не менее точные в описании того или иного бага.

Альфабаг (Alpha particle bug)



Данный тип бага также порой называют просто «Полтергейст». Обнаружить такой баг можно только один единственный раз. Как правило, он появляется ввиду неверной работы железа (аппаратной части устройства). Из-за своей таинственности и необъяснимого алгоритма возникновения, его появление приписывают самым разным явлениям: от прохождения частиц темной материи через устройство до солнечных вспышек.

Как пример, вспомните фильм «Матрица: Перезагрузка». В нем были такие персонажи как «близнецы-альбиносы». По своей сути они призраки, но являются частью программного кода Матрицы.

Бозебаг



Представьте себе рой пчел. Представили? Вот тот же вид имеет и бозебаг — скопление ошибок в определенной части кода программы, которые приводят к критическим нарушениям ее работы.

Другими словами представьте одного рабочего терранов, которого атакует сотня зерлингов. Последствия в объяснении не требуются.

Борбаг (Bohrbug)



Иными словами — «баг классический». Он есть и он никуда не пропадает. Его работа всегда заканчивается одним и тем же результатом. Для большинства программистов такой баг очевиден и легко поддается исправлению. Видимо из-за своей очевидности он и получил имя в честь Нильса Бора (Niels Bohr), датского физика, предложившего свое видение атомной структуры, названное в его честь — Модель Бора.

Гейзенбаг (Heisenbug)



Видимо один из самых необычных видов багов. Дело в том, что он непостоянен. Такой баг меняет свои свойства, исчезает, появляется в процессе его обнаружения и попыток его ликвидировать. Именно за такие свойства он и получил название, которое отсылается к принципу неопределённости Гейзенберга (и нет, это не тот Гейзенберг, что варил мет в сериале). Данная теория говорит, что объект будет менять свои свойства во время наблюдения за ним ввиду этого самого наблюдения. Круто говоря, состояние объекта не под наблюдением и под наблюдением будет отличаться. Ох уж эта квантовая механика, где черное может быть белым, а холодное горячим (это я утрирую, конечно).

Дзенбаг (Zenbug)



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

Видимо данная ошибка достигла высшей степени просветление и поняла, что все в этом коде неважно.

Мандельбаг (Mandelbug)


Бенуа Мандельброт

Баг, которого боятся все программисты. Его сложно обнаружить, еще сложнее ликвидировать. А все из-за его хаотичной природы поведения. Название свое такие баги получили в честь математика Бенуа Мандельброта, в свое время работавшего в IBM. Почему так не совсем понятно. Возможно это связано с множеством Мандельброта (выдающаяся работа ученого, связанная с фракталами).

Метабаг



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

Возможно, название метабаг произошло от понятия метаязык — язык для описания языка.

Уфобаг (UFO bug)



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

Фермабаг



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

Фермибаг


Энрико Ферми

Очень редкий случай, но вероятность его возникновения обратно пропорциональна опыту программиста. Проще говоря, чем меньше у него опыта, тем чаще могут возникать фермибаги — когда на 1 строку кода приходится 1-2 ошибки.

Толковать название данного типа багов крайне сложно. Можно предположить что вдохновением для него послужил Энрико Ферми. А точнее такое понятие как статистика Ферми-Дирака.

Данная квантовая статистика в содружестве с Бозе-Эйнштейн используется тогда, когда нужно учитывать квантовые эффекты при неразличимых частицах. Эти эффекты проявляются, когда концентрация частиц составляет: N / V >= nq. И тут самое интересное, nq это квантовая концентрация, когда фоновые функции частиц соприкасаются, но не перекрывают друг друга.

Довольно непростая теория, как и вся квантовая физика, но довольно четко описывает вышеупомянутые фермибаги.

Фомбаг (Phase of the Moon bug)



Еще можно сказать «баг фазы Луны». Данный баг проявляет себя только в определенное время, с определенной периодичностью. К примеру, каждый вторник или каждого 15-ого числа месяца или каждые 43 минуты.

Шрёдинбаг (Schroedinbug)



Очень необычный баг, который появляется внезапно и так же внезапно приводит к падению программы. Когда мы его не наблюдаем, он все же есть, но бездействует. Стоит нам его обнаружить, как он становится активным. И его приходится, естественно, ликвидировать.

Свойства бага, как и его название, наталкивают нас на мысли про кота. Не простого, дерущего обои, а про кота Шрёдингера — эксперимент австрийского физика Эрвина Шрёдингера.

Данный теоретический эксперимент был описан самим Шрёдингером довольно подробно и сложно, в какой-то степени. Упрощенный вариант звучит так:

Есть стальная коробка. В коробке кот и механизм. Механизм — счетчик Гейгера с очень малым количеством радиоактивного вещества. Данное вещество так мало, что за 1 час может распасться 1 атом (а может и не распасться). Если это происходит, то считывающая трубка счетчика разряжается и срабатывает реле, освобождающее молоток, который висит над колбой с ядом. Колба разбивается, и яд убивает кота.

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

Очень интересный эксперимент, раздвигающий границы квантовой физики.

Еще более необычным можно считать парадокс Вигнера. К всем вышеуказанным переменным эксперимента добавляются некие друзья лаборанта, что проводит данный эксперимент. Когда он открывает коробку и узнает точное состояние кота, его товарищ, находясь в другом месте, этого состояния не знает. Первый должен сообщить второму, что кот жив или мертв. Таким образом, пока все во Вселенной не будут знать точного состояния бедного животного, оно будет считаться и мертвым, и живым одновременно.

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

Цепной баг (Counterbug)



Этот баг еще можно сравнить с детской игрой в квача, когда мы ловили кого-то и кричали «Передай дальше!». Так и тут. Суть и деятельность данного бага нельзя объяснить ни письменно, ни вербально. Человек должен сам увидеть его своими собственными глазами. Таким образом, чтобы кто-то еще смог ознакомиться с вышеупомянутой ошибкой, он должен привести этого человека и показать ему баг лично.

Баг Лох-Несс / Бигфутбаг (Loch Ness bug / Bigfoot-bug)



Про данные баги можно было бы снимать отдельный эпизод сериала «Секретные материалы». Его видел только один человек, он утверждает, что баг существует, но доказательств у него может и не быть. Даже создатель кода не может найти никаких признаков этого мистического бага. И ему остаться только сказать себе: «The truth is out there».

Гидробаг (Hydra Bug)



Древнегреческий спарринг-партнер Геракла. По преданию, это создание с множеством голов обладало невероятной регенерацией — отсудил ей одну голову, выросло 2. С гидробагами то же самое. Ликвидация одного бага приводит к возникновению нового, а порой и не одного.

Багсон Хиггса (Higgs-Bugson)



Чисто теоретический баг. Его существование доказывают неправдоподобные отчеты пользователей и лог-файлы. Программисту крайне сложно обнаружить данный баг на своей машине, так как он не знает наверняка если ли данный баг вообще или нет.

Название это отсылка к Бозону Хиггса — элементарной частице, поисками которой занимаются в CERNе (Европейская организация по ядерным исследованиям).

Гиндербаг (Hindenbug)



Баг, который приводит к ужасающим последствиям, как правило, к полной потере данных. Имя взято от названия дирижабля Гинденбург, сгоревшего в 1937 году 6 мая. Данная трагедия забрала жизни 35 человек и привела к серьезным обсуждениям существования дирижаблей, как вида транспорта.

Баг «бумажный пакет» (Brown-paper-bag bug)



Данный баг выходит на публику вместе с публичным выпуском программы. Он настолько очевиден, что автору кода приходиться от стыда одеть на голову бумажный пакет и спрятаться от общества на несколько дней. (фигурально выражаясь, конечно)

Баг «режим ученика волшебника» (Sorcerer’s apprentice mode bug)



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

Название взято из эпизода анимированного фильма « Fantasia» (компания Walt Disney, 1940 год). В нем Микки Мауса выступает в качестве ученика волшебника, который поручил мышонку убрать в доме. Микки решает использовать магию, которая в его неумелых руках приводит к катастрофическим последствиям для него и уморительной сцене для зрителей. (тем, кто не знаком с данным мультфильмом, рекомендую посмотреть)

Баг «Обиженная девушка» (Mad girlfriend bug)



Это баг, воздействие которого на программу остается неясным, при этом сама программа работает верно, вроде бы. Как часто бывает с девушками, которые обижаются, но на вопрос «Ты обиделась?» отвечаю «Все нормально.» (обычно сопровождается суровым взглядом, проделывающем дыры в голове парня)

Экскалибур-баг (Excalibur bug)



Если в коде есть баг, который безуспешно пытались ликвидировать все члены команды, он именуется Экскалибур, ну или Мьёльнир, кому какая мифология больше по вкусу.

Эпилог



Я более чем уверен, что в данной статье были перечислены далеко не все необычные и креативные типы багов. Нет предела человеческому воображению, как говорится. Возможно вы знаете другие типы багов или сталкивались с такими, которые нельзя отнести ни к одной из вышеперечисленных категорий. Если так, то давайте придумаем свое название для этого уникального бага. Кто знает, может оно пойдет в массы. А на этом на сегодня все. Приятного всем дня и помните между багом и фичей всегда есть грань, вопрос только в ее толщине.

На правах рекламы.Это не просто виртуальные серверы! Это VPS (KVM) с выделенными накопителями, которые могут быть не хуже выделенных серверов, а в большинстве случаев — лучше! Мы сделали VPS (KVM) c выделенными накопителями в Нидерландах и США (конфигурации от VPS (KVM) — E5-2650v4 (6 Cores) / 10GB DDR4 / 240GB SSD или 4TB HDD / 1Gbps 10TB доступными по уникально низкой цене — от $29 / месяц, доступны варианты с RAID1 и RAID10), не упустите шанс оформить заказ на новый тип виртуального сервера, где все ресурсы принадлежат Вам, как на выделенном, а цена значительно ниже, при гораздо более производительном «железе»!

Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки? Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США!

Комментарии (9)


  1. VaskivskyiYe
    25.12.2017 12:35

    И тут самое интересное, nq это квантовая концентрация, когда фоновые функции частиц соприкасаются, но не перекрывают друг друга


    Если удалить глупости или переписать таки правильно, то будет даже интересно читать. А вообще, как программисты считают, что нечего кому попало лезть в программирование, так стоит им самим делать и с другими областями знаний


  1. vilgeforce
    25.12.2017 13:15

    Hemiptera не жуки, а клопы. Жуки — Coleoptera или жесткокрылые по-русски.


  1. pda0
    25.12.2017 13:36

    Бозону Хиггса — элементарной частице, поисками которой занимаются в CERN
    Занимаются? Эта статья какого года? До выпуска Windows 95 или позже?


  1. AlekDikarev
    26.12.2017 03:11

    Что я только что прочитал? Особенно конец с рекламой. Вся статья — как необходимый борщ, после которого можно таки ребёнку десерт — влепить рекламу.


  1. Aingis
    26.12.2017 13:50

    Ожидал примеры багов, судя по названию, а тут банальная уже давно опостылевшая классификация.


    1. pda0
      26.12.2017 23:21

      При этом она даже не настолько древняя, чтобы стать классикой. Где, я их спрашиваю, битовый распад? ;-)


  1. pasetchnik
    26.12.2017 15:32

    Есть еще такой тип (не помню как называется):
    Критический баг, после обнаружения которого программа перестает работать. И неясно, как же она работала раньше — до его обнаружения.


  1. OldGrumbler
    26.12.2017 21:43

    Странно, что в классификацию не вошла багофича — баг, придающий программе новые, неожиданные и, зачастую, более полезные функции, чем планировал разработчик )))


  1. Stalinko
    28.12.2017 21:37

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