Ответ
TDD (Test-Driven Development) — методика, при которой тесты пишутся до реализации кода.
Цикл TDD (красный-зеленый-рефакторинг):
- Красный — написать падающий тест
- Зеленый — написать минимальный код, чтобы тест прошел
- Рефакторинг — улучшить код, сохраняя зеленые тесты
Пример TDD для калькулятора:
// 1. Пишем тест (красная фаза)
@Test
void multiply_shouldReturnCorrectResult() {
Calculator calc = new Calculator();
assertEquals(6, calc.multiply(2, 3));
assertEquals(0, calc.multiply(5, 0));
assertEquals(-10, calc.multiply(2, -5));
}
// 2. Пишем минимальную реализацию (зеленая фаза)
public class Calculator {
public int multiply(int a, int b) {
return a * b;
}
}
// 3. Рефакторинг (если нужно)
// Добавляем проверку переполнения, оптимизацию и т.д.
Тестирование после кода:
// Сначала пишем реализацию
public class UserService {
public boolean isValidEmail(String email) {
return email != null && email.contains("@");
}
}
// Потом пишем тесты
@Test
void isValidEmail_shouldReturnTrueForValidEmail() {
UserService service = new UserService();
assertTrue(service.isValidEmail("test@example.com"));
}
Параллельное тестирование:
- Пишется небольшой кусок кода → сразу тесты для него
- Итеративный процесс, но без строгого следования TDD
Сравнение подходов:
| Критерий | TDD | После кода | Параллельно |
|---|---|---|---|
| Качество дизайна | Высокое (тестируемость заложена) | Низкое (может быть сложно тестировать) | Среднее |
| Покрытие тестами | Полное (тесты для всей функциональности) | Могут быть пропущены edge cases | Зависит от дисциплины |
| Скорость разработки | Медленнее вначале, быстрее в долгосрочной | Быстрее вначале, проблемы позже | Средняя |
| Рефакторинг | Безопасный (есть тесты) | Рискованный | Умеренно безопасный |
Рекомендации:
- Используйте TDD для сложной бизнес-логики
- Параллельное тестирование подходит для CRUD-операций
- Тестирование после кода допустимо только для прототипов
Преимущества TDD:
- Более чистый и модульный код
- Лучшее покрытие тестами
- Уверенность при рефакторинге
- Документация в виде тестов