Ручное и автоматизированное тестирование. Мифы

Где руки человека незаменимы, где выигрывает автоматизация и какие заблуждения мешают командам.

Ручное тестирование выполняет человек, исследуя продукт; автоматизированное — это код, который проверяет код. Это не конкуренты, а взаимодополняющие инструменты.

Сильные стороны каждого

РучноеАвтоматизированное
Исследование, юзабилити, «на глаз»Регрессия, повторяемые проверки
Новые фичи без чёткого ТЗТысячи проверок за секунды
Творческие, нестандартные сценарииЗапуск на каждый коммит в CI
Дорого повторять много разДорого писать впервые, дёшево повторять

Правило большое: то, что проверяется часто и одинаково — автоматизируй; то, что требует человеческого взгляда и интуиции (исследовательское, юзабилити-тестирование) — оставь людям. Регрессию (проверку, что старое всё ещё работает) почти всегда автоматизируют, потому что вручную перепроверять одно и то же на каждом релизе невыносимо.

Автотест в одну строку идеи

Автоматизированный тест — это просто код, который сам проверяет результат и не требует человека, чтобы посмотреть глазами.

def normalize_phone(raw):
    """Оставляет только цифры из номера телефона."""
    return "".join(ch for ch in raw if ch.isdigit())


# Автотест: машина сама сверяет результат, человек не нужен
cases = [
    ("+7 (900) 123-45-67", "79001234567"),
    ("8-800-555-35-35",    "88005553535"),
    ("nodigits",           ""),
]
for raw, expected in cases:
    assert normalize_phone(raw) == expected

print(f"Автотест пройден на {len(cases)} вариантах ввода")

Вывод:

Автотест пройден на 3 вариантах ввода

Эти три проверки выполнились мгновенно и могут запускаться при каждом изменении кода. Вручную перепроверять их каждый раз — пустая трата времени.

Мифы о тестировании

  • «Тесты гарантируют отсутствие багов». Нет — они снижают риск, но не дают гарантий.
  • «Тестирование — это в конце». Нет — оно идёт с самого начала (shift-left).
  • «100% покрытие = нет ошибок». Нет — покрытие показывает, какой код выполнился, а не верно ли он работает.
  • «Автотесты заменят тестировщиков». Нет — они снимают рутину, но исследование и юзабилити остаются за людьми.
  • «Тесты — это лишнее время». Наоборот: они экономят время на отладке и правках в продакшене.

Итог

  • Ручное — для исследования, юзабилити, новых фич; авто — для регрессии и повторяемых проверок.
  • Автотест — это код, который сам сверяет результат и запускается на каждый коммит.
  • Большинство «мифов» о тестировании — это попытки заменить мышление формальностью.
Проверьте себя
1. Что разумнее всего автоматизировать?
AЮзабилити-тестирование интерфейса
BРегрессию и повторяемые одинаковые проверки
CОценку красоты дизайна
DИсследование совсем новой фичи без ТЗ
2. Какой из этих тезисов — миф?
AТестирование снижает риск дефектов
B100% покрытие кода гарантирует отсутствие багов
CАвтотесты можно запускать на каждый коммит
DРучное тестирование полезно для юзабилити
3. В чём сильная сторона ручного тестирования?
AПрогон тысяч проверок за секунды
BИсследование, юзабилити и творческие нестандартные сценарии
CЗапуск в CI на каждый коммит
DДешёвое многократное повторение
Поддержать проект