SlideShare una empresa de Scribd logo
1 de 14
Киреев Артем
   Разработчик
Codemasters Intl.


    est1908@gmail.com
I. Происхождение TDD
II. Основные принципы TDD
III. Мотивации использования TDD
IV. TDD Best practices
V. Пример TDD
VI. TDD – FAQ
Каскадные

          Как
                                                 ISO
       получится
                                      ГОСТ

Низкоформализованные                       Высокоформализованные



                               RUP

      XProgramming
                       Scrum
   Канбан                            Итерационные
Customer
                            Tests



            Collective                      Coding
            Ownership         TDD          Standart

                                                            Whole
 Small
                                                            Team
Releases         Pair                  Refactoring
             Programming


           Continuous        Simple         40h Week
           Integration       Design

                                                 Planning
                            Metaphor
                                                  Game
Customer
                            Tests



            Collective                      Coding
            Ownership       TDD            Standart

                                                            Whole
 Small
                                                            Team
Releases         Pair                  Refactoring
             Programming


           Continuous        Simple         40h Week
           Integration       Design

                                                 Planning
                            Metaphor
                                                  Game
Простые программные решения
Цель TDD:
                 Тесты придающие уверенность в работе

Всего 2 правила:
      1. Пишем новый код, только тогда когда тест не сработал
      2. Удаляем дублирование

Мантра TDD                             Написать тест
                                       который не проходит
                               RED




                                                      Написать код,
                                                      чтобы тест проходил
                REFACTOR                   GREEN
 Убрать
 дублирование
Добавляем тест
                                       Тесты прошли

          Запускаем все тесты
                    Тесты не прошли
         Добавляем небольшие
              изменения
                                       Тесты не прошли

       Снова запускаем все тесты



              Рефакторинг
                                      Тесты прошли
Тесты не прошли
 Не писать лишнего кода

 Проектировать less coupled системы

 Возвращаться к коду

 Начинать разрабатывать не теряя время
 Темп разработки

 С первого раза (а значит быстрее) решать сложные задачи

 Контролировать стресс. Постоянно видеть прогресс.

 Исправлять ошибки на раннем этапе разработки
UnitTest – читаемый, простой, малосвязанный, быстрый
Лучше много простых тестов, чем один сложный.
Начинаем писать тест с «Assert»
Сначала пишем самые простые тесты
Список желаемых тестов на бумаге, не в коде и не в уме
Тесты должны работать быстро
  Темп разработки
Не пишем код, пока на него нет теста
Пишем наиболее простой код, необходимый чтобы тест прошел
Только что написанный тест должен падать (работает в 99%)
После успешного прохождения теста - рефакторить
Все тесты должны проходить перед написанием нового теста
Рефакторинги и паттерны – друзья TDD
Создание игры «Пятнашки»
 Сколько писать тестов?
 Можно ли начать использовать TDD прямо сейчас на
текущем проекте?

 Можно     ли   использовать   TDD     для   разработки

крупномасштабных систем?
 Какие есть подходы cвязанные c TDD?
 Негативные стороны TDD
…
 Все проблемы UnitTest-ов

 Не поддерживаются IntelliSense like tools

 Тесты тоже требует рефакторингов.
  Темп разработки
 Сложно применить TDD на плохой код

 Тесты не гарантируют отсутствие ошибок
Не пишем код, пока на него нет теста
                                        Простые программные решения
Список тестов на бумаге


                                                  Покрытие тестами
    Refactor


                                                 Less coupled modules
     Assert First



  Сначала простые тесты
                                            Уверенность в работе

     Идем к цели маленькими шажками

Más contenido relacionado

La actualidad más candente

Anton Sytnyk ITEM 2018
Anton Sytnyk ITEM 2018Anton Sytnyk ITEM 2018
Anton Sytnyk ITEM 2018ITEM
 
Mva stf module 6 - rus
Mva stf module 6 - rusMva stf module 6 - rus
Mva stf module 6 - rusMaxim Shaptala
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...HappyDev
 
