Баг

Материал из свободной русской энциклопедии «Традиция»
Перейти к: навигация, поиск

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


Классификация багов[править]

По месту возникновения[править]

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


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

  • При составлении ТЗ и определении требований
    • Недостаточный уровень формализации требований
    • Неправильно выбранные требования
  • Ошибки проектирования
    • В архитектуре
    • В функциональности отдельных модулей
    • Ошибки выбора средств разработки
    • Ошибки спецификации
  • Ошибки кодирования
    • Опечатки
    • Ошибки реализации спецификации
    • Невыполнение критериев добротности
  • Ошибки отладки и тестирования
    • Неполное тестирование
    • Неполная информация о найденных ошибках
    • Неполное устранение ошибок
  • Ошибки в документации
  • Ошибки на стадии эксплуатации
    • Ошибки обновления
    • Отсутствие обратной связи с пользователями

С точки зрения тестировщика[править]

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

Неформальная классификация[править]

  • Альфабаг - (англ. Alpha particle bug)(жарг. Полтергейц) баг который произошел единожды, и анализ кода говорит о том, что его не могло произойти без отказа аппаратных средств (например под влиянием алфа частиц, или электромагнитного излучения)
  • Бозебаг - большое скопление ошибок в определенном участке кода
  • Борбаг - легко обнаруживаемый стабильный баг
  • Гейзенбаг - сложно обнаруживаемый, периодически исчезающий и меняющий свойства баг
  • Дзенбаг - не влияющая ни на что ошибка
  • Мандельбаг - борбаг с очень сложным поведением
  • Метабаг - грамматическая ошибка в комментарии
  • Фермабаг – сложно доказуемый баг, возникающий, как правило, только на машинах заказчика
  • Фермибаг – количественная характеристика бажности исходного кода, применяется когда плотность достигает одной-двух ошибок на строку кода
  • Фомбаг - (англ. Phase of the Moon bug) периодический баг, проявляющийся от времени выполнения (например: только по утрам, только 13-го числа)
  • Шрёдинбаг – критическая ошибка, которая не проявляется пока кто-нибудь на неё не наткнется, после чего программа совершенно перестает работать

Методы борьбы[править]

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

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

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

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