Разработка через тестирование (TDD)
TDD
Что это такое
Разработка через тестирование — это практика, в которой тест на следующую небольшую порцию поведения пишут раньше кода и сначала убеждаются, что этот тест падает. Лишь потом появляется простейший код, который его пропускает, и уже после этого код улучшают, не выпуская тест из зелёного состояния. Цикл укладывается в минуту-две, а его повторение задаёт ритм: красный, зелёный, рефакторинг. Тест здесь не приделан задним числом ради покрытия; это спецификация, которую пишут первой, и код существует, чтобы ей удовлетворять.
Почему это важно
Каждый шаг закрывает свою ошибку. Красный доказывает, что тест действительно связан с кодом и способен упасть, — без этой проверки пустой тест надолго даёт ложную уверенность. Зелёный требует самой маленькой реализации, а значит, не пускает спекуляции в проектирование. Рефакторинг поддерживает проект в порядке, пока тесты остаются зелёными, поэтому улучшения идут непрерывно, а не рискованным сеансом через полгода. Если выполнять все три шага вместе, получается код, каждую строку которого потребовал тест, и тест, который хотя бы раз видели упавшим на глазах у автора.
Что в этом треке
- Цикл «красный — зелёный — рефакторинг» (01-cs-fundamentals/20-test-driven-development-tdd/01-the-red-green-refactor-loop) — три шага, зачем нужен каждый из них и насколько мелким должен быть цикл.
- Где TDD окупается, а где нет (01-cs-fundamentals/20-test-driven-development-tdd/02-where-tdd-does-and-does-not-pay-off) — задачи, которым он подходит, задачи, с которыми он воюет, и как отличить одни от других.
Предварительные требования
- Модульное тестирование (01-cs-fundamentals/10-unit-testing)
Что читать дальше
- Модульное тестирование (01-cs-fundamentals/10-unit-testing) — ремесло написания тестов и гигиена, от которых зависит эта дисциплина; поэтому читайте его первым.
- Рефакторинг (01-cs-fundamentals/19-refactoring) — третий шаг цикла, развёрнутый в самостоятельную процедуру.
- Отладка (01-cs-fundamentals/11-debugging) — неожиданно упавший тест — задача отладки, и к её причине быстрее всего ведёт тот же метод.