SlideShare a Scribd company logo
REFACTORING
UNIT TESTING
TDD
Антон Бевзюк
Дмитрий Павлов
SmartStepGroup
9 лет опыта
Тренинги
Консультирование
Оценка процессов
Оптимизация процессов
Разработка
Контакты

http://get.cardmone.net
Правила
Перерывы
Жест
Никаких мобил
Ноуты только на упражнениях
Парковка
Рефакторинг
Что вас беспокоит?
ПАРНОЕ
ПРОГРАММИРОВАНИЕ
8

INTEL CONFIDENTIAL
, FOR INTERNAL USE ONLY
Зачем Нужна Пара?

Передача Знаний
Кросс-Функциональная
Команда

Отпуск!
Чаще меняйте партнеров!
Не жадничайте

Играйте в клавиатурный пинг-понг
Инструменты Парного
Программирования
Git
https://github.com/SmartStepGroup/RefactoringWorkshop
cd /c/projects
git clone
https://github.com/SmartStepGroup/RefactoringWorkshop.git

cd RefactoringWorkshop
Упражнение 0.
1. Добавить новый тип кино Series
2. Один фильм бесплатно за 10 поинтов
3. Новый отчет в HTML

20 минут
Прочитайте это …
Зачем нужен курс специалисту мы предлагаем Вам этоттренинг какпростойпонятныйинструмент
повышения стабильности процесса и повышения качества продукта более 50% времени мастер-класса мы
отводим на упражнения, где вы будете писать кодчто входит в курсмодульные тесты ключевой способ не
бояться изменений требований и постоянно держать качество и поддерживаемость продукта на высоте а
это напрямую влияет на Ваши вовлеченность и мотивацию резко повышая их testdrivendevelopment
изначально заточен на решение задачи длительной поддержки проекта и по нашим наблюдениям после
внедрения tdd разработчки обычно вздыхают полной грудью. Типовые муторные проблемы с
воспроизводством дефектов и внесением изменений становятся гораздо менее значимыми. Вы сразу и
автоматически получаете понятный поддерживаемый дизайн и глубокое покрытие тестами. Время
проведенное в дебаге стремится к нулюбаги перестаютбытьпроблемой поскольку каждую вновь
найденнуюпроблемуможно будет закрепить тестом ибольше кнейне возвращаться автоматические тесты
так же замещают ручную работу по проверке того или иного функционала перед тем, как отдать ее на
финальное тестирование практика TDD позволяет вспомнить давно забытое чувство – когда после
завершения очередного шага разработки все заводится без проблем и с первого раза. И поначалу это
может с непривычки даже пугать, но потом Вы привыкнете к этому ощущению драйва и «потока» и уже не
сможете писать код, не начав с тестаприменяя рефакторинг можно значительно повысить гибкость системы
при изменении требований и значительно снизить силы на поддержку и больше внимания уделять новому
функционалу. Согласитесь, разработчику всегда гораздо более комфортно работать с чистым понятным
кодом, и это резко повышает продуктивность команды. Помимо всего прочего, новые практики помогу
команде вырасти в техническом плане, перейти на "следующий уровень". Парная работа обязательно будет
способствовать быстрому распространению знаний и удачных подходов.
После 5 минут рефакторинга
Зачем нужен курс специалисту
Мы предлагаем Вам этот тренинг как простой понятный инструмент повышения стабильности процесса и повышения качества
продукта. Более 50% времени мастер-класса мы отводим на упражнения, где вы будете писать код.

