Сообщения об ошибках
- 1 year ago
- 0
- 0
Програ́ммная оши́бка ( арго баг от англ. bug — «жук» ) — ошибка в программе или в системе , приводящая к неожиданному поведению программы и, как следствие, выдаче некорректного результата. Большинство программных ошибок возникают из-за ошибок, допущенных разработчиками программы в её исходном коде , либо в её дизайне. Также некоторые ошибки возникают из-за некорректной работы инструментов разработчика, например из-за компилятора , вырабатывающего некорректный код.
Термин «программная ошибка» обычно употребляется для обозначения ошибок, проявляющих себя на стадии работы программы, в отличие, например, от ошибок проектирования или синтаксических ошибок. Отчет, содержащий информацию об ошибке также называют отчетом о проблеме ( англ. error report ). Отчет о критической проблеме ( англ. crash ), вызывающей аварийное завершение программы, называют ( англ. crash report ).
Программные ошибки локализуются и устраняются в процессе тестирования и отладки программы.
В значении « неуловимой технической ошибки » слово «жучок» ( англ. bug ) употреблялось задолго до появления компьютеров персоналом телеграфных и телефонных компаний в отношении неполадок с электрооборудованием и радиотехникой. В 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.
Во время Второй мировой войны словом bugs именовали проблемы с радарной электроникой.
По одной из версий, в отношении программной ошибки этот термин впервые был применен 9 сентября 1947 года Грейс Хоппер , которая работала в Гарвардском университете с вычислительной машиной . Проследив возникшую ошибку в работе программы до электромеханического реле машины, она нашла между замкнувшими контактами сгоревшего мотылька. Извлечённое насекомое было вклеено скотчем в технический дневник с сопроводительной иронической надписью: «Первый реальный случай обнаружения жучка» ( англ. First actual case of bug being found ) .
В зависимости от этапа разработки ПО , на котором выявляется ошибка, выделяют:
По важности:
По времени появления:
По месту и направлению:
В зависимости от характера ошибки, программы и среды исполнения, ошибка может проявляться сразу или наоборот — долгое время оставаться незамеченной (например Проблема 2038 года ).
Также ошибка может проявляться в виде уязвимости , делающей возможным несанкционированный доступ к системе или DoS-атаку .
Гейзенбаг ( англ. heisenbug ) — программная ошибка, которая исчезает или меняет свои свойства при попытке её обнаружения .
Борбаг ( англ. Bohr bug ) — ошибка, которая, в противоположность гейзенбагу, не исчезает и не меняет своих свойств при попытке её обнаружения, аналогично стабильности модели электронных орбиталей Нильса Бора . Близкий по значению русскоязычный аналог — «стабильный» или «устойчивый» баг , «систематическая ошибка».
Мандельбаг ( англ. mandel bug ) — ошибка, чьё поведение столь сложно, что выглядит хаотичным . Название происходит от имени Бенуа Мандельброта , основоположника фрактальной геометрии . Однако, стоит заметить (по принципу, сходному с тестом Тьюринга ), что, если не существует способа разделить ошибку, чьё поведение кажется хаотичным, и ошибку, чьё поведение действительно хаотично, то нет никакого смысла различать мандельбаг и гейзенбаг . Некоторые используют термин мандельбаг для описания ошибки, чьё поведение не кажется действительно хаотичным, но столь сложно, что для её исправления требуется переписать программу с нуля. Примером такой ошибки может служить фундаментальная ошибка, допущенная при проектировании системы .
Шрёдинбаг ( англ. schroedin bug — в честь мысленного эксперимента с котом Шрёдингера ) — ошибка, которая никак не проявляет себя, однако внезапно возникает, если кто-то наткнётся на неё в исходном коде или попытается использовать программу в необычных условиях и осозна́ет, что система вообще не могла работать при наличии такой ошибки. После этого программа перестаёт работать вообще до тех пор, пока ошибка не будет исправлена. Хотя это звучит невероятно, некоторые программы содержат в себе такие ошибки.
Гинденбаг ( англ. hinden bug — по названию катастрофы дирижабля «Гинденбург» ) — ошибка с катастрофическими последствиями, например, полным уничтожением данных.
Багсон Хиггса ( англ. higgs-bugson — в честь частицы под названием бозон Хиггса ) — ошибка, существование которой предсказано (чаще всего, по косвенным данным или единичным сообщениям пользователей), но которую крайне трудно, если вообще возможно, воспроизвести искусственно в условиях разработки или тестирования. Термин также может употребляться по отношению к ошибке, которая очевидна в коде (математически доказана), но при этом ни разу не наблюдалась в реальных условиях.
Для отладки программы ( англ. debugging ) разработчиками ПО используются специальные программы-отладчики ( англ. debugger ). Например, в операционной системе Windows можно использовать программу WinDbg из пакета . Для GNU/Linux и ряда других UNIX-подобных операционных систем существует отладчик GDB (GNU Debugger).
Основная масса ошибок обычно отлаживается на этапе компиляции и тестирования программы. Однако некоторая часть ошибок всё же попадает в публикуемую версию и проявляется на компьютерах конечных пользователей в процессе эксплуатации ПО. Для повышения качества программного обеспечения пользуются специальными программами, цель которых — отловить ошибку в целевом приложении, собрать необходимую информацию о её симптомах и отправить отчёт по интернету к разработчикам данного ПО.
Например, в операционную систему Windows встроена утилита Dr. Watson , которая по умолчанию отлавливает ошибки в приложениях пользователя и отправляет отчёт на специальный Сервер компании Microsoft . Также в качестве примера можно привести аналогичные библиотеки Breakpad и .