Баг

Поделись знанием:
(перенаправлено с «Ошибка (программирование)»)
Перейти к: навигация, поиск

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

Термин «баг» обычно употребляется в отношении ошибок, проявляющих себя на стадии работы программы, в отличие, например, от ошибок проектирования или синтаксических ошибок. Отчет, содержащий информацию о баге также называют отчетом об ошибке или отчетом о проблеме (англ. bug report). Отчет о критической проблеме (англ. crash), вызывающей аварийное завершение программы, называют крэш-репортом (англ. crash report).

«Баги» локализуются и устраняются в процессе тестирования и отладки программы.





Этимология термина «баг»

В значении неуловимой технической ошибки слово жучок (англ. bug) употреблялось задолго до появления компьютеров персоналом телеграфных и телефонных компаний в отношении неполадок с электрооборудованием и радиотехникой. В 1878 году Томас Эдисон писал[1]:

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

Во время Второй мировой войны словом «bugs» назывались проблемы с радарной электроникой.

По одной из версий, в отношении программной ошибки этот термин впервые был применен 9-го сентября 1947-го года Грейс Хоппер, которая работала в Гарвардском университете с вычислительной машиной Harvard Mark II (англ.). Проследив возникшую ошибку в работе программы до электромеханического реле машины, она нашла между замкнувшими контактами сгоревшего мотылька. Извлечённое насекомое было вклеено скотчем в технический дневник с сопроводительной иронической надписью: «Первый реальный случай обнаружения жучка» (англ. First actual case of bug being found)[2].

Значение и классификация ошибок программного обеспечения

В зависимости от этапа разработки ПО, на котором выявляется ошибка выделяют:

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

По размеру:

  • Showstoppers;
  • Серьёзные;
  • Незначительные баги;

По времени появления:

  • Постоянно, при каждом запуске;
  • Иногда («плавающий» тип);
  • Только на машине у клиента (зависит от локальных настроек у клиента);

По месту и направлению:

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

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

Также ошибка может проявляться в виде уязвимости, делающей возможным несанкционированный доступ к системе или DoS-атаку.

Разновидности

  • Борбаг — легко обнаруживаемый стабильный баг
  • Гейзенбаг — сложно обнаруживаемый, периодически исчезающий и меняющий свойства баг при попытке его обнаружения
  • Мандельбаг — баг с очень сложным, хаотичным, поведением
  • Шрёдинбаг — критическая ошибка, которая не проявляется пока кто-нибудь на неё не наткнется в исходном коде, после чего программа совершенно перестает работать

Поиск и исправление ошибок

Для отладки программы (англ. debugging) разработчиками ПО используются специальные программы-отладчики (англ. debugger). Например, в операционной системе Windows можно использовать программу WinDbg из пакета Microsoft Debugging Tools for Windows. Для GNU/Linux и ряда других UNIX-подобных операционных систем существует отладчик GDB (GNU Debugger).

Отчёты об ошибках

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

Например, в операционную систему Windows встроена утилита Dr. Watson, которая по умолчанию отлавливает ошибки в приложениях пользователя и отправляет отчёт на специальный Сервер компании Microsoft. Также в качестве примера можно привести аналогичные библиотеки Breakpad[3] и CrashRpt[4].

Последствия

  • Катастрофа Ariane 5 (4 июня 1996) — один из самых дорогостоящих компьютерных багов в истории.
  • Ошибки в программном обеспечении медицинского ускорителя Therac-25 привели к превышению доз облучения нескольких людей.

См. также

В Викисловаре есть статья «баг»

Напишите отзыв о статье "Баг"

Примечания

  1. Источник: Edison to Puskas, 13 ноября 1878, Edison papers, Edison National Laboratory, U.S. National Park Service, West Orange, N.J., цитируется по книге Томаса П. Хьюджеса (Thomas P. Hughes), American Genesis: A History of the American Genius for Invention, Penguin Books, 1989, стр.
  2. [ei.cs.vt.edu/~history/Hopper.Danis.html Danis, Sharron Ann: "Rear Admiral Grace Murray Hopper"]. ei.cs.vt.edu (16, 1997-02-16). Проверено 20 января 2015.
  3. [code.google.com/p/google-breakpad/ Breakpad]. Google. Проверено 11 августа 2009. [www.webcitation.org/65BVpLx0D Архивировано из первоисточника 3 февраля 2012].
  4. [code.google.com/p/crashrpt CrashRpt]. [www.webcitation.org/65BVpoNyr Архивировано из первоисточника 3 февраля 2012].

Ссылки

  • [www.nestor.minsk.by/kg/2009/34/kg93401.html Уязвимости в исходных кодах], «Компьютерная газета». Продолжение: [www.nestor.minsk.by/kg/2009/35/kg93506.html Уязвимости в исходных кодах]. Перепечатка: [ib.sa-sec.org/?p=664 1 часть], [ib.sa-sec.org/?p=666 2 часть].
  • [copypast.ru/2010/02/15/10_khudshikh_oshibok_v_programmirovanii_v_istorii_chelovechestva.html 10 худших ошибок в программировании в истории человечества]
  • [cwe.mitre.org/top25/ 2010 CWE/SANS Top 25 Most Dangerous Software Errors] частичный перевод на русский [www.opennet.ru/opennews/art.shtml?num=19763 25 самых опасных ошибок при создании программ]
  • [www.viva64.com/ru/examples/ Ошибки, обнаруженные в Open Source проектах разработчиками PVS-Studio с помощью статического анализа]. Можно найти полезные примеры при подготовки статей и презентаций.

