Upload
katkov-anton
View
1.551
Download
1
Embed Size (px)
DESCRIPTION
материал с конференции http://camp.agiledays.ru
Citation preview
Test Driven Development
Anton Katkov
Как прийти к TDD?
• Если тесты – это хорошо, то почему бы не создавать их для всего кода?
• Тесты, как спецификация• TDD - это принцип «разделяй и властвуй»
для получения «чистого кода, который работает»
Алгоритм
1. Быстро создать новый тест2. Запустить все тесты и обнаружить, что новый тест
не проходит3. Внести небольшие изменения в код4. Снова запустить все тесты и на этот раз
зафиксировать, что все они успешно срабатывают5. Провести рефакторинг для устранения
дублирования6. Goto 1
Рекомендации
• Никогда не нарушайте последовательность шагов• Начинайте с малого• Не бойтесь ошибиться (Courage)• Не беритесь за все подзадачи сразу. Вместо этого
выписывайте каждую подзадачу на лист бумаги и беритесь в один момент времени только за один листочек.
• Выбирайте те подзадачи, которые дадут вам наиболее полезную информацию
• «Не прерывайте прерывание»
RED-GREEN-REFACTOR МАНТРА
Этапы цикла
Red
• Напишите небольшой тест, который не работает или даже не компилируется
Green
• Заставьте тест работать как можно быстрее, не задумываясь при этом о правильности дизайна и чистоте кода. Напишите минимум, который необходим для получения зелёной полосы.
Рефакторинг
• Удалите из написанного кода любое дублирование, получив чистый код
НАПИСАНИЕ ТЕСТА
Принцип “тестируйте”
Экстремальное программирование - разработка через тестирование Кент Бек
Принцип: Assert First
• Начните тест с написания того, что вы хотите проверить, то есть с assert
Значения для тестов
• Тестовые данные должны быть как можно проще, но информативными
• Реалистичные данные:– Тестирование систем реального времени с
использованием цепочек реальных событий– Сравнение поведения старой и новой системы– Проверка неизменности поведения кода
имитирующего реальный процесс после рефакторинга
Принцип: Понятные данные
Экстремальное программирование - разработка через тестирование Кент Бек
Принцип: Понятные данные
Экстремальное программирование - разработка через тестирование Кент Бек
RED
Принцип: One Step Test
• Есть список задач – Tests List• С какого теста начать?
Принцип: Starter Test
• Начните с теста, который ничего не делает• Ответьте на вопрос, где должна
располагаться операция
Принцип: Explanation Test
• Для любого объяснения используйте тесты• Это способ распространения TDD в команде
Принцип: Learning Test
• Способ проверить догадки о том, как себя ведёт библиотека
• Возможность быстро проверять совместимость при выходе новых версий
Принцип: Another Test
• Когда возникает интересная посторонняя мысль, то запишите её в список и отложите
Принцип: Regression Test
• Что необходимо сделать первым после того, как был обнаружен баг?
• Конечно же написать тест!
Принципы эффективности
• Перерыв (break)
• Начать сначала (do over)
Экстремальное программирование - разработка через тестирование Кент Бек
Паттерн: Самошунтирование (Self Shunt)
• Каким образом убедиться, что ваш объект корректно взаимодействует с другим?
• Заставьте объект взаимодействовать не с целевым объектом, а с вашим тестом
Паттерн: Broken Test
• В конце работы оставьте последний тест сломанным, чтобы затем с него и начать работу после перерыва
GREEN
Приёмы быстрого получения зелёной полосы
• Подделай это (Fake It)• Триангуляция (Triangulation)• Очевидная реализация (Obvious
Implementation)• От одного ко многим (One to Many)
Приём Fake It
• Сделайте так, чтобы тестируемый код возвращал такую константу, что тест станет зелёным
Приём Triangulation
• Выставляйте ограничения в тестах• Постепенно увеличивайте абстрактность в
коде• Используем, если не уверены в том, какая
абстракция будет корректной
Приём Obvious Implementation
• Является большим шагом, то есть увеличивает темп
• Поэтому использование рискованно
Темп
• Если вы уверены, то можно двигаться большими шагами
• Если вы ошибаетесь, то надо вернуться на шаг назад и снизить темп
РЕФАКТОРИНГ
Правила
• Получите чистый код• После каждого изменения запускайте тесты• Подробнее об этом в презентации
«Refactoring»
ЗАКЛЮЧЕНИЕ
Необходимые навыки
• Владение Fake It, Triangulation & Obvious Implementation
• Умение удалять дублирование логики между кодом и тестами
• Способность контролировать скорость
TDD и архитектура
• Этап рефакторинга позволяет нам получать хорошую архитектуру
• Получаем Simple Design• Необходимо стратегическое видение
архитектуры. Для его получения можно использовать, например, CRC карты