Статическое и динамическое тестирование

Статическое и динамическое тестирование

Введение

Большинство новичков думают, что тестирование начинается тогда, когда есть что запустить. На самом деле — нет. Часть тестирования можно и нужно делать ещё до того, как написана первая строчка кода. Именно это называется статическим тестированием.

Динамическое тестирование

Динамическое тестирование — это то, что большинство людей представляют под словом «тестирование»: программу запускают и проверяют её поведение.

Ключевой признак: код выполняется. Тестировщик взаимодействует с работающей системой.

Примеры динамического тестирования:

  • Открыть форму регистрации и проверить, сохраняются ли данные
  • Запустить API-запрос и проверить ответ
  • Нажать кнопку оформления заказа и проверить, создался ли заказ
  • Запустить автотест, который кликает по элементам страницы

Динамическое тестирование — основной вид тестирования на большинстве этапов разработки. Оно находит ошибки в поведении системы.

Статическое тестирование

Статическое тестирование — анализ артефактов проекта без запуска кода. Это проверка документов, кода, требований, дизайн-макетов.

Ключевой признак: программа не запускается. Тестировщик (или разработчик) читает и анализирует.

Что проверяют при статическом тестировании:

  • Требования (requirements) — полнота, противоречия, неоднозначности
  • Дизайн-документы и архитектурные схемы
  • Исходный код (без выполнения)
  • Тест-кейсы и тестовую документацию
  • Пользовательская документация

Основные техники статического тестирования

Ревью (Review) — коллеги читают документ или код и находят проблемы:

  • Неформальное ревью — просто попросил коллегу посмотреть
  • Walkthrough — автор ведёт группу через документ, объясняя его
  • Инспекция (Inspection) — формальный процесс с ролями, чеклистом, метриками

Статический анализ кода — инструменты (линтеры, анализаторы) проверяют код по правилам без запуска. Например, ESLint для JavaScript.

Почему статическое тестирование важно: «правило 10x»

Стоимость дефекта растёт экспоненциально с каждой стадией

Чем позже найден дефект, тем дороже его исправить. Это называют правилом 10x:

Этап обнаружения дефектаОтносительная стоимость исправления
Требования1x
Дизайн5x
Разработка10x
Тестирование20x
Продакшн100x

Если тестировщик находит противоречие в требованиях на этапе написания ТЗ — это стоит в 100 раз дешевле, чем исправить ошибку в продакшне.

Примеры статического тестирования в реальной работе

Пример 1: Ты читаешь требование: «Пользователь может войти по email». Задаёшь вопрос: «А что если email не подтверждён? А если аккаунт заблокирован?» — это статическое тестирование требований.

Пример 2: Разработчик просит посмотреть код функции валидации. Ты видишь, что граничный случай (пустая строка) не обрабатывается. Это статическое тестирование кода.

Пример 3: Дизайнер показывает макет. Ты замечаешь, что нет состояния ошибки для формы. Это статическое тестирование дизайна.

Сравнение

АспектСтатическоеДинамическое
Код запускается?НетДа
КогдаДо/во время разработкиПосле разработки
Что проверяетДокументы, код, требованияПоведение системы
НаходитЛогические ошибки, неясностиОшибки выполнения, баги
Стоимость исправленияДёшевоДороже

Распространённые ошибки

  • «Это работа разработчиков, не тестировщиков». Тестировщик участвует в ревью требований — это одна из важнейших его задач.
  • «Зачем читать требования, если потом всё равно тестировать вживую?» Раннее обнаружение дефекта сэкономит время всей команды.
  • «Статический анализ кода — это уже тестирование». Да, это форма статического тестирования, хотя многие относят её к инструментам разработки.

Что запомнить

  • Статическое тестирование — без запуска программы (ревью, анализ документов)
  • Динамическое тестирование — с запуском программы (обычное тестирование)
  • Статическое тестирование дешевле, потому что находит дефекты раньше
  • Тестировщик должен участвовать в ревью требований с самого начала проекта

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике