Баг
Баг (англ. bug — жук) — слово, на компьютерном жаргоне обозначающее дефект программы, приводящий к её некорректному поведению при исполнении. Чаще всего является следствием ошибок в исходном тексте (неправильно составленный, или закодированный алгоритм), или просчётов в архитектуре программы. Последствия проявления багов обычно называют «глюками», а нестабильность программы вследствие проявления глюков может называться «бажностью», «глючностью», «глюкавостью».
Классификация баговПравить
По месту возникновенияПравить
- В пользовательском интерфейсе: недостаточная функциональность, избыточная функциональность, неадекватность реализации функций (например, низкая производительность отдельных функций), программа выдает неверную, или неполную информацию, нестандартные горячие клавиши, недостаточная гибкость программы.
- При обработке ошибок: некорректная обработка входных данных, отсутствие защиты от ошибок операционной системы и аппаратных сбоев (например, переполнение диска), отсутствие проверки версий программ окружения, недостаточная "защита от дурака".
- При обработке граничных условий: неверное граничное условие, неучтенное ограничение на размер выделяемой памяти, размеры файлов и количество открываемых файлов, ограничения связанные с аппаратным обеспечением (например, расчет на более мощную конфигурацию).
- В вычислениях: арифметическое переполнение, неправильный порядок операций, ошибки округления, неправильные формулы.
- В начальном и последующих состояниях: использование не инициализированных переменных (например, как счетчик цикла), некорректная инициализация.
- При управлении потоком исполнения: некорректное значение указателя на подпрограмму, отсутствие реентерабельности (возможности повторного вхождения в подпрограмму), надежда на корректное завершение подпрограммы (отсутствие обработки исключений и возвращаемого подпрограммой кода завершения), случайное изменение счетчика цикла.
- При передаче и интерпретации данных: несоответствие типов данных, повреждение данных при аварийном завершении программы, неожиданный конец строки, чтение и запись за пределами выделенного участка памяти (переполнение буфера), повреждение данных и кода других процессов
- Ситуации гонки: одновременный доступ к переменной из разных потоков, надежда на строгий порядок завершения/начала исполнения параллельных процессов, неатомарность синхронизирующих операций, использование одного временного файла несколькими программами.
- Повышенные нагрузки: утечка памяти, лишние затраты процессорного времени, потерянные сообщения (в том числе сетевые пакеты), не удаленные временные файлы занимают дисковое пространство, не выполняются задания с низким приоритетом.
- При взаимодействии с аппаратным обеспечением и ОС: устройство недоступно, использование не инициализированного устройства, надежда на отсутствие/наличие устройства в системе, надежда на отсутствие прерываний втечение промежутка времени.
- При управлении версиями: возвращение старых ошибок из за путаницы в версиях файлов, частичное обновление, невозможность получения версии программы, неверная информация о версии программы.
По времени возникновенияПравить
- При составлении ТЗ и определении требований
- Недостаточный уровень формализации требований
- Неправильно выбранные требования
- Ошибки проектирования
- В архитектуре
- В функциональности отдельных модулей
- Ошибки выбора средств разработки
- Ошибки спецификации
- Ошибки кодирования
- Опечатки
- Ошибки реализации спецификации
- Невыполнение критериев добротности
- Ошибки отладки и тестирования
- Неполное тестирование
- Неполная информация о найденных ошибках
- Неполное устранение ошибок
- Ошибки в документации
- Ошибки на стадии эксплуатации
- Ошибки обновления
- Отсутствие обратной связи с пользователями
С точки зрения тестировщикаПравить
- Ошибки кодирования
- Ошибки проектирования
- Расхождения с документацией
- Предложения по улучшению
- Поведение ПО вызывающее вопросы тестировщика
Неформальная классификацияПравить
- Альфабаг - (англ. Alpha particle bug)(жарг. Полтергейц) баг который произошел единожды, и анализ кода говорит о том, что его не могло произойти без отказа аппаратных средств (например под влиянием алфа частиц, или электромагнитного излучения)
- Бозебаг - большое скопление ошибок в определенном участке кода
- Борбаг - легко обнаруживаемый стабильный баг
- Гейзенбаг - сложно обнаруживаемый, периодически исчезающий и меняющий свойства баг
- Дзенбаг - не влияющая ни на что ошибка
- Мандельбаг - борбаг с очень сложным поведением
- Метабаг - грамматическая ошибка в комментарии
- Фермабаг – сложно доказуемый баг, возникающий, как правило, только на машинах заказчика
- Фермибаг – количественная характеристика бажности исходного кода, применяется когда плотность достигает одной-двух ошибок на строку кода
- Фомбаг - (англ. Phase of the Moon bug) периодический баг, проявляющийся от времени выполнения (например: только по утрам, только 13-го числа)
- Шрёдинбаг – критическая ошибка, которая не проявляется пока кто-нибудь на неё не наткнется, после чего программа совершенно перестает работать
Методы борьбыПравить
- Выбор средств разработки. Большинство ошибок вызывано не сложностью решаемой задачи, а сложностью используемого инструментария и допущенными в нем ошибками
- Применение стандартов безопасного кодирования и инструментов автоматизированного анализа исходного кода. Это позволяет снизить вероятность ошибок применения инструментов разработки.
- Тестирование
- Применение систем накопления информации об ошибках (багтрекер) проекта, для обеспечения взаимодействия разработчиков с тестировщиками и конечными пользователями
- Отладка
- Патчи и обновления