Что входит в курс:
Модульные тесты
это ключевой способ не бояться изменений требований и постоянно держать качество и поддерживаемость продукта на
высоте. А это напрямую влияет на Ваши вовлеченность и мотивацию, резко повышая их.
Test-Driven Development
изначально заточен на решение задачи длительной поддержки проекта. И по нашим наблюдениям, после внедрения TDD
разработчки обычно вздыхают полной грудью. Типовые муторные проблемы с воспроизводством дефектов и внесением
изменений становятся гораздо менее значимыми. Вы сразу и автоматически получаете понятный поддерживаемый дизайн и
глубокое покрытие тестами. Время, проведенное в дебаге, стремится к нулю. Баги перестают быть проблемой, поскольку
каждую вновь найденную проблему можно будет закрепить тестом и больше к ней не возвращаться. Автоматические тесты так
же замещают ручную работу по проверке того или иного функционала перед тем, как отдать ее на финальное тестирование.
Практика TDD позволяет вспомнить давно забытое чувство – когда после завершения очередного шага разработки все
заводится без проблем и с первого раза. И поначалу это может с непривычки даже пугать, но потом Вы привыкнете к этому
ощущению драйва и «потока» и уже не сможете писать код, не начав с теста.
Применяя рефакторинг,
можно значительно повысить гибкость системы при изменении требований и значительно снизить силы на поддержку и больше
внимания уделять новому функционалу. Согласитесь, разработчику всегда гораздо более комфортно работать с чистым
понятным кодом, и это резко повышает продуктивность команды.
Помимо всего прочего, новые практики помогу команде вырасти в техническом плане, перейти на "следующий уровень".
Парная работа обязательно будет способствовать быстрому распространению знаний и удачных подходов.
Что такое рефакторинг?

Непрерывный процесс,

который позволяет
разработчику находить плохо
структурированный код и
улучшать его,
не изменяя при этом поведения,
применяя набор повторяемых
шагов.

http://wwwrefactoringcom
ПОЧЕМУ НАДО
РЕФАКТОРИТЬ?
Чтобы улучшать дизайн
Чтобы понимать код
Чтобы находить баги
Чтобы программировать быстрее
Рефакторинг это ...
… как купить новый диван
… или стол

… или ТВ
УПРАЖНЕНИЕ
Домен

Customer

Rental
+DaysRented : int

+Statement()

Movie
+PriceCode : int
Customer.Statement()
Страшно …
 … но кого это волнует?
 Компьютерам все равно

 Программистам придется
поддерживать это

«Любой дурак может написать код, который может понять компьютер.
Хорошие программисты пишут код, понятный другим людям.“

- Martin Fowler
Выделить метод
Переименовать переменные
ПРИЧИНЫ РЕФАКТОРИТЬ
Есть только 2 причины

Улучшить читаемость
Есть только 2 причины

Устранение дубликации
Когда рефакторить?
Каждый божий день

Правило трех
Чем пахнет?
http://c2com/cgi/wiki?CodeSmell

Дубликация
Длинный метод
Огромный класс

Длинный список параметров
Комментарии
Маленькие шаги

A

B
Маленькие шаги

A

B
УПРАЖНЕНИЕ
Переместить метод
Проблемы с рефакторингом
Сложно найти все «запахи»
сразу
Одну ягодку беру, на другую
смотрю, третью примечаю,
четвертая мерещится
Некоторые «запахи»
локальные, некоторые более
широкие
Все «вылизать» не получится
Каталог рефакторингов
• Add Parameter

• Introduce Assertion

• Change Bidirectional Association to
Unidirectional

• Introduce Business Delegate (Link Only)

• Change Reference to Value

• Introduce Explaining Variable
• Introduce Foreign Method

• Change Unidirectional Association to
Bidirectional

• Introduce Local Extension

• Change Value to Reference

• Introduce Null Object

• Collapse Hierarchy

• Introduce Parameter Object

• Consolidate Conditional Expression

• Introduce Synchronizer Token (Link Only)

• Consolidate Duplicate Conditional Fragments • Localize Disparate Logic (Link Only)

• Replace Conditional with Visitor by Ivan
Mitrovic
• Replace Constructor with Factory Method
• Replace Data Value with Object

• Replace Delegation with Inheritance
• Replace Error Code with Exception
• Replace Exception with Test
• Replace Inheritance with Delegation
• Replace Iteration with Recursion by Dave
Whipp

• Convert Dynamic to Static Construction by
Gerard M. Davison

