Может ли тестирование доказать отсутствие дефектов в программе?

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

Ответ

Нет, тестирование не может доказать отсутствие дефектов. Его цель — найти существующие дефекты и оценить качество продукта. Тестирование снижает вероятность наличия необнаруженных ошибок, но не гарантирует их полного отсутствия.

Почему это так?

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

Пример:

def divide(a, b):
    return a / b

# Unit-тест проходит успешно
assert divide(4, 2) == 2
# Но тест не проверяет случай b=0, который вызовет ZeroDivisionError

Тестирование повышает уверенность в качестве, но является частью общего процесса обеспечения качества, который включает code review, статический анализ и формальную верификацию.