Программная ошибка

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

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

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

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

Этимология термина «баг»[править | править код]

Запись в тех.журнале

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

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

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

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

Значение и классификация ошибок программного обеспечения[править | править код]

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

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

По важности:

  • Критические (иногда showstoppers) — лишающие программу всей полезности;
  • Серьёзные;
  • Незначительные;
  • Косметические.

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

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

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

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

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

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

Разновидности[править | править код]

[источник не указан 1112 дней]

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

Поиск и исправление ошибок[править | править код]

См. также: Патч

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

Отчёты об ошибках[править | править код]

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

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

Последствия[править | править код]

См. также[править | править код]

Примечания[править | править код]

  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. Log Book With Computer Bug (англ.). National Museum of American History. Дата обращения: 26 июля 2019.
  3. Danis, Sharron Ann: "Rear Admiral Grace Murray Hopper". ei.cs.vt.edu (16, 1997-02-16). Дата обращения: 20 января 2015.
  4. Breakpad. Google. Дата обращения: 11 августа 2009. Архивировано 3 февраля 2012 года.
  5. CrashRpt. Архивировано 3 февраля 2012 года.
  6. Popper, Nathaniel. Knight Capital Says Trading Glitch Cost It $440 Million (англ.), New York Times (2 August 2012). Дата обращения 13 ноября 2017.

Ссылки[править | править код]