• Merge Session Beans (Link Only)
• Move Business Logic to Session (Link Only)

• Replace Magic Number with Symbolic
Constant

• Convert Static to Dynamic Construction by
Gerard M. Davison

• Move Class by Gerard M. Davison

• Replace Method with Method Object

• Move Field

• Replace Nested Conditional with Guard
Clauses

• Decompose Conditional

• Duplicate Observed Data
• Eliminate Inter-Entity Bean Communication
(Link Only)

• Move Method
• Parameterize Method
• Preserve Whole Object

• Replace Parameter with Explicit Methods
• Replace Parameter with Method
• Replace Record with Data Class

• Encapsulate Collection

• Pull Up Constructor Body

• Encapsulate Downcast

• Pull Up Field

• Replace Recursion with Iteration by Ivan
Mitrovic

• Encapsulate Field

• Pull Up Method

• Replace Static Variable with Parameter by
УПРАЖНЕНИЕ
Избавиться от временной переменной
FrequentRenterPoints
Что получилось

Customer
+Statement()

Rental
+DaysRented : int
+Price : double
+FrequentRenterPoints : int

Movie
+PriceCode : int
Разбить цикл
Холивар

А как же производительность???
Теперь цикл выполняется дважды!

Код для читаемости, а не для производительности.
• Если возникнут проблемы с производительностью, скорее всего это будет не там, где вы
ожидаете
• Но ее будет легко починить, если код чистый
Что надо сделать перед рефакторингом?
Заменить switch полиморфизмом
А ВОТ ТЕПЕРЬ
ХАРДКОР
Наш новый проект

https://github.com/SmartStepGroup/AwfulVideoStore
Рефакторинг
ИЗОЛЯЦИЯ
ЗАВИСИМОСТЕЙ
ПОДМЕНА ПОВЕДЕНИЯ
SPROUT METHOD
ИЗБАВЛЯЕМСЯ ОТ STATIC
ИНЪЕКЦИЯ
ЗАВИСИМОСТЕЙ
Чему мы научились
Что такое рефакторинг
Рефакторинг – это непрерывный процесс
Рефакторинг – это просто
Основные рефакторинги
Маленькие шаги
Как рефакторить старый код
Технический долг
Домашнее задание
Прислать примеры сложного кода из вашего проекта
Книги
Вопросы?
Контакты

http://get.cardmone.net

More Related Content

PPTX
TDD (Test-driven Development) как стиль разработки.
PDF
Автоматизация сборки и тестирования в разрезе эффективного производства
PDF
Переход на Docsvision 5 прямо сейчас
PPTX
Can we have some more quality - Russian version
PPT
Как сделать наши проекты немного более управляемыми с Agile
PDF
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
PPT
Подводные камни при построении процесса тестирования
PDF
DUMP-2015: «Тестирование постановок в Naumen Contact Center» Константин Бекле...
TDD (Test-driven Development) как стиль разработки.
Автоматизация сборки и тестирования в разрезе эффективного производства
Переход на Docsvision 5 прямо сейчас
Can we have some more quality - Russian version
Как сделать наши проекты немного более управляемыми с Agile
QA Fest 2019. Андрей Солнцев. Десять причин моей ненависти
Подводные камни при построении процесса тестирования
DUMP-2015: «Тестирование постановок в Naumen Contact Center» Константин Бекле...

What's hot (20)

