Почему ошибки называют багами

#статьи


  • 0

Краш-курс по происхождению самых известных терминов цифрового мира.

Кирилл Молоков

Филолог, полиглот, IT-гик. В прошлом — преподаватель английского и литературы и рецензент Rolling Stone Russia. Ныне переводит для РБК и пишет о программировании и образовании для Skillbox.

Большинство IT-терминов пришло из английского языка. Но как они появились и почему эти английские слова в переводе означают вещи, которые никак не относятся к программированию и интернету?

Разбираемся, почему информацию хранят в облаке и как японское печенье с предсказаниями стало неотъемлемой частью рациона для большинства интернет-пользователей.

Баг (англ. bug — жук) — ошибка в программе.

Слово «баг» в значении «техническая неисправность» употребляли ещё в 1870-х. Тогда телеграфисты и телефонисты называли так помехи и неисправности в связи. Работники с большим трудом «ловили» и устраняли эти неполадки, которые надоедали, как назойливые жучки.

В значении «программная ошибка» слово впервые употребили в 1947 году. Инженеры, работавшие в Гарварде с компьютером Mark II, обнаружили в повреждённом компоненте машины сгоревшего мотылька, из-за которого и случилось замыкание. Насекомое извлекли и вклеили в журнал с символичной пометкой: «первый реальный случай обнаружения бага».

Тот самый вклеенный мотылёк и запись в журнале. Фото: Harvard University / IBM / National Museum of American History

Патч (англ. patch — накладка, заплата) — обновление или дополнение к программе.

Термин появился в эпоху перфокарт — главных носителей информации 1920–1950-х. Данные на них кодировали с помощью специальных отверстий. Чтобы изменить программу, приходилось накладывать заплатки на уже продырявленные места.

Патч на перфоленте первого программируемого компьютера — Mark I. Фото: ArnoldReinhold / Wikimedia Commons

Облачное хранилище данных, или просто облако (англ. cloud storage — облачное хранилище), — онлайн-хранилище данных.

Слово «облако» в значении «онлайн-хранилище» ещё в 1994 впервые использовали AT&T в рекламе нового сервиса PersonaLink Services. Тогда нужно было быстрее привлечь инвесторов и продвинуть проект в массы, поэтому разработчики использовали метафору, которая доступно объясняла принцип работы инновации: данные хранятся не у вас дома, а где-то там, в облаках. Кстати, рисунок хранилища на патенте тоже напоминает облако.

Патент на облачное хранилище данных. Изображение: US5485455A / Google Patents

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

Куки появились в IT-жаргоне благодаря печеньям с предсказаниями — кондитерским изделиям, внутри которых запекают записку с афоризмами и вариантами событий в будущем. Вопреки распространённому мнению, печенье в США завезли не китайские, а японские иммигранты. Позднее эти сладости «перекочевали» в сленг программистов: данные, которые сервер передаёт пользователю, стали называть cookies. Это слово очень ёмко и доступно объясняло принцип работы файлов, содержащих готовую, предсказуемую информацию.

Те самые cookies, о которых сайты предупреждают нас всё чаще и чаще. Фото: UngureanuCristi / Shutterstock

Спам (англ. spam — спам) — массовая рассылка сообщений.

История термина начинается в 1937-м. Тогда в США была основана торговая марка консервов SPAM, которая, по одной версии, расшифровывается как SPiced hAM, а по другой — как Shoulders of Pork and hAM. После Второй мировой войны SPAM вела агрессивную рекламную кампанию, чтобы сбыть залежавшуюся продукцию. Название торговой марки очень скоро стало нарицательным — им стали обозначать любую навязчивую рекламу.

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

Спам, спам, спам, спам… Фото: Eduardo Unda-Sanzana / Wikimedia Commons

Робот (от чеш. robota — барщина, тяжёлая работа) — автоматизированное устройство, которое действует по определённой программе.

Любопытно, но одно из самых популярных слов IT-мира пришло не из английского, а из чешского языка. Термин «робот» ввёл писатель Карел Чапек. В 1920 он написал пьесу «Р.У.Р.» («Россумские универсальные роботы») — действие происходит на фабрике, где производят «искусственных людей». Писатель всё не мог придумать, как попроще назвать этих существ, поэтому обратился к брату, Йозефу Чапеку, который и предложил образовать неологизм от чешского слова robota.