Антон Непомнящих - 100 лет без авралов или зачем проекту креативный менеджер ...
Антон Непомнящих - 100 лет без авралов или зачем проекту креативный менеджер ...Антон Непомнящих - 100 лет без авралов или зачем проекту креативный менеджер ...
Антон Непомнящих - 100 лет без авралов или зачем проекту креативный менеджер ...HappyDev
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileKairat Yussupov
 
Bdd with java_using_concordion_and_selenium_ui_tests
Bdd with java_using_concordion_and_selenium_ui_testsBdd with java_using_concordion_and_selenium_ui_tests
Bdd with java_using_concordion_and_selenium_ui_testsOleksiy Rezchykov
 
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...CUSTIS
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllMykyta Hopkalo
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Technopark
 
7 принципов эффективного тестирования
7 принципов эффективного тестирования7 принципов эффективного тестирования
7 принципов эффективного тестированияak-itconsulting.com
 
Introduction into Test Driven Development
Introduction into Test Driven DevelopmentIntroduction into Test Driven Development
Introduction into Test Driven DevelopmentIvan Dyachenko
 
Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?SQALab
 
Тестирование для не-тестировщиков
Тестирование для не-тестировщиковТестирование для не-тестировщиков
Тестирование для не-тестировщиковJulia Nechaeva
 
Михаил Павлов - is a tester responsible for quality
Михаил Павлов - is a tester responsible for qualityМихаил Павлов - is a tester responsible for quality
Михаил Павлов - is a tester responsible for qualityAlexei Lupan
 
Mva stf module 2 - rus
Mva stf module 2 - rusMva stf module 2 - rus
Mva stf module 2 - rusMaxim Shaptala
 

La actualidad más candente (19)

Anton Sytnyk ITEM 2018
Anton Sytnyk ITEM 2018Anton Sytnyk ITEM 2018
Anton Sytnyk ITEM 2018
 
Mva stf module 6 - rus
Mva stf module 6 - rusMva stf module 6 - rus
Mva stf module 6 - rus
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
Tdd
TddTdd
Tdd
 
Антон Непомнящих - 100 лет без авралов или зачем проекту креативный менеджер ...
Антон Непомнящих - 100 лет без авралов или зачем проекту креативный менеджер ...Антон Непомнящих - 100 лет без авралов или зачем проекту креативный менеджер ...
Антон Непомнящих - 100 лет без авралов или зачем проекту креативный менеджер ...
 
Continious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-AgileContinious integration-Automated Testing-Solid-Agile
Continious integration-Automated Testing-Solid-Agile
 