Отрывок, характеризующий Баг

– Ну ка ты, силач, – обратился он к Пьеру.
Пьер взялся за перекладины, потянул и с треском выворотип дубовую раму.
– Всю вон, а то подумают, что я держусь, – сказал Долохов.
– Англичанин хвастает… а?… хорошо?… – говорил Анатоль.
– Хорошо, – сказал Пьер, глядя на Долохова, который, взяв в руки бутылку рома, подходил к окну, из которого виднелся свет неба и сливавшихся на нем утренней и вечерней зари.
Долохов с бутылкой рома в руке вскочил на окно. «Слушать!»
крикнул он, стоя на подоконнике и обращаясь в комнату. Все замолчали.
– Я держу пари (он говорил по французски, чтоб его понял англичанин, и говорил не слишком хорошо на этом языке). Держу пари на пятьдесят империалов, хотите на сто? – прибавил он, обращаясь к англичанину.
– Нет, пятьдесят, – сказал англичанин.
– Хорошо, на пятьдесят империалов, – что я выпью бутылку рома всю, не отнимая ото рта, выпью, сидя за окном, вот на этом месте (он нагнулся и показал покатый выступ стены за окном) и не держась ни за что… Так?…
– Очень хорошо, – сказал англичанин.
Анатоль повернулся к англичанину и, взяв его за пуговицу фрака и сверху глядя на него (англичанин был мал ростом), начал по английски повторять ему условия пари.
– Постой! – закричал Долохов, стуча бутылкой по окну, чтоб обратить на себя внимание. – Постой, Курагин; слушайте. Если кто сделает то же, то я плачу сто империалов. Понимаете?
Англичанин кивнул головой, не давая никак разуметь, намерен ли он или нет принять это новое пари. Анатоль не отпускал англичанина и, несмотря на то что тот, кивая, давал знать что он всё понял, Анатоль переводил ему слова Долохова по английски. Молодой худощавый мальчик, лейб гусар, проигравшийся в этот вечер, взлез на окно, высунулся и посмотрел вниз.
– У!… у!… у!… – проговорил он, глядя за окно на камень тротуара.
– Смирно! – закричал Долохов и сдернул с окна офицера, который, запутавшись шпорами, неловко спрыгнул в комнату.
Поставив бутылку на подоконник, чтобы было удобно достать ее, Долохов осторожно и тихо полез в окно. Спустив ноги и расперевшись обеими руками в края окна, он примерился, уселся, опустил руки, подвинулся направо, налево и достал бутылку. Анатоль принес две свечки и поставил их на подоконник, хотя было уже совсем светло. Спина Долохова в белой рубашке и курчавая голова его были освещены с обеих сторон. Все столпились у окна. Англичанин стоял впереди. Пьер улыбался и ничего не говорил. Один из присутствующих, постарше других, с испуганным и сердитым лицом, вдруг продвинулся вперед и хотел схватить Долохова за рубашку.
– Господа, это глупости; он убьется до смерти, – сказал этот более благоразумный человек.
Анатоль остановил его:
– Не трогай, ты его испугаешь, он убьется. А?… Что тогда?… А?…
Долохов обернулся, поправляясь и опять расперевшись руками.
– Ежели кто ко мне еще будет соваться, – сказал он, редко пропуская слова сквозь стиснутые и тонкие губы, – я того сейчас спущу вот сюда. Ну!…
Сказав «ну»!, он повернулся опять, отпустил руки, взял бутылку и поднес ко рту, закинул назад голову и вскинул кверху свободную руку для перевеса. Один из лакеев, начавший подбирать стекла, остановился в согнутом положении, не спуская глаз с окна и спины Долохова. Анатоль стоял прямо, разинув глаза. Англичанин, выпятив вперед губы, смотрел сбоку. Тот, который останавливал, убежал в угол комнаты и лег на диван лицом к стене. Пьер закрыл лицо, и слабая улыбка, забывшись, осталась на его лице, хоть оно теперь выражало ужас и страх. Все молчали. Пьер отнял от глаз руки: Долохов сидел всё в том же положении, только голова загнулась назад, так что курчавые волосы затылка прикасались к воротнику рубахи, и рука с бутылкой поднималась всё выше и выше, содрогаясь и делая усилие. Бутылка видимо опорожнялась и с тем вместе поднималась, загибая голову. «Что же это так долго?» подумал Пьер. Ему казалось, что прошло больше получаса. Вдруг Долохов сделал движение назад спиной, и рука его нервически задрожала; этого содрогания было достаточно, чтобы сдвинуть всё тело, сидевшее на покатом откосе. Он сдвинулся весь, и еще сильнее задрожали, делая усилие, рука и голова его. Одна рука поднялась, чтобы схватиться за подоконник, но опять опустилась. Пьер опять закрыл глаза и сказал себе, что никогда уж не откроет их. Вдруг он почувствовал, что всё вокруг зашевелилось. Он взглянул: Долохов стоял на подоконнике, лицо его было бледно и весело.
– Пуста!
Он кинул бутылку англичанину, который ловко поймал ее. Долохов спрыгнул с окна. От него сильно пахло ромом.
– Отлично! Молодцом! Вот так пари! Чорт вас возьми совсем! – кричали с разных сторон.
Англичанин, достав кошелек, отсчитывал деньги. Долохов хмурился и молчал. Пьер вскочил на окно.
Господа! Кто хочет со мною пари? Я то же сделаю, – вдруг крикнул он. – И пари не нужно, вот что. Вели дать бутылку. Я сделаю… вели дать.
– Пускай, пускай! – сказал Долохов, улыбаясь.
– Что ты? с ума сошел? Кто тебя пустит? У тебя и на лестнице голова кружится, – заговорили с разных сторон.
– Я выпью, давай бутылку рому! – закричал Пьер, решительным и пьяным жестом ударяя по столу, и полез в окно.
Его схватили за руки; но он был так силен, что далеко оттолкнул того, кто приблизился к нему.
– Нет, его так не уломаешь ни за что, – говорил Анатоль, – постойте, я его обману. Послушай, я с тобой держу пари, но завтра, а теперь мы все едем к***.
– Едем, – закричал Пьер, – едем!… И Мишку с собой берем…
И он ухватил медведя, и, обняв и подняв его, стал кружиться с ним по комнате.