Именно так выглядело первое художественное восстание роботов. Фото: Public Domain / Wikimedia Commons

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

На самом деле IT-индустрия никогда не противопоставлялась творчеству. Напротив, прокачанное образное мышление помогает стать первоклассным айтишником. Оно напрямую влияет на умение планировать и моделировать — важный навык программистов и инженеров.

Кроме того, метафоры позволяют лучше понимать абстрактные явления и решать проблемы, для которых ещё нет готовых алгоритмов. Художественность языка упрощает и само общение — ускоряет работу внутри коллектива. Иными словами, образный язык в IT-словаре — это вовсе не парадокс, а закономерность.

Как зарабатывать больше с помощью нейросетей?
Бесплатный вебинар: 15 экспертов, 7 топ-нейросетей. Научитесь использовать ИИ в своей работе и увеличьте доход.

Узнать больше

Почему ошибки программ называют багами или что вы не знаете о сленге Эдисона и Азимова

Первый компьютерный баг можно увидеть своими глазами. Это не шутка: он хранится в Национальном музее американской истории.

Инженеры начали называть проблемы техники «багами» ещё в XIX веке, с зарождением электрики.

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


РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

Великий Эдисон называл ошибки багами

«Википедия» приводит фрагмент его письма от 1878 года к одному из ассистентов: «…по мере того, как сложности возрастают, этот (эффект) начинает проявляться и вот тогда-то баги — так называют мелкие неполадки- начинают возникать».

В 1944 году это слово снова встречается, на этот раз в рассказе «Как поймать кролика» из цикла «Я, Робот» писателя-фантаста Айзека Азимова. 

У компьютерщиков баг изначально тоже считался проблемой железа, а не софта. Если верить, опять же, Википедии, одной из первых его могла употребить Грейс Хоппер, один из пионеров электромеханических компьютеров. В 1946 году компьютер Mark II, на котором она работала в университете Гарварда, в очередной раз забарахлил. Причиной оказалась бистон бетулярия, или берёзовая пяденица — ночной мотылёк, забравшийся в корпус.


РЕКЛАМА – ПРОДОЛЖЕНИЕ НИЖЕ

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

Типы багов: этимология и энтомология

Время на прочтение
4 мин

Количество просмотров 47K

Какие бывают баги

1. Немного этимологии и энтомологии
Давайте посмотрим попристальней на такое знакомое и (до боли?) родное слово БАГ. Происходит оно от английского слова Bug, означающего «насекомое». Есть еще много сторонних значений, в частности английское выражение «to go bugs» — сойти с ума, что легко кореллируется со вполне русским «тараканы в голове завелись». Также вспоминаются и «жучки на линии» (тоже, кстати, по-английски – bugs). И опять мы пришли к насекомым.

Еще в 1878 году, Томас Альва Эдисон (да-да, тот самый!) в письмах к своему соратнику Пускасу писал: «It has been just so in all of my inventions. The first step is an intuition, and comes with a burst, then difficulties arise — this thing gives out and [it is] then that ‘Bugs’ — as such little faults and difficulties are called — show themselves and months of intense watching, study and labor are requisite before commercial success or failure is certainly reached». Тем же словом, инженеры называли и сбои радарной электроники во время второй Мировой Войны. Конечно, более распространена история о том, что в 1946 году разработка компьютера Марк-2 (Mark-II) были приостановлена из-за сбоя его функционирования, вызванного попаданием мотылька между контактов. Трупик мотылька был извлечен и приклеен к отчету липкой лентой с комментарием «First actual case of bug being found.» («Первый реальный случай нахождения жучка»). Как нетрудно догадаться, примерно оттуда же «растут уши» и слова «дебаггер» (debugger) – буквально «избавитель от жучков».

2. Виды багов.
Простейший (не как инфузория-туфелька, а самый простой для понимания, модно сказать «классический») баг – это несоответствие между ожидаемым результатом (ОР) и фактическим результатом (ФР). Разберем это на примере:

Действия Ожидаемый результат Фактический результат
Ввести в ячейку выражение «=2+2*2» (без кавычек) и нажать ENTER 6 8 БАГ!!!!

(это, кстати, реальный баг старого Microsoft Excel – он не учитывал приоритета математических операций, по которому умножение имеет высший приоритет по сравнению со сложением)

Все просто. Ждем одно – получаем другое. Баг.
Я не буду перечислять все подвиды бага классического – от опечаток в данных и опечаток в коде до бесконечных циклов, от использования оператора присвоения вместо оператора проверки равенства до использования неинициализированной переменной, от состояния гонки (race condition) в мультипоточных приложения до переполнения буфера, и так далее, и тому подобное – все это достаточно обыденные и ясные явления. Обратимся к малознакомой экзотике.

2.1. Гейзенбаг (Heisenbug)
Баг, названный в честь Гейзенбергского Принципа неопределенности – концепции квантовой физики. Простым (хоть слово «просто» здесь и не очень применимо) примером подобного бага будет являться ошибка, проявляющаяся, когда программа запускается на исполнение в рабочей среде, но исчезающая, когда программу запускают в дебаггере.

2.2. Борбаг (Bohrbug)
Тип бага, названный так в честь атомной модели Бора. В противоположность Гейзенбагу, он проявляется постоянно при одном и том же стечении обстоятельств. Вопрос в том, что весь набор обстоятельств бывет невозможно (или очень трудно) отследить.

2.3. Мандельбаг (Mandelbug)
Назван в честь Бенуа Мандельброта, внесшего огромный вклад в теорию фракталов. Мандельбагами называют ошибки, чьи причины настолько сложны и неясны, что фактически кажутся хаотичными и не поддающимися описаниями. (ключевое слово «кажутся»). Подобное, может быть вызвано, например, медленной реакцией системы – то есть ошибка уже произошла, но об этом вы узнаете только через некоторое время, что сильно затруднит локализацию причин.

2.4. Шрединбаг (Schroedinbug)
Шрединбаг назван в честь известного парадокса с кошкой Шредингера (или эта несчастная животина – кот?). Он заключается в том, что кто-нибудь читает код программы (работающей уже некоторое время) и восклицает «Да этого не может быть! Она просто не может функционировать!», после чего программа прекращает свое функционирование пока данная ошибка не будет исправлена. Будучи, казалось бы, абсолютно фантастической, данная ошибка попадается в реальности – спросите знакомых ветеранов- разработчиков, они подтвердят. Хотя, конечно, последующий анализ, как правило, позволяет отнести ошибку к разделам 2.1, 2.2 или 2.3, это удается не всегда.

2.5. Фазы луны
На самом деле такой ошибки не существует – это популярная отговорка тех, кто не хочет (не имеет желания и/или времени) разбираться в сложных причинах возникновения ошибки. Тем не менее, в истории существует пара примеров, когда ошибки возникали буквально из-за фаз луны. Я не буду приводить здесь эти истории, надеясь, что никому из нас не придется работать со столь сложными устройствами. Тем не менее, в любом случае, хотелось бы предостеречь всех от неосторожных умозаключений и попросить быть более внимательными, настойчивыми и скрупулезными в своей работе.

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

2.7. Демонстрационный эффект.
Ну и конечно, известный всем, «эффект первого показа», не раз случавшийся и с вашим покорным слугой. Как только приходит пора показать, например, прекрасно функционировавший на тестовом стенде юнит, обязательно происходит что-то ужасное. Причны, как правило, тривиальны – пропуск «незначительных» тест-кейсов, невнимательность к деталям и неучтенные юз-кейсы. Опять же – будьте внимательней.

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



Где используется термин?
Сегодня каждому известно, что такое баг. И если изначально слово было характерно для области инженерии и работы с компьютерами, то затем этот синоним «ошибки» без проблем проник в обыденную жизнь.



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

В статье рассказывается:

  1. Происхождение термина «баг»
  2. Где появляются баги
  3. Классификация ошибок в программировании
  4. Необходимость борьбы с багами
  5. Пройди тест и узнай, какая сфера тебе подходит:
    айти, дизайн или маркетинг.

    Бесплатно от Geekbrains

Происхождение термина «баг»

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

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

Происхождение термина «баг»

Происхождение термина «баг»

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

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

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

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

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

pdf иконка

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

doc иконка

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

pdf иконка

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

Уже скачали 22633 pdf иконка