Bdd with java_using_concordion_and_selenium_ui_tests
Bdd with java_using_concordion_and_selenium_ui_testsBdd with java_using_concordion_and_selenium_ui_tests
Bdd with java_using_concordion_and_selenium_ui_tests
 
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...
Аналитик и Тестировщик в одном лице – путь к качеству (Максим Цепков, SQA Day...
 
Do you speak TDD
Do you speak TDDDo you speak TDD
Do you speak TDD
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
 
QAFest. Роль тестирования в Devops
QAFest. Роль тестирования в DevopsQAFest. Роль тестирования в Devops
QAFest. Роль тестирования в Devops
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 
7 принципов эффективного тестирования
7 принципов эффективного тестирования7 принципов эффективного тестирования
7 принципов эффективного тестирования
 
Introduction into Test Driven Development
Introduction into Test Driven DevelopmentIntroduction into Test Driven Development
Introduction into Test Driven Development
 
Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?Как принести пользу разработке и упростить себе жизнь?
Как принести пользу разработке и упростить себе жизнь?
 
Тестирование для не-тестировщиков
Тестирование для не-тестировщиковТестирование для не-тестировщиков
Тестирование для не-тестировщиков
 
Михаил Павлов - is a tester responsible for quality
Михаил Павлов - is a tester responsible for qualityМихаил Павлов - is a tester responsible for quality
Михаил Павлов - is a tester responsible for quality
 
Mva stf module 2 - rus
Mva stf module 2 - rusMva stf module 2 - rus
Mva stf module 2 - rus
 

Destacado

WebCamp:Front-end Developers Day. Сергей Селецкий "Как писать код лучше, испо...
WebCamp:Front-end Developers Day. Сергей Селецкий "Как писать код лучше, испо...WebCamp:Front-end Developers Day. Сергей Селецкий "Как писать код лучше, испо...
WebCamp:Front-end Developers Day. Сергей Селецкий "Как писать код лучше, испо...GeeksLab Odessa
 
Введение в Knockout
Введение в Knockout Введение в Knockout
Введение в Knockout Pavel Tsukanov
 
Thinking in parallel ab tuladev
Thinking in parallel ab tuladevThinking in parallel ab tuladev
Thinking in parallel ab tuladevPavel Tsukanov
 
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...Pavel Tsukanov
 
Sql azure federations
Sql azure federations Sql azure federations
Sql azure federations Pavel Tsukanov
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMKNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMPavel Tsukanov
 
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.Pavel Tsukanov
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИSIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИPavel Tsukanov
 
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Pavel Tsukanov
 
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.Pavel Tsukanov
 
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++Pavel Tsukanov
 
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВРАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВPavel Tsukanov
 
Domain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требованийDomain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требованийCUSTIS
 
Автоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriverАвтоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriverPavel Tsukanov
 
Реализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFРеализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFPavel Tsukanov
 

Destacado (20)

PaaS и SaaS
PaaS и SaaSPaaS и SaaS
PaaS и SaaS
 
Visual CV
Visual CVVisual CV
Visual CV
 
Tdd php
Tdd phpTdd php
Tdd php
 
WebCamp:Front-end Developers Day. Сергей Селецкий "Как писать код лучше, испо...
WebCamp:Front-end Developers Day. Сергей Селецкий "Как писать код лучше, испо...WebCamp:Front-end Developers Day. Сергей Селецкий "Как писать код лучше, испо...
WebCamp:Front-end Developers Day. Сергей Селецкий "Как писать код лучше, испо...
 
Введение в Knockout
Введение в Knockout Введение в Knockout
Введение в Knockout
 
Thinking in parallel ab tuladev
Thinking in parallel ab tuladevThinking in parallel ab tuladev
Thinking in parallel ab tuladev
 
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
ЭЛЕМЕНТЫ ИСКУСТВЕННОГО ИНТЕЛЛЕКТА ПРИ ПРОГРАММИРОВАНИИ. (http://tuladev.net/e...
 
RESPONSIVE WEB DESIGN
RESPONSIVE WEB DESIGNRESPONSIVE WEB DESIGN
RESPONSIVE WEB DESIGN
 
Sql azure federations
Sql azure federations Sql azure federations
Sql azure federations
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMKNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
 
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
Алгоритмы шифрования и их применение в .Net приложениях для защиты данных.
 
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИSIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
SIGNALR - ОБМЕН СООБЩЕНИЯМИ В РЕАЛЬНОМ ВРЕМЕНИ
 
Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)Основы "мобильной" разработки на примере платформы iOs (iPhone)
Основы "мобильной" разработки на примере платформы iOs (iPhone)
 
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
РАЗРАБОТКА ПО С ИСПОЛЬЗОВАНИЕМ FINITE STATE MACHINE.
 
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
 
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВРАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
РАЗРАБОТКА МОБИЛЬНЫХ САЙТОВ
 
Unit tests
Unit testsUnit tests
Unit tests
 
Domain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требованийDomain-Driven Design: Модель вместо требований
Domain-Driven Design: Модель вместо требований
 
Автоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriverАвтоматизированное тестирование UI на C# + Selenium WebDriver
Автоматизированное тестирование UI на C# + Selenium WebDriver
 
Реализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCFРеализация REST и SOAP сервисов с помощью WCF
Реализация REST и SOAP сервисов с помощью WCF
 

Similar a TDD (Test-driven Development) как стиль разработки.

Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
 
уразбаев асхат - процесс улучшения процесса улучшения процесса
уразбаев асхат - процесс улучшения процесса улучшения процессауразбаев асхат - процесс улучшения процесса улучшения процесса
уразбаев асхат - процесс улучшения процесса улучшения процессаMagneta AI
 
Рефакторинг
РефакторингРефакторинг
РефакторингSmartStepGroup
 
Код-ревью в Drupal
Код-ревью в DrupalКод-ревью в Drupal
Код-ревью в DrupalShvetsGroup
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»DataArt
 
Bdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui testsBdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui testsautomated-testing.info
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Technopark
 
Tdd objective c
Tdd objective cTdd objective c
Tdd objective cUA Mobile
 
Практика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanПрактика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanAlexander Byndyu
 
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)Evgeny Kaziak
 
Ошибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияОшибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияzheldak
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1sgdread
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...Sergey Ponomarev
 

Similar a TDD (Test-driven Development) как стиль разработки. (20)

Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
уразбаев асхат - процесс улучшения процесса улучшения процесса
уразбаев асхат - процесс улучшения процесса улучшения процессауразбаев асхат - процесс улучшения процесса улучшения процесса
уразбаев асхат - процесс улучшения процесса улучшения процесса
 
Рефакторинг
РефакторингРефакторинг
Рефакторинг
 
Quality assurance
Quality assuranceQuality assurance
Quality assurance
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
TDD
TDDTDD
TDD
 
Код-ревью в Drupal
Код-ревью в DrupalКод-ревью в Drupal
Код-ревью в Drupal
 
Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»Роман Кокин «Организация тестирования в больших командах»
Роман Кокин «Организация тестирования в больших командах»
 
Tdd from the middle
Tdd from the middleTdd from the middle
Tdd from the middle
 
Bdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui testsBdd with java using concordion and selenium ui tests
Bdd with java using concordion and selenium ui tests
 
What Tests Are For?
What Tests Are For?What Tests Are For?
What Tests Are For?
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
 
Tdd objective c
Tdd objective cTdd objective c
Tdd objective c
 
Tdd Оbjective-С
Tdd Оbjective-СTdd Оbjective-С
Tdd Оbjective-С
 
Практика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к KanbanПрактика работы с крупными проектами - от Scrum с XP к Kanban
Практика работы с крупными проектами - от Scrum с XP к Kanban
 
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
 
Ошибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияОшибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы применения
 
Code review psyhology
Code review psyhologyCode review psyhology
Code review psyhology
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1
 
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...серёжа пономарёв @ Kuchyn.com.ua junior java developer  программируем по-взро...
серёжа пономарёв @ Kuchyn.com.ua junior java developer программируем по-взро...
 

Más de Pavel Tsukanov

МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVМАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVPavel Tsukanov
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYCONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYPavel Tsukanov
 
СОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯСОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯPavel Tsukanov
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS Pavel Tsukanov
 
АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5Pavel Tsukanov
 
ХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫPavel Tsukanov
 
ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.Pavel Tsukanov
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Pavel Tsukanov
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода Pavel Tsukanov
 
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже. Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже. Pavel Tsukanov
 

Más de Pavel Tsukanov (14)

Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCVМАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
МАШИННОЕ ЗРЕНИЕ С ИСПОЛЬЗОВАНИЕ OPENCV
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYCONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
 
СОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯСОЗДАЙ РОБОТА С НУЛЯ
СОЗДАЙ РОБОТА С НУЛЯ
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
Лекция Android
Лекция AndroidЛекция Android
Лекция Android
 
АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5АНИМАЦИЯ В FLASH И HTML5
АНИМАЦИЯ В FLASH И HTML5
 
ХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫХАКЕРЫ И АНТИХАКЕРЫ
ХАКЕРЫ И АНТИХАКЕРЫ
 
ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.ЗАРАБОТОК В ИНТЕРНЕТЕ.
ЗАРАБОТОК В ИНТЕРНЕТЕ.
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже. Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
Применение нейронных сетей и генетических алгоритмов при торговле на бирже.
 

