В чем разница между Ad-hoc тестированием и Exploratory тестированием?

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

Ответ

Оба метода относятся к неформальному тестированию без заранее подготовленных тест-кейсов, но имеют фундаментальное различие в подходе и структуре.

Ad-hoc тестирование — это спонтанная, неструктурированная проверка ПО без какой-либо документации или плана. Тестировщик действует интуитивно, часто для быстрой "проверки" или "прогона" функционала.

  • Цель: Быстро найти очевидные, критические дефекты.
  • Процесс: Хаотичный, зависит от сиюминутных идей тестировщика.
  • Документация: Отсутствует. Результаты часто не фиксируются.
  • Аналогия: "Потыкать палкой" в систему, чтобы посмотреть, что сломается.

Exploratory тестирование (ET) — это одновременное изучение системы, проектирование тестов и их выполнение. Это структурированный, интеллектуальный и документируемый процесс.

  • Цель: Исследовать продукт, понять его поведение, найти неочевидные дефекты и проблемы с юзабилити.
  • Процесс: Цикличный: Изучить -> Спроектировать тест -> Выполнить -> Зафиксировать результат -> Проанализировать -> Изучить...
  • Документация: Обязательна. Фиксируются тестовые идеи (charters), найденные баги, наблюдения, риски.
  • Аналогия: Исследование новой местности с картой и компасом, где вы отмечаете интересные находки.

Ключевые различия:

Аспект Ad-hoc тестирование Exploratory тестирование
Планирование Отсутствует. Есть тест-чартер (миссия, например: "Исследовать процесс оплаты с разными способами").
Документация Нет. Да (заметки, скриншоты, сессионные листы).
Воспроизводимость Низкая (сложно повторить). Средняя/высокая (можно повторить по чартеру и заметкам).
Фокус Найти баг. Понять продукт, оценить качество, найти баги.
Навыки тестировщика Базовое знание продукта. Требует аналитического мышления, любознательности, умения структурировать информацию.

Практический пример на Python:

# Тестируемая функция
def process_order(item_id, quantity, discount_code=None):
    """Обрабатывает заказ. Возвращает итоговую стоимость."""
    price = get_price(item_id)  # Допустим, возвращает 100
    total = price * quantity
    if discount_code == "SAVE10":
        total *= 0.9
    elif discount_code == "SAVE20":
        total *= 0.8
    # ...
    return total

# --- Ad-hoc подход (в консоли, спонтанно) ---
# >>> process_order(123, 2)
# 200
# >>> process_order(123, 0)  # Спонтанная мысль: а что если 0?
# 0
# >>> process_order(123, -1) # А если отрицательное?
# -100  # Баг! Стоимость не может быть отрицательной.
# Результат: Нашли баг, но контекст и шаги могут быть забыты.

# --- Exploratory подход (структурированное исследование) ---
# Чартер: "Исследовать функцию process_order на корректность расчетов и обработку граничных случаев."
# Запускаем сессию и делаем заметки:

session_notes = """
**Test Charter:** Исследование process_order().
**Тест-идея 1:** Стандартный сценарий.
- Данные: item_id=123, quantity=2 -> Ожидаем 200. Результат: 200 (OK).

**Тест-идея 2:** Граничные значения quantity.
- quantity=0 -> Ожидаем 0 или ошибку. Результат: 0 (OK, но бизнес-логика?).
- quantity=-1 -> Ожидаем ошибку/исключение. Результат: -100 (БАГ! Цена отрицательная).
- quantity=999999 (большое число) -> Проверка на переполнение/производительность.

**Тест-идея 3:** Купоны на скидку.
- discount_code="SAVE10" -> Ожидаем скидку 10%. Результат: 180 (OK).
- discount_code="INVALID" -> Ожидаем игнорирование или ошибку. Результат: 200 (OK).
- discount_code="" (пустая строка) -> ?
- discount_code=None (явно) -> ?

**Находки/Риски:**
1. Критический баг: функция допускает отрицательное количество, что приводит к отрицательной цене.
2. Вопрос к аналитику: Допустимо ли quantity=0?
"""

Вывод: Ad-hoc — это неконтролируемая разовая проверка, в то время как Exploratory Testing — это управляемый, обучающий и документируемый процесс, который является мощным инструментом в арсенале профессионального тестировщика.