Тренируем Test-Driven Development (TDD)
TDD (Test-Driven Development) — дисциплина разработки, в которой тест появляется раньше production-кода. Подход строится на коротком цикле Red -> Green -> Refactor. В разделе тестирования TDD рассматривается вместе с уровнями тестов (unit, integration, E2E) и с BDD; в методологиях — как инженерная практика Agile/XP рядом с CI/CD и рефакторингом.
Что дает TDD на практике
- быстрее выявляет ошибки в требованиях;
- снижает число регрессий;
- формирует модульный и читаемый код;
- дает уверенность при рефакторинге.
Базовые понятия
Red— новый тест падает, потому что функциональность отсутствует.Green— минимальная реализация, которая делает тест зеленым.Refactor— улучшение структуры кода при зеленых тестах.Test suite— набор тестов проекта.
Пошаговый учебный кейс
Задача: написать функцию расчета скидки.
Правила:
- если сумма заказа меньше 1000, скидка 0%;
- от 1000 до 4999 — скидка 5%;
- от 5000 — скидка 10%.
Шаг 1. Red
Сначала пишем тесты (пример на Python + pytest). Вкладки test_discount.py и discount.py:
Запуск тестов даст ошибку, потому что функции еще нет.
Шаг 2. Green
Минимальная реализация — во вкладке discount.py (см. пример выше). Снова запустите тесты. На этом этапе цель — зеленый результат.
Шаг 3. Refactor
Улучшите код, сохраняя зеленые тесты:
- уточните имена переменных;
- добавьте обработку граничных значений;
- вынесите повторяющиеся части в отдельные функции.
После каждого изменения запускайте тесты.
Правила эффективного TDD
- один маленький шаг за итерацию;
- тест описывает бизнес-ожидание;
- код пишется только под текущий падающий тест;
- рефакторинг начинается после зеленого статуса.
Частые ошибки
- длинный код до первого теста;
- попытка покрыть все случаи в одном огромном тесте;
- пропуск фазы рефакторинга;
- тестирование деталей реализации вместо поведения.
Практическое задание
Сделайте вторую итерацию кейса:
- добавьте правило "для отрицательной суммы выбрасывать
ValueError"; - напишите тест на это поведение;
- реализуйте код;
- приведите функции и тесты к чистому виду.
Критерии результата
- все тесты зеленые;
- каждый тест читабельно описывает бизнес-правило;
- код проходит рефакторинг без изменения поведения;
- в проекте есть привычка писать новый код через цикл
Red -> Green -> Refactor.
Рекомендую читать в энциклопедии
| Тема | Материал |
|---|---|
| TDD, BDD и уровни тестов | Unit, Integration, UI, E2E, TDD и BDD |
| Раздел тестирования (маршрут QA и SDET) | Тестирование ПО — о разделе |
| Unit-тесты | Unit-тестирование |
| Методологии и SDLC | Методология и жизненный цикл ПО |
| Жизненный цикл, Scrum, DevOps | Жизненный цикл программного обеспечения |
| Чек-лист «используется ли TDD в проекте» | Самопроверка методологии |