AgileCamp’11 Новосибирск - Test Driven Development (TDD)
-
Upload
katkov-anton -
Category
Education
-
view
1.553 -
download
1
description
Transcript of AgileCamp’11 Новосибирск - Test Driven Development (TDD)
![Page 1: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/1.jpg)
Test Driven Development
Anton Katkov
![Page 2: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/2.jpg)
Как прийти к TDD?
• Если тесты – это хорошо, то почему бы не создавать их для всего кода?
• Тесты, как спецификация• TDD - это принцип «разделяй и властвуй»
для получения «чистого кода, который работает»
![Page 3: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/3.jpg)
Алгоритм
1. Быстро создать новый тест2. Запустить все тесты и обнаружить, что новый тест
не проходит3. Внести небольшие изменения в код4. Снова запустить все тесты и на этот раз
зафиксировать, что все они успешно срабатывают5. Провести рефакторинг для устранения
дублирования6. Goto 1
![Page 4: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/4.jpg)
Рекомендации
• Никогда не нарушайте последовательность шагов• Начинайте с малого• Не бойтесь ошибиться (Courage)• Не беритесь за все подзадачи сразу. Вместо этого
выписывайте каждую подзадачу на лист бумаги и беритесь в один момент времени только за один листочек.
• Выбирайте те подзадачи, которые дадут вам наиболее полезную информацию
• «Не прерывайте прерывание»
![Page 5: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/5.jpg)
RED-GREEN-REFACTOR МАНТРА
![Page 6: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/6.jpg)
Этапы цикла
![Page 7: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/7.jpg)
Red
• Напишите небольшой тест, который не работает или даже не компилируется
![Page 8: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/8.jpg)
Green
• Заставьте тест работать как можно быстрее, не задумываясь при этом о правильности дизайна и чистоте кода. Напишите минимум, который необходим для получения зелёной полосы.
![Page 9: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/9.jpg)
Рефакторинг
• Удалите из написанного кода любое дублирование, получив чистый код
![Page 10: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/10.jpg)
НАПИСАНИЕ ТЕСТА
![Page 11: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/11.jpg)
Принцип “тестируйте”
Экстремальное программирование - разработка через тестирование Кент Бек
![Page 12: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/12.jpg)
Принцип: Assert First
• Начните тест с написания того, что вы хотите проверить, то есть с assert
![Page 13: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/13.jpg)
Значения для тестов
• Тестовые данные должны быть как можно проще, но информативными
• Реалистичные данные:– Тестирование систем реального времени с
использованием цепочек реальных событий– Сравнение поведения старой и новой системы– Проверка неизменности поведения кода
имитирующего реальный процесс после рефакторинга
![Page 14: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/14.jpg)
Принцип: Понятные данные
Экстремальное программирование - разработка через тестирование Кент Бек
![Page 15: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/15.jpg)
Принцип: Понятные данные
Экстремальное программирование - разработка через тестирование Кент Бек
![Page 16: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/16.jpg)
RED
![Page 17: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/17.jpg)
Принцип: One Step Test
• Есть список задач – Tests List• С какого теста начать?
![Page 18: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/18.jpg)
Принцип: Starter Test
• Начните с теста, который ничего не делает• Ответьте на вопрос, где должна
располагаться операция
![Page 19: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/19.jpg)
Принцип: Explanation Test
• Для любого объяснения используйте тесты• Это способ распространения TDD в команде
![Page 20: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/20.jpg)
Принцип: Learning Test
• Способ проверить догадки о том, как себя ведёт библиотека
• Возможность быстро проверять совместимость при выходе новых версий
![Page 21: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/21.jpg)
Принцип: Another Test
• Когда возникает интересная посторонняя мысль, то запишите её в список и отложите
![Page 22: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/22.jpg)
Принцип: Regression Test
• Что необходимо сделать первым после того, как был обнаружен баг?
• Конечно же написать тест!
![Page 23: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/23.jpg)
Принципы эффективности
• Перерыв (break)
• Начать сначала (do over)
Экстремальное программирование - разработка через тестирование Кент Бек
![Page 24: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/24.jpg)
Паттерн: Самошунтирование (Self Shunt)
• Каким образом убедиться, что ваш объект корректно взаимодействует с другим?
• Заставьте объект взаимодействовать не с целевым объектом, а с вашим тестом
![Page 25: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/25.jpg)
Паттерн: Broken Test
• В конце работы оставьте последний тест сломанным, чтобы затем с него и начать работу после перерыва
![Page 26: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/26.jpg)
GREEN
![Page 27: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/27.jpg)
Приёмы быстрого получения зелёной полосы
• Подделай это (Fake It)• Триангуляция (Triangulation)• Очевидная реализация (Obvious
Implementation)• От одного ко многим (One to Many)
![Page 28: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/28.jpg)
Приём Fake It
• Сделайте так, чтобы тестируемый код возвращал такую константу, что тест станет зелёным
![Page 29: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/29.jpg)
Приём Triangulation
• Выставляйте ограничения в тестах• Постепенно увеличивайте абстрактность в
коде• Используем, если не уверены в том, какая
абстракция будет корректной
![Page 30: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/30.jpg)
Приём Obvious Implementation
• Является большим шагом, то есть увеличивает темп
• Поэтому использование рискованно
![Page 31: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/31.jpg)
Темп
• Если вы уверены, то можно двигаться большими шагами
• Если вы ошибаетесь, то надо вернуться на шаг назад и снизить темп
![Page 32: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/32.jpg)
РЕФАКТОРИНГ
![Page 33: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/33.jpg)
Правила
• Получите чистый код• После каждого изменения запускайте тесты• Подробнее об этом в презентации
«Refactoring»
![Page 34: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/34.jpg)
ЗАКЛЮЧЕНИЕ
![Page 35: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/35.jpg)
Необходимые навыки
• Владение Fake It, Triangulation & Obvious Implementation
• Умение удалять дублирование логики между кодом и тестами
• Способность контролировать скорость
![Page 36: AgileCamp’11 Новосибирск - Test Driven Development (TDD)](https://reader034.fdocuments.net/reader034/viewer/2022051312/547c1895b4af9fee468b46c1/html5/thumbnails/36.jpg)
TDD и архитектура
• Этап рефакторинга позволяет нам получать хорошую архитектуру
• Получаем Simple Design• Необходимо стратегическое видение
архитектуры. Для его получения можно использовать, например, CRC карты