Ответ
TDD (Разработка через тестирование) — это методология разработки программного обеспечения, в которой цикл создания функциональности строго следует трём этапам («красный — зелёный — рефакторинг»), и тест пишется до реализации кода.
Цикл TDD (Красный/Зелёный/Рефакторинг):
- Красный (Red): Написание непроходящего unit-теста для ещё несуществующей или неполной функциональности. Запуск теста подтверждает его падение.
- Зелёный (Green): Написание минимального количества кода, необходимого для того, чтобы новый тест прошёл, не нарушая при этом существующие тесты. Цель — быстро получить работающую реализацию.
- Рефакторинг (Refactor): Улучшение структуры написанного кода (устранение дублирования, улучшение читаемости, применение паттернов) без изменения его внешнего поведения. После рефакторинга все тесты должны оставаться «зелёными».
Пример на Python (сложение чисел):
# 1. RED: Пишем падающий тест (функции add() ещё нет)
def test_add():
assert add(2, 3) == 5 # AssertionError: NameError: name 'add' is not defined
# 2. GREEN: Пишем минимальную реализацию
def add(a, b):
return a + b # Теперь test_add() проходит
# 3. REFACTOR: Улучшаем код, если нужно (здесь улучшать нечего)
# Можно, например, добавить обработку других типов данных.
Преимущества TDD:
- Высокое покрытие тестами: Код изначально пишется для прохождения тестов.
- Проектирование через тесты: Тест выступает как первая спецификация, что ведёт к более продуманному API.
- Уверенность при рефакторинге: Набор тестов защищает от регрессий.
- Более простая отладка: Если тест падает, проблема, скорее всего, в только что написанном коде.
Недостатки/Сложности:
- Замедление на старте: Требуется время на написание тестов.
- Сложность для UI и интеграционных тестов: Классический TDD лучше всего работает на уровне модулей и unit-тестов.
- Требует дисциплины: Отход от цикла снижает эффективность методики.