Князь Василий исполнил обещание, данное на вечере у Анны Павловны княгине Друбецкой, просившей его о своем единственном сыне Борисе. О нем было доложено государю, и, не в пример другим, он был переведен в гвардию Семеновского полка прапорщиком. Но адъютантом или состоящим при Кутузове Борис так и не был назначен, несмотря на все хлопоты и происки Анны Михайловны. Вскоре после вечера Анны Павловны Анна Михайловна вернулась в Москву, прямо к своим богатым родственникам Ростовым, у которых она стояла в Москве и у которых с детства воспитывался и годами живал ее обожаемый Боренька, только что произведенный в армейские и тотчас же переведенный в гвардейские прапорщики. Гвардия уже вышла из Петербурга 10 го августа, и сын, оставшийся для обмундирования в Москве, должен был догнать ее по дороге в Радзивилов.
У Ростовых были именинницы Натальи, мать и меньшая дочь. С утра, не переставая, подъезжали и отъезжали цуги, подвозившие поздравителей к большому, всей Москве известному дому графини Ростовой на Поварской. Графиня с красивой старшею дочерью и гостями, не перестававшими сменять один другого, сидели в гостиной.
Графиня была женщина с восточным типом худого лица, лет сорока пяти, видимо изнуренная детьми, которых у ней было двенадцать человек. Медлительность ее движений и говора, происходившая от слабости сил, придавала ей значительный вид, внушавший уважение. Княгиня Анна Михайловна Друбецкая, как домашний человек, сидела тут же, помогая в деле принимания и занимания разговором гостей. Молодежь была в задних комнатах, не находя нужным участвовать в приеме визитов. Граф встречал и провожал гостей, приглашая всех к обеду.
«Очень, очень вам благодарен, ma chere или mon cher [моя дорогая или мой дорогой] (ma сherе или mon cher он говорил всем без исключения, без малейших оттенков как выше, так и ниже его стоявшим людям) за себя и за дорогих именинниц. Смотрите же, приезжайте обедать. Вы меня обидите, mon cher. Душевно прошу вас от всего семейства, ma chere». Эти слова с одинаковым выражением на полном веселом и чисто выбритом лице и с одинаково крепким пожатием руки и повторяемыми короткими поклонами говорил он всем без исключения и изменения. Проводив одного гостя, граф возвращался к тому или той, которые еще были в гостиной; придвинув кресла и с видом человека, любящего и умеющего пожить, молодецки расставив ноги и положив на колена руки, он значительно покачивался, предлагал догадки о погоде, советовался о здоровье, иногда на русском, иногда на очень дурном, но самоуверенном французском языке, и снова с видом усталого, но твердого в исполнении обязанности человека шел провожать, оправляя редкие седые волосы на лысине, и опять звал обедать. Иногда, возвращаясь из передней, он заходил через цветочную и официантскую в большую мраморную залу, где накрывали стол на восемьдесят кувертов, и, глядя на официантов, носивших серебро и фарфор, расставлявших столы и развертывавших камчатные скатерти, подзывал к себе Дмитрия Васильевича, дворянина, занимавшегося всеми его делами, и говорил: «Ну, ну, Митенька, смотри, чтоб всё было хорошо. Так, так, – говорил он, с удовольствием оглядывая огромный раздвинутый стол. – Главное – сервировка. То то…» И он уходил, самодовольно вздыхая, опять в гостиную.