PPTX
Mikhail Dovgiy, QA Stand Up: Episode 4
PDF
Разработка через тестирование (TDD и BDD)
PDF
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
PPTX
"На проводе" или два эпизода из жизни распределённой команды (Александр Калугин)
PPTX
Estimates & estimating - Наташа Новотная
PPTX
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
PPT
Я занимаюсь Fitnesse`ом каждый день
PDF
Bdd with java using concordion and selenium ui tests
PPT
Как вводить нового тестировщика в команду
PPTX
Bdd with java_using_concordion_and_selenium_ui_tests
PPT
Оценка трудозатрат на тестирование в проектах сопровождения
PDF
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
PPT
Асхат Уразбаев, Руководство по организации тестирования в Agile
PDF
Управление компанией с использованием метода критического цепи (МКЦ)
PDF
Теория ограничений в Agile команде
PPTX
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
PPT
Распределение тестировщиков по командам как один из этапов контроля качества
PPT
Как заслужить доверие заказчика при передаче проекта новой команде тестирования?
PDF
Масло масляное или Тестируем тестирование
PPT
Постановка процесса тестирования в Agile
Mikhail Dovgiy, QA Stand Up: Episode 4
Разработка через тестирование (TDD и BDD)
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
"На проводе" или два эпизода из жизни распределённой команды (Александр Калугин)
Estimates & estimating - Наташа Новотная
ThemeForest: Как пробиться и стоит ли игра свеч? | Odessa Frontend Meetup #9
Я занимаюсь Fitnesse`ом каждый день
Bdd with java using concordion and selenium ui tests
Как вводить нового тестировщика в команду
Bdd with java_using_concordion_and_selenium_ui_tests
Оценка трудозатрат на тестирование в проектах сопровождения
Jenkins 2. Как сделать мажорный релиз и не развалить сообщество?
Асхат Уразбаев, Руководство по организации тестирования в Agile
Управление компанией с использованием метода критического цепи (МКЦ)
Теория ограничений в Agile команде
Когда проектов больше чем людей - процесс разработки в маленькой, но амбициоз...
Распределение тестировщиков по командам как один из этапов контроля качества
Как заслужить доверие заказчика при передаче проекта новой команде тестирования?
Масло масляное или Тестируем тестирование
Постановка процесса тестирования в Agile
Ad

Similar to Рефакторинг (20)

PPTX
Developmentmanage3.0
PPTX
вольфсон построение собственного Agile-фреймворка (шаблон)
PPTX
Практика работы с крупными проектами - от Scrum с XP к Kanban
PPTX
Developmentmanage1.0
PPTX
Повышение качества тестов и автоматическая валидация REST API документации
PDF
Презентация Экспресс42 DevOps .pdf
PDF
Как Mail.Ru и AT Consulting перевели профили абонентов Beeline на Tarantool /...
PPT
What Tests Are For?
PDF
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
KEY
Обязательные практики Agile-проекта и правило ППП
PDF
работа в крупной компании на примере Banki.ru
PDF
DevOps от и до - что, зачем и почему
PPTX
Anton Sytnyk ITEM 2018
PDF
SCRUMopen Developer Max Kolodezniy
PPTX
Software craftsmanship фиксит проблемы Agile
PDF
Юлия Викторова; Александр Тарасов. DevOps без булшита.
PPT
Agile.by - Agileee season 3 - Agile Testing by Elisabeth Hendrickson
PDF
Agile transformation_keynote
PPTX
Дмитрий Долженко "You think you know everything about algorithms and refactor...
PDF
"Outside In". Web application testing.
Developmentmanage3.0
вольфсон построение собственного Agile-фреймворка (шаблон)
Практика работы с крупными проектами - от Scrum с XP к Kanban
Developmentmanage1.0
Повышение качества тестов и автоматическая валидация REST API документации
Презентация Экспресс42 DevOps .pdf
Как Mail.Ru и AT Consulting перевели профили абонентов Beeline на Tarantool /...
What Tests Are For?
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Обязательные практики Agile-проекта и правило ППП
работа в крупной компании на примере Banki.ru
DevOps от и до - что, зачем и почему
Anton Sytnyk ITEM 2018
SCRUMopen Developer Max Kolodezniy
Software craftsmanship фиксит проблемы Agile
Юлия Викторова; Александр Тарасов. DevOps без булшита.
Agile.by - Agileee season 3 - Agile Testing by Elisabeth Hendrickson
Agile transformation_keynote
Дмитрий Долженко "You think you know everything about algorithms and refactor...
"Outside In". Web application testing.
Ad