TDD (Test-driven Development) как стиль разработки.

  • 1. Киреев Артем Разработчик Codemasters Intl. est1908@gmail.com
  • 2. I. Происхождение TDD II. Основные принципы TDD III. Мотивации использования TDD IV. TDD Best practices V. Пример TDD VI. TDD – FAQ
  • 3. Каскадные Как ISO получится ГОСТ Низкоформализованные Высокоформализованные RUP XProgramming Scrum Канбан Итерационные
  • 4. Customer Tests Collective Coding Ownership TDD Standart Whole Small Team Releases Pair Refactoring Programming Continuous Simple 40h Week Integration Design Planning Metaphor Game
  • 5. Customer Tests Collective Coding Ownership TDD Standart Whole Small Team Releases Pair Refactoring Programming Continuous Simple 40h Week Integration Design Planning Metaphor Game
  • 6. Простые программные решения Цель TDD: Тесты придающие уверенность в работе Всего 2 правила: 1. Пишем новый код, только тогда когда тест не сработал 2. Удаляем дублирование Мантра TDD Написать тест который не проходит RED Написать код, чтобы тест проходил REFACTOR GREEN Убрать дублирование
  • 7. Добавляем тест Тесты прошли Запускаем все тесты Тесты не прошли Добавляем небольшие изменения Тесты не прошли Снова запускаем все тесты Рефакторинг Тесты прошли Тесты не прошли
  • 8.  Не писать лишнего кода  Проектировать less coupled системы  Возвращаться к коду  Начинать разрабатывать не теряя время Темп разработки  С первого раза (а значит быстрее) решать сложные задачи  Контролировать стресс. Постоянно видеть прогресс.  Исправлять ошибки на раннем этапе разработки
  • 9.
  • 10. UnitTest – читаемый, простой, малосвязанный, быстрый Лучше много простых тестов, чем один сложный. Начинаем писать тест с «Assert» Сначала пишем самые простые тесты Список желаемых тестов на бумаге, не в коде и не в уме Тесты должны работать быстро Темп разработки Не пишем код, пока на него нет теста Пишем наиболее простой код, необходимый чтобы тест прошел Только что написанный тест должен падать (работает в 99%) После успешного прохождения теста - рефакторить Все тесты должны проходить перед написанием нового теста Рефакторинги и паттерны – друзья TDD
  • 12.  Сколько писать тестов?  Можно ли начать использовать TDD прямо сейчас на текущем проекте?  Можно ли использовать TDD для разработки крупномасштабных систем?  Какие есть подходы cвязанные c TDD?  Негативные стороны TDD …
  • 13.  Все проблемы UnitTest-ов  Не поддерживаются IntelliSense like tools  Тесты тоже требует рефакторингов. Темп разработки  Сложно применить TDD на плохой код  Тесты не гарантируют отсутствие ошибок
  • 14. Не пишем код, пока на него нет теста Простые программные решения Список тестов на бумаге Покрытие тестами Refactor Less coupled modules Assert First Сначала простые тесты Уверенность в работе Идем к цели маленькими шажками

