Test Driven DevelopmentAnton Katkov
Как прийти к TDD?• Если тесты – это хорошо, то почему бы не  создавать их для всего кода?• Тесты, как спецификация• TDD - ...
Алгоритм1. Быстро создать новый тест2. Запустить все тесты и обнаружить, что новый   тест не проходит3. Внести небольшие и...
Рекомендации• Никогда не нарушайте последовательность шагов• Начинайте с малого• Не бойтесь ошибиться (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)• Очевидная реализация (Obvi...
Приём Fake It• Сделайте так, чтобы тестируемый код  возвращал такую константу, что тест станет  зелёным
Приём Triangulation• Выставляйте ограничения в тестах• Постепенно увеличивайте абстрактность в  коде• Используем, если не ...
Приём Obvious Implementation• Является большим шагом, то есть  увеличивает темп• Поэтому использование рискованно
Темп• Если вы уверены, то можно двигаться  большими шагами• Если вы ошибаетесь, то надо вернуться на  шаг назад и снизить ...
РЕФАКТОРИНГ
Правила• Получите чистый код• После каждого изменения запускайте тесты• Подробнее об этом в презентации  «Refactoring»
ЗАКЛЮЧЕНИЕ
Необходимые навыки• Владение Fake It, Triangulation & Obvious  Implementation• Умение удалять дублирование логики  между к...
TDD и архитектура• Этап рефакторинга позволяет нам получать  хорошую архитектуру• Получаем Simple Design• Необходимо страт...
Upcoming SlideShare
Loading in...5
×

AgileCamp’11 Новосибирск - Test Driven Development (TDD)

1,298

Published on

материал с конференции http://camp.agiledays.ru

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,298
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
28
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

AgileCamp’11 Новосибирск - Test Driven Development (TDD)

  1. 1. Test Driven DevelopmentAnton Katkov
  2. 2. Как прийти к TDD?• Если тесты – это хорошо, то почему бы не создавать их для всего кода?• Тесты, как спецификация• TDD - это принцип «разделяй и властвуй» для получения «чистого кода, который работает»
  3. 3. Алгоритм1. Быстро создать новый тест2. Запустить все тесты и обнаружить, что новый тест не проходит3. Внести небольшие изменения в код4. Снова запустить все тесты и на этот раз зафиксировать, что все они успешно срабатывают5. Провести рефакторинг для устранения дублирования6. Goto 1
  4. 4. Рекомендации• Никогда не нарушайте последовательность шагов• Начинайте с малого• Не бойтесь ошибиться (Courage)• Не беритесь за все подзадачи сразу. Вместо этого выписывайте каждую подзадачу на лист бумаги и беритесь в один момент времени только за один листочек.• Выбирайте те подзадачи, которые дадут вам наиболее полезную информацию• «Не прерывайте прерывание»
  5. 5. RED-GREEN-REFACTOR МАНТРА
  6. 6. Этапы цикла
  7. 7. Red• Напишите небольшой тест, который не работает или даже не компилируется
  8. 8. Green• Заставьте тест работать как можно быстрее, не задумываясь при этом о правильности дизайна и чистоте кода. Напишите минимум, который необходим для получения зелёной полосы.
  9. 9. Рефакторинг• Удалите из написанного кода любое дублирование, получив чистый код
  10. 10. НАПИСАНИЕ ТЕСТА
  11. 11. Принцип “тестируйте”Экстремальное программирование - разработка через тестированиеКент Бек
  12. 12. Принцип: Assert First• Начните тест с написания того, что вы хотите проверить, то есть с assert
  13. 13. Значения для тестов• Тестовые данные должны быть как можно проще, но информативными• Реалистичные данные: – Тестирование систем реального времени с использованием цепочек реальных событий – Сравнение поведения старой и новой системы – Проверка неизменности поведения кода имитирующего реальный процесс после рефакторинга
  14. 14. Принцип: Понятные данныеЭкстремальное программирование - разработка через тестированиеКент Бек
  15. 15. Принцип: Понятные данныеЭкстремальное программирование - разработка через тестированиеКент Бек
  16. 16. RED
  17. 17. Принцип: One Step Test• Есть список задач – Tests List• С какого теста начать?
  18. 18. Принцип: Starter Test• Начните с теста, который ничего не делает• Ответьте на вопрос, где должна располагаться операция
  19. 19. Принцип: Explanation Test• Для любого объяснения используйте тесты• Это способ распространения TDD в команде
  20. 20. Принцип: Learning Test• Способ проверить догадки о том, как себя ведёт библиотека• Возможность быстро проверять совместимость при выходе новых версий
  21. 21. Принцип: Another Test• Когда возникает интересная посторонняя мысль, то запишите её в список и отложите
  22. 22. Принцип: Regression Test• Что необходимо сделать первым после того, как был обнаружен баг?• Конечно же написать тест!
  23. 23. Принципы эффективности• Перерыв (break)• Начать сначала (do over)Экстремальное программирование - разработка через тестированиеКент Бек
  24. 24. Паттерн: Самошунтирование (Self Shunt)• Каким образом убедиться, что ваш объект корректно взаимодействует с другим?• Заставьте объект взаимодействовать не с целевым объектом, а с вашим тестом
  25. 25. Паттерн: Broken Test• В конце работы оставьте последний тест сломанным, чтобы затем с него и начать работу после перерыва
  26. 26. GREEN
  27. 27. Приёмы быстрого получения зелёной полосы• Подделай это (Fake It)• Триангуляция (Triangulation)• Очевидная реализация (Obvious Implementation)• От одного ко многим (One to Many)
  28. 28. Приём Fake It• Сделайте так, чтобы тестируемый код возвращал такую константу, что тест станет зелёным
  29. 29. Приём Triangulation• Выставляйте ограничения в тестах• Постепенно увеличивайте абстрактность в коде• Используем, если не уверены в том, какая абстракция будет корректной
  30. 30. Приём Obvious Implementation• Является большим шагом, то есть увеличивает темп• Поэтому использование рискованно
  31. 31. Темп• Если вы уверены, то можно двигаться большими шагами• Если вы ошибаетесь, то надо вернуться на шаг назад и снизить темп
  32. 32. РЕФАКТОРИНГ
  33. 33. Правила• Получите чистый код• После каждого изменения запускайте тесты• Подробнее об этом в презентации «Refactoring»
  34. 34. ЗАКЛЮЧЕНИЕ
  35. 35. Необходимые навыки• Владение Fake It, Triangulation & Obvious Implementation• Умение удалять дублирование логики между кодом и тестами• Способность контролировать скорость
  36. 36. TDD и архитектура• Этап рефакторинга позволяет нам получать хорошую архитектуру• Получаем Simple Design• Необходимо стратегическое видение архитектуры. Для его получения можно использовать, например, CRC карты
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×