Рефакторинг

  • 2. SmartStepGroup 9 лет опыта Тренинги Консультирование Оценка процессов Оптимизация процессов Разработка
  • 8. 8 INTEL CONFIDENTIAL , FOR INTERNAL USE ONLY
  • 9. Зачем Нужна Пара? Передача Знаний Кросс-Функциональная Команда Отпуск!
  • 11. Не жадничайте Играйте в клавиатурный пинг-понг
  • 14. Упражнение 0. 1. Добавить новый тип кино Series 2. Один фильм бесплатно за 10 поинтов 3. Новый отчет в HTML 20 минут
  • 15. Прочитайте это … Зачем нужен курс специалисту мы предлагаем Вам этоттренинг какпростойпонятныйинструмент повышения стабильности процесса и повышения качества продукта более 50% времени мастер-класса мы отводим на упражнения, где вы будете писать кодчто входит в курсмодульные тесты ключевой способ не бояться изменений требований и постоянно держать качество и поддерживаемость продукта на высоте а это напрямую влияет на Ваши вовлеченность и мотивацию резко повышая их testdrivendevelopment изначально заточен на решение задачи длительной поддержки проекта и по нашим наблюдениям после внедрения tdd разработчки обычно вздыхают полной грудью. Типовые муторные проблемы с воспроизводством дефектов и внесением изменений становятся гораздо менее значимыми. Вы сразу и автоматически получаете понятный поддерживаемый дизайн и глубокое покрытие тестами. Время проведенное в дебаге стремится к нулюбаги перестаютбытьпроблемой поскольку каждую вновь найденнуюпроблемуможно будет закрепить тестом ибольше кнейне возвращаться автоматические тесты так же замещают ручную работу по проверке того или иного функционала перед тем, как отдать ее на финальное тестирование практика TDD позволяет вспомнить давно забытое чувство – когда после завершения очередного шага разработки все заводится без проблем и с первого раза. И поначалу это может с непривычки даже пугать, но потом Вы привыкнете к этому ощущению драйва и «потока» и уже не сможете писать код, не начав с тестаприменяя рефакторинг можно значительно повысить гибкость системы при изменении требований и значительно снизить силы на поддержку и больше внимания уделять новому функционалу. Согласитесь, разработчику всегда гораздо более комфортно работать с чистым понятным кодом, и это резко повышает продуктивность команды. Помимо всего прочего, новые практики помогу команде вырасти в техническом плане, перейти на "следующий уровень". Парная работа обязательно будет способствовать быстрому распространению знаний и удачных подходов.
  • 16. После 5 минут рефакторинга Зачем нужен курс специалисту Мы предлагаем Вам этот тренинг как простой понятный инструмент повышения стабильности процесса и повышения качества продукта. Более 50% времени мастер-класса мы отводим на упражнения, где вы будете писать код. Что входит в курс: Модульные тесты это ключевой способ не бояться изменений требований и постоянно держать качество и поддерживаемость продукта на высоте. А это напрямую влияет на Ваши вовлеченность и мотивацию, резко повышая их. Test-Driven Development изначально заточен на решение задачи длительной поддержки проекта. И по нашим наблюдениям, после внедрения TDD разработчки обычно вздыхают полной грудью. Типовые муторные проблемы с воспроизводством дефектов и внесением изменений становятся гораздо менее значимыми. Вы сразу и автоматически получаете понятный поддерживаемый дизайн и глубокое покрытие тестами. Время, проведенное в дебаге, стремится к нулю. Баги перестают быть проблемой, поскольку каждую вновь найденную проблему можно будет закрепить тестом и больше к ней не возвращаться. Автоматические тесты так же замещают ручную работу по проверке того или иного функционала перед тем, как отдать ее на финальное тестирование. Практика TDD позволяет вспомнить давно забытое чувство – когда после завершения очередного шага разработки все заводится без проблем и с первого раза. И поначалу это может с непривычки даже пугать, но потом Вы привыкнете к этому ощущению драйва и «потока» и уже не сможете писать код, не начав с теста. Применяя рефакторинг, можно значительно повысить гибкость системы при изменении требований и значительно снизить силы на поддержку и больше внимания уделять новому функционалу. Согласитесь, разработчику всегда гораздо более комфортно работать с чистым понятным кодом, и это резко повышает продуктивность команды. Помимо всего прочего, новые практики помогу команде вырасти в техническом плане, перейти на "следующий уровень". Парная работа обязательно будет способствовать быстрому распространению знаний и удачных подходов.
  • 17. Что такое рефакторинг? Непрерывный процесс, который позволяет разработчику находить плохо структурированный код и улучшать его, не изменяя при этом поведения, применяя набор повторяемых шагов. http://wwwrefactoringcom
  • 23. Рефакторинг это ... … как купить новый диван … или стол … или ТВ
  • 27. Страшно …  … но кого это волнует?  Компьютерам все равно  Программистам придется поддерживать это «Любой дурак может написать код, который может понять компьютер. Хорошие программисты пишут код, понятный другим людям.“ - Martin Fowler
  • 31. Есть только 2 причины Улучшить читаемость
  • 32. Есть только 2 причины Устранение дубликации
  • 34. Чем пахнет? http://c2com/cgi/wiki?CodeSmell Дубликация Длинный метод Огромный класс Длинный список параметров Комментарии
  • 39. Проблемы с рефакторингом Сложно найти все «запахи» сразу Одну ягодку беру, на другую смотрю, третью примечаю, четвертая мерещится Некоторые «запахи» локальные, некоторые более широкие Все «вылизать» не получится
  • 40. Каталог рефакторингов • Add Parameter • Introduce Assertion • Change Bidirectional Association to Unidirectional • Introduce Business Delegate (Link Only) • Change Reference to Value • Introduce Explaining Variable • Introduce Foreign Method • Change Unidirectional Association to Bidirectional • Introduce Local Extension • Change Value to Reference • Introduce Null Object • Collapse Hierarchy • Introduce Parameter Object • Consolidate Conditional Expression • Introduce Synchronizer Token (Link Only) • Consolidate Duplicate Conditional Fragments • Localize Disparate Logic (Link Only) • Replace Conditional with Visitor by Ivan Mitrovic • Replace Constructor with Factory Method • Replace Data Value with Object • Replace Delegation with Inheritance • Replace Error Code with Exception • Replace Exception with Test • Replace Inheritance with Delegation • Replace Iteration with Recursion by Dave Whipp • Convert Dynamic to Static Construction by Gerard M. Davison • Merge Session Beans (Link Only) • Move Business Logic to Session (Link Only) • Replace Magic Number with Symbolic Constant • Convert Static to Dynamic Construction by Gerard M. Davison • Move Class by Gerard M. Davison • Replace Method with Method Object • Move Field • Replace Nested Conditional with Guard Clauses • Decompose Conditional • Duplicate Observed Data • Eliminate Inter-Entity Bean Communication (Link Only) • Move Method • Parameterize Method • Preserve Whole Object • Replace Parameter with Explicit Methods • Replace Parameter with Method • Replace Record with Data Class • Encapsulate Collection • Pull Up Constructor Body • Encapsulate Downcast • Pull Up Field • Replace Recursion with Iteration by Ivan Mitrovic • Encapsulate Field • Pull Up Method • Replace Static Variable with Parameter by
  • 44. Что получилось Customer +Statement() Rental +DaysRented : int +Price : double +FrequentRenterPoints : int Movie +PriceCode : int
  • 46. Холивар А как же производительность??? Теперь цикл выполняется дважды! Код для читаемости, а не для производительности. • Если возникнут проблемы с производительностью, скорее всего это будет не там, где вы ожидаете • Но ее будет легко починить, если код чистый
  • 47. Что надо сделать перед рефакторингом?
  • 57. Чему мы научились Что такое рефакторинг Рефакторинг – это непрерывный процесс Рефакторинг – это просто Основные рефакторинги Маленькие шаги Как рефакторить старый код Технический долг
  • 58. Домашнее задание Прислать примеры сложного кода из вашего проекта