Notas del editor

  1. Существует множество методологий разработки ПО. Их можно характеризовать по 2-м параметрам.Речь пойдет о XPКаскадная методология также называемая «водопад» делит весь процесс разработки на несколько фаз, каждая включает в себя конкретный набор работ. Итеративная же разработка разбивает проект на итерация в каждой из которой выполняется почти все виды работ, от проектирования до внедрения и в конце каждой итерации мы можем видеть раюотающий продукт с нарастающей функциональностью.
  2. XP одна из гибких (Agile) методологих разработки ПО.Ее можно описать как 12 практик:Постоянное присутсвие заказчика,Команда находится рядом, в одной комнатеИгра в планированиеКороткие релизыСтандарты кодирования40-часовая рабочая неделяМетафорыПостоянная интеграцияКоллективное владение кодомПарное программированиеРефакторингПростой дизайнРазработка через тестирование
  3. TDD – одна из практик Экстремального программирования. Одним из первых ее последователей, как и всего XP был Кент Бекер.Он написал книжку по XP и другую по TDD.Использование TDD тесно связано и использованием других практик XP и позволяет нам не уходить от них в процессе разработки ПО.Никто не мешает использовать TDD отдельно.
  4. Test-DrivenDevelopment— разработка через тестирование.Буквально можно перевести как «разработка, ведомая тестами» или «разработкаисходя из тестов».
  5. Задачу следует разбивать на мельких шажки, на столько мелкие на сколько требуется для ее комфортного решения.3  В рамках T DD вы пишете только тот код, который необ-, ходим для срабатывания тестов, вы удаляете из него любое дублирование,значит, вы автоматически получаете код, который идеально адаптирован к' текущим требованиям и подготовлен к любым будущим пожеланиям.
  6. 1 TDD обязывает нас писать только нужный код – пишем только нужный код, ничего лишнего. Это один из принципов применяымый в XP. Потомучто код спроектированный на будущие, будет дня нас впоследствии обузой он будет тянуть ненужные связи и его нужно будет тоже рефакторить. А запланированная функциональность может вовсе не пригодиться или стать не акутальный в связи с измененными требованиями.2. Как известно хороший unit-test тот который не имеет зависимостей на внешние ресурсы (БД, Сеть, интрернет, файловая система), просто написан и быстро работает. Только при наборе таких тестов мы сможем эффективно применять ТДД.Мы пишем сначала тест, а потом код, значит не имеет никаких требования со стороны кода влияющих на дизайн теста.Поэтому мы можем в самом начале выбрать путь абстракции от внешний ресурсов. Не всегда правда оптимальный 3. Возвращаться к коду – TDD позволяет взглянуть на написанный код несколько раз.  Вы можете держать в голове кучу задач которые должен выполнять код который вы напишите с первого раза.     Или несколько раз будите возвращаться к нему с целью внести новые требования.не сразу с целью реализовать все возможное.4 Начинать разрабатывать не теряя время.Не имея большого опыта в проектирования систем, тяжело или невозможно сразу применить паттерныщиепримлимый дизайн которй будет соттветсвовть требованиям.Использую TDD мы разбиваем задачу на маленькие шажки (настолько маленькие насколько нужно) и постепенно адаптриуем с помощью рефакторингов и паттернов систему к каждому их требований.Это медленно? Я бы не сказал – в итоге мы получаем неплохо спроектированную систему полностью покрытую юнит тестами.Также с большой долей вероятности у нас нет риска переписывания системы с нуля. Так как мы движемся к цели маленькими шажками от теста к теста.5 С первого раза (а значит быстрее) решать сложные задачиБывает тяжело сразу прикинуть в голове как должен быть реализован тот или иной сложный алгоритм.Мы движемся к решению сложной задачи (алгоритма) маленькими шажками, настолько маленькими насколько это удобно нам. И постепенно адаптируем алгоритм ко всем нужным требованиям.6 Контролировать стрессДопустим у нас имеется крупная задача. Мы тратим неделю на ее проектировку и кодирования. Полученный результат мы может увидеть только спустя неделю. И начинается процесс поиска и справленияошибко, может быть даже нам придеться вернуться к самому началу, если выбранный дизайн будет тяжело В TDD мы уверенно движемся к цели мельники шажками. Результат очередного изменения коды мы видим моментально сразу после запуска всех тестов.Мы идем к цели успешно решаю маленькие задачи и чувствуем себя комфортно.
  7. 1 TDD обязывает нас писать только нужный код – пишем только нужный код, ничего лишнего. Это один из принципов применяымый в XP. Потомучто код спроектированный на будущие, будет дня нас впоследствии обузой он будет тянуть ненужные связи и его нужно будет тоже рефакторить. А запланированная функциональность может вовсе не пригодиться или стать не акутальный в связи с измененными требованиями.2. Как известно хороший unit-test тот который не имеет зависимостей на внешние ресурсы (БД, Сеть, интрернет, файловая система), просто написан и быстро работает. Только при наборе таких тестов мы сможем эффективно применять ТДД.Мы пишем сначала тест, а потом код, значит не имеет никаких требования со стороны кода влияющих на дизайн теста.Поэтому мы можем в самом начале выбрать путь абстракции от внешний ресурсов. Не всегда правда оптимальный 3. Возвращаться к коду – TDD позволяет взглянуть на написанный код несколько раз.  Вы можете держать в голове кучу задач которые должен выполнять код который вы напишите с первого раза.     Или несколько раз будите возвращаться к нему с целью внести новые требования.не сразу с целью реализовать все возможное.4 Начинать разрабатывать не теряя время.Не имея большого опыта в проектирования систем, тяжело или невозможно сразу применить паттерныщиепримлимый дизайн которй будет соттветсвовть требованиям.Использую TDD мы разбиваем задачу на маленькие шажки (настолько маленькие насколько нужно) и постепенно адаптриуем с помощью рефакторингов и паттернов систему к каждому их требований.Это медленно? Я бы не сказал – в итоге мы получаем неплохо спроектированную систему полностью покрытую юнит тестами.Также с большой долей вероятности у нас нет риска переписывания системы с нуля. Так как мы движемся к цели маленькими шажками от теста к теста.5 С первого раза (а значит быстрее) решать сложные задачиБывает тяжело сразу прикинуть в голове как должен быть реализован тот или иной сложный алгоритм.Мы движемся к решению сложной задачи (алгоритма) маленькими шажками, настолько маленькими насколько это удобно нам. И постепенно адаптируем алгоритм ко всем нужным требованиям.6 Контролировать стрессДопустим у нас имеется крупная задача. Мы тратим неделю на ее проектировку и кодирования. Полученный результат мы может увидеть только спустя неделю. И начинается процесс поиска и справленияошибко, может быть даже нам придеться вернуться к самому началу, если выбранный дизайн будет тяжело В TDD мы уверенно движемся к цели мельники шажками. Результат очередного изменения коды мы видим моментально сразу после запуска всех тестов.Мы идем к цели успешно решаю маленькие задачи и чувствуем себя комфортно.
  8. 3 Assert first - Начинаем писать тест со слова Assert. потом развиваем дальше.4 Я бы сказал не пишем код для реализации нового требования к системе если на него нет тестов
  9. Сколько писать тестов?"Пишите тесты до тех пор пока страх не превратиться в скуку." PhlipPlumlee. Я придерживаюсь того же мнения- Можно ли начать использорвать TDD прямо сейчас? Да можно на текущем проекте.Да. можно разрабытывать отдельные части и модули с помощью TDD,Можно ли использовать TDD для разработки крупномасштабных систем?ДаTDD будет там скорее выгоднее, потомучто вы получите модульную систему с покрытыми тестами бизнес функциямиКакие есть пути развития TDDATDDTDDD – Test Driven Database developmentBDD – Behaviour drivendeveolopment Следующим шагом, органично дополняющим эволюционировавший TDD является BDD — BehaviorDrivenDevelopment.Суть BDD — в описании системы архитектуры приложения в терминах эксперта предметной области, а не программиста, что позволяет ускорить процесс получения обратной связи и убрать традиционные языковые барьеры между создателями ПО и его пользователями.С помощью BDD тестировать систему (или, как сейчас принято говорить, описывать сценарии взаимодействия) может не только сам программист, пишущий код, но и PM, не разбирающийся в деталях реализации, но хорошо знающий систему с точки зрения пользователя. Для новичков BDD-скрипты — самый простой и натуральный пусть ознакомиться с документацией проекта.
  10. Все проблемы UnitTest-овМногопоточность, связанность с Не поддерживаются IntelliSenselike toolsТак как тест пишется на код которого нет, и поначалу даже не компилируется. То мы лишаемся поддержикиIntelliSenseТесты тоже требует рефакторингаПотеря времени при рефакторинге Сложно применить TDD на плохойкодДопустим вам нужно добавить бизнесу функцию, и вы хотите написать сначала тест.А ваш коллега написал плохой coupled код, который заязван на UI.Неэффективен на проектах, с минимальной бизнес логикой. UI tools
  11. Test-DrivenDevelopment— разработка через тестирование.Буквально можно перевести как «разработка, ведомая тестами» или «разработкаисходя из тестов».