В компьютерную терминологию «баг» вошел из сленга инженеров, которые называли этим словом ошибки при работе электронных схем. В 1947 году разработчик первого в мире компилятора Грейс Хоппер обнаружила внутри компьютера Mark II бабочку, послужившую причиной короткого замыкания. Это событие было затем зафиксировано в журнале происшествий как «первый случай, когда был найден настоящий баг». Таким образом термин прочно закрепился сфере IT.

Где появляются баги

  • В процессе разработки и тестирования ПО программисты периодически сталкиваются с багами. Современные программы достаточно сложны, а языки программирования обладают множеством неочевидных моментов. Оба этих фактора напрямую способствует возникновению непреднамеренных ошибок. Чаще всего баги появляются из-за неправильного использования команд, неверной реализации алгоритмов, а также по причине допущенных ошибок в дизайне ПО. Иногда необходимость в дебаггинге появляется еще на этапе разработки. В других случаях баги обнаруживаются лишь во время тестирования или даже после выпуска продукта.
  • Даже протестированные и выпущенные на рынок программы нередко содержат баги. Часть из них получает определенную известность. Так у багов появляются запоминающиеся имена. В других же случаях мы имеем дело с достаточно редкими и даже уникальными прецедентами. Зачастую вероятность появления бага зависит от внешних факторов, таких как версия операционной системы, в которой выполняется программа.
  • Ошибки нередко содержатся и в компьютерных играх. Это заметно по некорректной реализации игровых сцен и персонажей. Например, дверь из одной локации в другую не открывается, интерактивные объекты застревают в текстурах и не могут сдвинуться с места, либо игра просто-напросто вылетает с ошибкой. Даже культовые игровые продукты, уже выпущенные на рынок, могут в итоге оказаться забагованными.

Где появляются баги

Где появляются баги
  • На сайтах. Скрипты, написанные на современных языках программирования, придают таким площадкам больше гибкости и функциональности. Фронтенд-разработчики пользуются JavaScript, а для реализации серверных функций применяются PHP, Python, Ruby и др. Однако баги могут возникать как на стороне сервера, так и на стороне клиента. Иногда их обнаруживают только после выпуска готового сайта в продакшн. Существует даже особый термин Bug bounty. Под ним понимается вознаграждение, которое разработчик выплачивает пользователю, обнаружившему критическую уязвимость в информационной безопасности.

Скачать
файл

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

Классификация ошибок в программировании

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

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

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

Степень критичности

Здесь ошибки принято разделять на:

  • незначительные,
  • серьезные,
  • критические.

Дарим скидку от 60%
на обучение «Инженер-программист» до 24 сентября

Уже через 9 месяцев сможете устроиться на работу с доходом от 150 000 рублей

Забронировать скидку


Последнюю категорию также называют showstoppers. К ней относятся наиболее критические проблемы, которые практически всегда приводят к остановке работы программы. Например, становится невозможной авторизация по логину и паролю, или отсутствует реакция системы на нажатие на кнопку «Далее». Данные ошибки имеют наибольший приоритет отладки.

Частота проявления

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

Условия использования программы

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

Условия использования программы

Условия использования программы

Сложность ошибки

Существует 4 уровня ошибок:

Наиболее легко обнаруживается борбаг (Bohr Bug). Ошибки данного типа видны еще на стадии отладки или тестирования.

Уровнем выше находятся гейзенбаг (Heisenbug). Такие сбои возникают периодически и иногда пропадают сами собой. Их свойства при этом меняются в зависимости как от программной, так и от аппаратной составляющей.

Фреймворк: особенности, преимущества, архитектура

Читайте также

Ошибки мандельбаг (Mandelbug) уже приводят к непредсказуемому результату.

Наиболее критическими являются шрединбаг (Schroedinbug). Эти баги хотя и могут быть незаметными, способны повысить риск взлома программы. Вероятность возникновения ошибок из данной категории служит одной из главных причин частого обновления ОС Windows. Пользователь при этом может и не подозревать о серьезной опасности, нависшей над его компьютером. Характерным примером такой ошибки является так называемая «ошибка 2000 года» (Y2K Error), о которой, впрочем, все уже забыли.

Тип ошибки

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

Только до 25.09

Скачай подборку материалов, чтобы гарантированно найти работу в IT за 14 дней

Список документов:


ТОП-100 площадок для поиска работы от GeekBrains


20 профессий 2023 года, с доходом от 150 000 рублей


