Ответ
Ошибка (дефект, баг) в программном обеспечении — это недостаток или проблема в компоненте или системе, которая приводит к сбою в выполнении требуемой функции.
Формальное определение (IEEE 610):
«Дефект — это несоответствие между фактическим результатом выполнения компонента или системы и ожидаемым результатом».
Ключевые критерии для идентификации дефекта:
- Отклонение от требований: Программа не делает того, что описано в спецификации или пользовательской истории.
- Отклонение от ожиданий пользователя: Программа ведет себя неинтуитивно или не так, как ожидает конечный пользователь, даже если формально соответствует документации.
- Отклонение от стандартов: Нарушаются общепринятые стандарты разработки, безопасности, доступности или соглашения об именовании.
Примеры дефектов разного типа:
# 1. Функциональный дефект (Логическая ошибка)
def calculate_discount(price, discount_percent):
# Ожидается: price - (price * discount_percent / 100)
return price * discount_percent / 100 # Дефект: возвращает только сумму скидки, а не итоговую цену
# 2. Дефект обработки граничных значений
def get_list_element(data_list, index):
if 0 <= index < len(data_list):
return data_list[index]
# Дефект: нет обработки случая index == len(data_list) или отрицательных индексов
return None # Может скрыть ошибку
Классификация дефектов по уровню воздействия:
- Блокирующие (Blocker): Приводят к полному падению системы или критической функции.
- Критические (Critical): Основная функция не работает, нет обходного пути.
- Значительные (Major): Функция работает с серьезными ограничениями.
- Незначительные (Minor): Несущественное отклонение (опечатка в UI, неверный цвет).
- Тривиальные (Trivial): Косметические проблемы, не влияющие на функциональность.
Важное различие терминов (в контексте процесса):
- Ошибка (Mistake) — человеческое действие, приводящее к неправильному результату (например, опечатка в коде).
- Дефект (Defect/Bug) — следствие ошибки, проявившееся в коде/архитектуре.
- Сбой (Failure) — наблюдаемое проявление дефекта во время выполнения программы.
Таким образом, тестирование направлено на выявление дефектов, чтобы предотвратить сбои в работе ПО для пользователя.