2. Как прийти к TDD?
• Если тесты – это хорошо, то почему бы не
создавать их для всего кода?
• Тесты, как спецификация
• TDD - это принцип «разделяй и властвуй»
для получения «чистого кода, который
работает»
3. Алгоритм
1. Быстро создать новый тест
2. Запустить все тесты и обнаружить, что новый
тест не проходит
3. Внести небольшие изменения в код
4. Снова запустить все тесты и на этот раз
зафиксировать, что все они успешно
срабатывают
5. Провести рефакторинг для устранения
дублирования
6. Goto 1
4. Рекомендации
• Никогда не нарушайте последовательность шагов
• Начинайте с малого
• Не бойтесь ошибиться (Courage)
• Не беритесь за все подзадачи сразу. Вместо этого
выписывайте каждую подзадачу на лист бумаги и
беритесь в один момент времени только за один
листочек.
• Выбирайте те подзадачи, которые дадут вам
наиболее полезную информацию
• «Не прерывайте прерывание»
8. Green
• Заставьте тест работать как можно
быстрее, не задумываясь при этом о
правильности дизайна и чистоте кода.
Напишите минимум, который необходим
для получения зелёной полосы.
12. Принцип: Assert First
• Начните тест с написания того, что вы
хотите проверить, то есть с assert
13. Значения для тестов
• Тестовые данные должны быть как можно
проще, но информативными
• Реалистичные данные:
– Тестирование систем реального времени с
использованием цепочек реальных событий
– Сравнение поведения старой и новой системы
– Проверка неизменности поведения кода
имитирующего реальный процесс после
рефакторинга
17. Принцип: One Step Test
• Есть список задач – Tests List
• С какого теста начать?
18. Принцип: Starter Test
• Начните с теста, который ничего не делает
• Ответьте на вопрос, где должна
располагаться операция
19. Принцип: Explanation Test
• Для любого объяснения используйте тесты
• Это способ распространения TDD в команде
20. Принцип: Learning Test
• Способ проверить догадки о том, как себя
ведёт библиотека
• Возможность быстро проверять
совместимость при выходе новых версий
21. Принцип: Another Test
• Когда возникает интересная посторонняя
мысль, то запишите её в список и отложите
22. Принцип: Regression Test
• Что необходимо сделать первым после
того, как был обнаружен баг?
• Конечно же написать тест!
23. Принципы эффективности
• Перерыв (break)
• Начать сначала (do over)
Экстремальное программирование - разработка через тестирование
Кент Бек
24. Паттерн: Самошунтирование (Self Shunt)
• Каким образом убедиться, что ваш объект
корректно взаимодействует с другим?
• Заставьте объект взаимодействовать не с
целевым объектом, а с вашим тестом
25. Паттерн: Broken Test
• В конце работы оставьте последний тест
сломанным, чтобы затем с него и начать
работу после перерыва
27. Приёмы быстрого получения зелёной полосы
• Подделай это (Fake It)
• Триангуляция (Triangulation)
• Очевидная реализация (Obvious
Implementation)
• От одного ко многим (One to Many)
28. Приём Fake It
• Сделайте так, чтобы тестируемый код
возвращал такую константу, что тест станет
зелёным
29. Приём Triangulation
• Выставляйте ограничения в тестах
• Постепенно увеличивайте абстрактность в
коде
• Используем, если не уверены в том, какая
абстракция будет корректной
35. Необходимые навыки
• Владение Fake It, Triangulation & Obvious
Implementation
• Умение удалять дублирование логики
между кодом и тестами
• Способность контролировать скорость
36. TDD и архитектура
• Этап рефакторинга позволяет нам получать
хорошую архитектуру
• Получаем Simple Design
• Необходимо стратегическое видение
архитектуры. Для его получения можно
использовать, например, CRC карты