Чек-лист «Как успешно пройти собеседование»

Чтобы получить файл, укажите e-mail:

Введите e-mail, чтобы получить доступ к документам

Подтвердите, что вы не робот,
указав номер телефона:

Введите телефон, чтобы получить доступ к документам


Уже скачали 52300

Синтаксическими называют ошибки, возникшие на уровне конкретного языка программирования. Если, например, в среде Java разработчик увидит лишь предупреждения, то программист C# уже столкнется с критическим багом. Проблема легко обнаруживается и исправляется на стадии компиляции.

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

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

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

Тип ошибки

Тип ошибки

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

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

Необходимость борьбы с багами

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

Чек-лист: суть, основные форматы, правила составления

Читайте также

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

Ошибки в ПО могут привести к трагедиям (например, в медицинском оборудовании) или к потере крупных сумм денег. Так, утечка почти 90 миллионов долларов однажды произошла по вине блокчейн-компании Compound, из-за ошибки в коде сайта случайно отправившей пользователям столь огромную сумму. Но наиболее дорогостоящим признан баг, повлекший за собой в результате обычного арифметического переполнения катастрофу ракеты-носителя «Арион-5».

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

  • отладка ПО на этапе создания и написание исключений, учитывающих всевозможные внештатные ситуации;

Необходимость борьбы с багами

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

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

Что называют багом

Представьте, что вы решаете уравнение. Задача — найти x, и вы делаете всё, чтобы добиться этого: используете переменные, находите дискриминант, обращаетесь к теореме Виета. И вроде ответ найден, но когда вы подставляете значение x в уравнение, то понимаете, что ошиблись.

Примерно то же самое происходит с программистом, который запускает код, а тот не выдаёт нужный результат. Где-то закралась ошибка, и поэтому программа работает неверно. Совсем как то уравнение. Эту ошибку, которая не даёт коду работать, на сленге программистов называют багом.

Баг — это ошибка в коде, из-за которой возникает сбой программы.

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

Давайте разберём пример бага и заодно сделаем его дебаггинг. Возьмём простой код на Python. Его задача — делить одно число на другое, но мы специально сделаем условия невыполнимыми, чтобы программа работала неверно. Для этого попросим её разделить 10 на 0. Вот этот код:

def divide_numbers(num1, num2):

result = num1 / num2

print("Ответ: " + result)

divide_numbers(10,0)

Такая программа не будет работать верно: появится ошибка (ZeroDivisionError). Чтобы исправить это, мы можем добавить в код проверку деления на ноль. С ней программа сначала удостоверится, что num2 не равен нулю, и только потом начнёт вычислять. Так мы избежим программной ошибки, и код будет работать верно.

А вот исправленная версия:

def divide_numbers(num1, num2):

if num2 !=0:

result = num1 / num2

print("Ответ: " + str(result))

else:

print("Нельзя делить на ноль")

divide_numbers(10,0)

Это интересно

Термин «баг» произошёл от английского bug. Этот термин переводится как «жук» и тянется корнями в 50-е годы. Тогда создательница первого в мире компилятора Грейс Хоппер обнаружила, что у компьютера Mark II закоротило контакты из-за севшей на них бабочки.

Стартуй в программировании прямо сейчас

Реши свою первую настоящую задачу на JavaScript и поделись крутым результатом с друзьями

Стартуй в программировании прямо сейчас

Где обитают баги

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

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

На веб-страницах

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

Вот ещё несколько примеров таких багов:

  • не работают кнопки;

  • ссылки на сайте ведут не туда, куда должны;

  • опечатки в тексте;

  • смещается вёрстка на экранах разного формата;

  • неверно работают анимации и т. д.

В видеоиграх

Некоторые ошибки в играх — это лишь повод для мемов и шуток в гейм-сообществе. Многие из них выглядят забавно и не рушат удовольствие от процесса. Так, например, легендарным стал баг в Skyrim, при котором от удара великана Довакин регулярно пробовал себя в роли астронавта. Или ещё один из той же игры, который позволял надеть ведро на голову NPC, чтобы спокойно обокрасть их.

О других же багах игроки вспоминают с зубным скрежетом, потому что те делают проект неиграбельным. Так, игра Vampire: The Masquarade — Bloodlines на релизе была забагованной настолько, что играть в неё было нереально. И лишь годы спустя стараниями фанатов она заслужила свой титул шедевра RPG.

