Может ли исправление одного (первичного) бага автоматически устранить другой (замаскированный) баг?

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

Ответ

Нет, как правило, не может. Первичный и замаскированный (латентный) баги — это независимые дефекты. Исправление одного не гарантирует устранение другого, так как они имеют разные корневые причины.

Почему так происходит? Замаскированный баг существует, но не проявляется из-за условий, создаваемых первичным багом (например, код с ошибкой никогда не выполняется из-за сбоя раньше).

Пример на Python:

def process_data(value, divisor):
    # Первичный баг: потенциальное деление на ноль
    intermediate = 100 / divisor  # Если divisor == 0, возникнет ZeroDivisionError

    # Замаскированный баг: ошибка логики для отрицательных значений
    # Этот код не выполнится, если выше было исключение
    if value < 0:
        return "Negative not allowed"  # Логика должна быть другой, например, abs(value)
    return value * intermediate

Что произойдет:

  1. При divisor=0 возникает ZeroDivisionError (первичный баг). Замаскированный баг (некорректная обработка value < 0) не будет обнаружен.
  2. Если исправить первичный баг (добавить проверку if divisor == 0), код пойдет дальше, и замаскированный баг проявится при value < 0.

Вывод для тестировщика:

  • После фикса любого бага всегда выполняйте регрессионное тестирование.
  • Анализируйте, не блокировал ли исправленный баг выполнение других участков кода.
  • Используйте тестовое покрытие (code coverage) для выявления непротестированных веток кода.