Что считается ошибкой (дефектом) в программном обеспечении?

«Что считается ошибкой (дефектом) в программном обеспечении?» — вопрос из категории Основы тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ошибка (дефект, баг) в программном обеспечении — это недостаток или проблема в компоненте или системе, которая приводит к сбою в выполнении требуемой функции.

Формальное определение (IEEE 610):

«Дефект — это несоответствие между фактическим результатом выполнения компонента или системы и ожидаемым результатом».

Ключевые критерии для идентификации дефекта:

  1. Отклонение от требований: Программа не делает того, что описано в спецификации или пользовательской истории.
  2. Отклонение от ожиданий пользователя: Программа ведет себя неинтуитивно или не так, как ожидает конечный пользователь, даже если формально соответствует документации.
  3. Отклонение от стандартов: Нарушаются общепринятые стандарты разработки, безопасности, доступности или соглашения об именовании.

Примеры дефектов разного типа:

# 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) — наблюдаемое проявление дефекта во время выполнения программы.

Таким образом, тестирование направлено на выявление дефектов, чтобы предотвратить сбои в работе ПО для пользователя.