Можете быть уверены, вы наткнулись на ошибку в компьютерной игре, если заметили, что:

  • неверно отображаются текстуры;

  • игровые модели двигаются не так, как должны, или деформируются;

  • пропадает текст или аудио;

  • персонаж игрока проваливается сквозь текстуры или застревает в них;

  • пропадают или не завершаются квесты и т. д.

Когда разработчики находят ошибку, они исправляют её через патчи.

В программном обеспечении

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

Вот несколько признаков, что вы столкнулись с такой ошибкой в приложении:

  • оно зависает или вылетает;

  • неверно работают некоторые функции;

  • приложение не открывается;

  • ПО некорректно работает в конкретной операционной системе и т. д.

Новое

Что такое GitHubЧитать →

Выберите идеального наставника по программированию

15 000+ проверенных преподавателей со средним рейтингом 4,8. Учтём ваш график и цель обучения

Выберите идеального наставника по программированию

Виды багов

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

Также баги делят на виды по их сущности. Разберёмся в некоторых из них с помощью таблицы ниже.

Виды багов по их природе

Вид бага

Что означает

Пример

Функциональный

Баг, при котором действия пользователя не совпадают с их результатом

Пользователь нажимает на кнопку «Личный кабинет», а попадает в раздел «Корзина»

Визуальный

Баг, из-за которого деформируется интерфейс приложения или веб-страницы

Кнопка и её надпись разъехались в разные стороны

Логический

Баг, при котором приложение или сайт нарушают логику

Сайт разрешает установить слишком старую дату рождения, например 1700 год. Или, наоборот, дату из будущего

Дефект UX

Баг, при котором неудобно пользоваться приложением или сайтом

Слишком мелкие или близко расположенные друг к другу кнопки

Баг нагрузки

Баг, при котором приложение или сайт не справляются с большим количеством входящего трафика

Приложение социальной сети не работает или зависает из-за наплыва пользователей

Баг производительности

Баг, который делает приложение «прожорливым» до памяти, заряда и т. д.

Во время сессий в мобильной игре смартфон разряжается гораздо быстрее, чем в других играх

Как избежать багов

Баги и другие ошибки — это обыденность для разработчиков. У языков программирования слишком много нюансов, чтобы избегать их полностью. К тому же существует человеческий фактор и ещё много других, которые влияют на появление багов.

И всё же разработчики стараются сделать так, чтобы их было мало. А ещё снизить риски от них, чтобы не ставить на кон репутацию компании, персональные данные и бюджеты. Для этого они:

  • ответственно подходят к написанию кода, проверяют его на опечатки;

  • заранее закладывают в код необычные сценарии, если это возможно;

  • тестируют приложение на разные сценарии, в т. ч. на необычные;

  • проводят юнит-тестирование, где проверяют каждый отдельный элемент приложения;

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

Это важно

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

Кто спасает ПО от багов: профессия «Тестировщик»

В больших командах и студиях программисты не тестируют свои проекты сами. Этим занимаются отдельные специалисты — тестировщики. Их задача — работать с игрой, приложением или сайтом и проходить разные сценарии, которые могут произойти с пользователем. А потом следить, как поведёт себя продукт. И если случится баг, тестировщик опишет его и составит баг-репорт.

Баг-репорт — подробное сообщение об ошибке, её причинах и локализации.

На вопрос, трудно ли стать тестировщиком, ответа нет. Всё зависит от того, какое направление выберет кандидат, а ещё — от сложности проекта. Но в целом каждый тестировщик должен:

  • уметь работать с инструментами для баг-трекинга: Jira, Bugzilla и т. д.;

  • знать свой продукт — игру, приложение, программу, сайт и т. д.;

  • иметь навыки тестирования, знать классификацию багов, уметь работать с баг-репортами;

  • быть знаком с языком программирования, код на котором он тестирует.

Также, если тестировщику важно уметь оценивать производительность, стоит изучить базы данных и SQL.

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

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

Понравилась статья? Поделить с друзьями:
  • Почему плей маркет пишет произошла ошибка повторите позже
  • Почему пишет ошибка приватности и не открывает сайт
  • Почему пишет синтетическая ошибка
  • Почему ошибки делают нас сильнее
  • Почему плей маркет пишет ошибку