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

Ошибка – это…

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

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

Этимология

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

Во времена Второй Мировой войны словом «bugs» описывали проблемы, возникающие при эксплуатации радарной электроники. Но есть и более интересная теория происхождения слова «баг».

Соответствующее понятие появилось 9 сентября 1947 года. Его произнесла Грейс Хоппер. Она работала в Гарвардском университете и тестировала вычислительную машину Mark II. Устройство функционировало с ошибками. Когда его разобрали, ученые увидели застрявшего мотылька между реле машины. Из-за него и возникла неполадка. Тогда мотылька извлекли, устройство заработало, а этот случай стали считать «первым реальным случаем обнаружения жучка».

Несколько слов о классификации

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

В зависимости от этапа разработки программы выделяют:

  • синтаксические баги;
  • предупреждения (варнинги, warnings);
  • ошибки времени исполнения (run-time).

В программах поддерживается разделение багов на категории по важности:

  • критические;
  • косметические;
  • серьезные;
  • незначительные.

Неполадки в программах классифицируют по времени появления:

  • постоянно – при каждом запуске ПО;
  • иногда («плавающий» тип);
  • только на устройстве конкретного пользователя.

Неисправности также подразделяются по направлению и месту возникновения:

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

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

Классификация ошибок программного обеспечения может быть следующей:

  • логические;
  • синтаксические;
  • компиляционные;
  • арифметические;
  • ресурсные;
  • взаимодействия.

Все эти категории предусматривают свои ключевые особенности. Далее будут более подробно рассмотрены наиболее распространенные варианты во время разработки и программирования.

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

Существуют различные виды багов. А именно:

  1. Борбаг. Неполадка, которая всплывает стабильно. Обнаруживается достаточно легко. Исправить ее обычно не составляет никакого труда.
  2. Гейзенбаг. Сюда относят сбои, которые время от времени исчезают и изменяют свои свойства при попытке обнаружения.
  3. Мандельбаг. Неполадки хаотического типа. Их достаточно трудно предсказать, как и результат исполнения программы.
  4. Шредингбаг. Критический сбой. Может долгое время никак себя не проявлять. После того, как кто-нибудь на нее натыкается, программа полностью перестает функционировать.

Это основные категории программных ошибок, которые встречаются при разработке и непосредственном использовании ПО.

Наиболее распространенные баги

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

Взаимодействие и ресурсы

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

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

Компиляционный тип

Возникают такие неполадки при компиляции программы. Могут быть вызваны как неправильным синтаксисом, так и непосредственным сбоем в компиляторе. Устраняются на этапе разработки и отладки.

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

Синтаксис

Синтаксические сбои – это ошибки синтаксиса. То есть, непосредственных правил языка. Одной из самых распространенных причин появления таких неполадок является невнимательность разработчика. Чаще всего допускаются новичками при изучении того или иного языка.

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

Какими бывают ошибки в приложениях

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

Логический тип

Основной источник критических неполадок и появления неработающего кода. Иногда программа написано синтаксически верно, но она все равно не функционирует так, как было задумано. Логические сбои делятся на:

  1. Арифметические. Появляются вследствие вычислений большого количества переменных, но «что-то идет не так» на том или ином этапе расчетов. Пример – деление на ноль.
  2. Обычные. Все остальные логические ошибки программного обеспечения.

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

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

Какими бывают ошибки в приложениях

Выше – пример логической ошибки. Здесь она безобидна, потому что вывод сообщения при i = 15 не приводит ни к каким последствиям. Если же программа должна выдать при соответствующем условии сигнал тревоги или что-либо в этом роде, трудно представить масштабы произошедшего бедствия.

Время выполнения

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

Какими бывают ошибки в приложениях

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

Какими бывают ошибки в приложениях

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

P. S. Большой выбор курсов по тестированию есть и в Otus. Присутствуют варианты как для продвинутых, так и для начинающих пользователей.