SlideShare a Scribd company logo
Рефакторить
легаси код?
Только с юнит
тестами!
Александр Андронов
Антон Бевзюк
Smart Step Group
SmartStepGroup
Инженерные практики
http://get.cardmone.net
Расписание
Поговорим об унаследованном коде
Практика. Пишем первый тест
Вырабатываем подход
Практика. Вводим новый функционал
Исходники
C#
git clone
https://github.com/SmartStepGroup/AwfulVideoSt
ore.git
Java
git clone
https://github.com/SmartStepGroup/AwfulVideoSt
oreJava.git
Изменения в легаси коде?
Перепишем или так оставим?
В след раз точно будет лучше
http://devanswers.ru/
Цель
Показать, как покрыть
легаси код тестами,
ничего не сломав.
Добавляем новый
функционал
Покрываем тестами
Делаем код
тестируемым
Практика!
C#
git clone
https://github.com/SmartStepGroup/AwfulVideoSt
ore.git
Java
git clone
https://github.com/SmartStepGroup/AwfulVideoSt
oreJava.git
Подмена понятий
Упражнение 1. Подмена понятий
Выделяем метод SellingReportService,
мешающий тесту - 10 минут
Инъекция зависимостей
Упражнение 2.
Инъекция зависимостей
Изолировать ISession в DefaultMovieService
– 10 минут
Sprout Method
Упражнение 3.
Sprout method
В SellingReportService не учитывать фильмы
18+
10 минут
Wrap Method
Упражнение 4.
Wrap method
SellingReportService должен показывать
первые 5 фильмов в лучшей категории,
отсортированные по цене по убыванию
– 10 минут
Общий подход
• Находим зависимость от
технологий
• Изолируем каким-либо спобобом
• Пишем тест
Список литературы
http://blog.crisp.se/2013/10/11/henrikkniber
g/good-and-bad-technical-debt
Спасибо за внимание
http://get.cardmone.net
разрешите геолокацию

More Related Content

What's hot

Effective coding in IntelliJ IDEA
Effective coding in IntelliJ IDEAEffective coding in IntelliJ IDEA
Effective coding in IntelliJ IDEAchashnikov
 
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"
Egor Stremousov
 
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open sourceСпецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
7bits
 
Готовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковГотовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходников
Elena Grahovac
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
voituk
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Yandex
 
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex PetrovReal-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Ruby Meditation
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Yandex
 
Применение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектахПрименение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектах
Alex Chistyakov
 
Как стать продуктивным Android разработчиком
Как стать продуктивным Android разработчикомКак стать продуктивным Android разработчиком
Как стать продуктивным Android разработчиком
Pavel Shchahelski
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Yandex
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
Fwdays
 
Общие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в ЯндексеОбщие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в Яндексе
Yandex
 
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
MoscowJS
 
9 релизов в неделю: секрет успеха.
9 релизов в неделю: секрет успеха.9 релизов в неделю: секрет успеха.
9 релизов в неделю: секрет успеха.
Maxim Boguslavsky
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
COMAQA.BY
 
Как мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuКак мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.Ru
Vladimir Rudnyh
 
История про OpenSource в Яндексе
История про OpenSource в ЯндексеИстория про OpenSource в Яндексе
История про OpenSource в Яндексе
Yandex
 
Презентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеПрезентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в Минске
Alex Chistyakov
 

What's hot (20)

Effective coding in IntelliJ IDEA
Effective coding in IntelliJ IDEAEffective coding in IntelliJ IDEA
Effective coding in IntelliJ IDEA
 
Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"Никита Шультайс. "Система управления версиями git"
Никита Шультайс. "Система управления версиями git"
 
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open sourceСпецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
Спецкурс 2014, занятие 5 (часть 2). Git, GitHub и Open source
 
Готовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходниковГотовим код 
в мир открытых исходников
Готовим код 
в мир открытых исходников
 
C#5 What's new?
C#5 What's new?C#5 What's new?
C#5 What's new?
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
 
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex PetrovReal-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
Real-Time Error Alerting & Debugging Tools: Rollbar - Alex Petrov
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Применение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектахПрименение языка Go в инфраструктурных проектах
Применение языка Go в инфраструктурных проектах
 
Как стать продуктивным Android разработчиком
Как стать продуктивным Android разработчикомКак стать продуктивным Android разработчиком
Как стать продуктивным Android разработчиком
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
 
Общие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в ЯндексеОбщие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в Яндексе
 
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
"Непрерывная интеграция или "Кто всё сломал?", Виктор Русакович, MoscowJS 23
 
9 релизов в неделю: секрет успеха.
9 релизов в неделю: секрет успеха.9 релизов в неделю: секрет успеха.
9 релизов в неделю: секрет успеха.
 
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментовНепрерывная интеграция и автотесты. Сравнительный анализ инструментов
Непрерывная интеграция и автотесты. Сравнительный анализ инструментов
 
Как мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuКак мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.Ru
 
История про OpenSource в Яндексе
История про OpenSource в ЯндексеИстория про OpenSource в Яндексе
История про OpenSource в Яндексе
 
Презентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеПрезентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в Минске
 

Viewers also liked

Эй, программистик, за тобой должок!
Эй, программистик, за тобой должок!Эй, программистик, за тобой должок!
Эй, программистик, за тобой должок!
SmartStepGroup
 
Юнит Тестирование
Юнит ТестированиеЮнит Тестирование
Юнит Тестирование
SmartStepGroup
 
Agile mindset
Agile mindsetAgile mindset
Agile mindset
Ilya Belikin
 
Внедрение Аgile в банке ВТБ24, и интеграция UX и UI в процесс разработки инте...
Внедрение Аgile в банке ВТБ24, и интеграция UX и UI в процесс разработки инте...Внедрение Аgile в банке ВТБ24, и интеграция UX и UI в процесс разработки инте...
Внедрение Аgile в банке ВТБ24, и интеграция UX и UI в процесс разработки инте...
Алексей Гореминский
 
Рефакторинг
РефакторингРефакторинг
Рефакторинг
SmartStepGroup
 
TDD
TDDTDD
Domain Driven Design. Как писать простой код для сложных систем?
Domain Driven Design. Как писать простой код для сложных систем?Domain Driven Design. Как писать простой код для сложных систем?
Domain Driven Design. Как писать простой код для сложных систем?
Dmitry Pavlov
 
Classroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsClassroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and Adolescents
Shelly Sanchez Terrell
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris Lema
Chris Lema
 
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back Kid
Ethos3
 

Viewers also liked (10)

Эй, программистик, за тобой должок!
Эй, программистик, за тобой должок!Эй, программистик, за тобой должок!
Эй, программистик, за тобой должок!
 
Юнит Тестирование
Юнит ТестированиеЮнит Тестирование
Юнит Тестирование
 
Agile mindset
Agile mindsetAgile mindset
Agile mindset
 
Внедрение Аgile в банке ВТБ24, и интеграция UX и UI в процесс разработки инте...
Внедрение Аgile в банке ВТБ24, и интеграция UX и UI в процесс разработки инте...Внедрение Аgile в банке ВТБ24, и интеграция UX и UI в процесс разработки инте...
Внедрение Аgile в банке ВТБ24, и интеграция UX и UI в процесс разработки инте...
 
Рефакторинг
РефакторингРефакторинг
Рефакторинг
 
TDD
TDDTDD
TDD
 
Domain Driven Design. Как писать простой код для сложных систем?
Domain Driven Design. Как писать простой код для сложных систем?Domain Driven Design. Как писать простой код для сложных систем?
Domain Driven Design. Как писать простой код для сложных систем?
 
Classroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsClassroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and Adolescents
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris Lema
 
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back Kid
 

Similar to Рефакторить легаси код? Только с юнит тестами!

Git for you
Git for youGit for you
Git for you
Pavel Alexeev
 
Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.
Denis Zakharov
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
Yandex
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
Yandex
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
HappyDev
 
Тестируем legacy c++
Тестируем legacy c++Тестируем legacy c++
Тестируем legacy c++
Maxim Shulga
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
Sergey Grinev
 
Getting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестированияGetting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестирования
Alexander Byndyu
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
SQALab
 
Python и Django – платформа для фрилансера
Python и Django – платформа для фрилансераPython и Django – платформа для фрилансера
Python и Django – платформа для фрилансера
Alexander Koshelev
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
DataArt
 
XP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureXP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureAnton Katkov
 
UI+unit testing in iOS
UI+unit testing in iOSUI+unit testing in iOS
UI+unit testing in iOS
Кирилл Ушков
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
Roman Dvornov
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичковOvadiah Myrgorod
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
FDConf
 
Continuous Deployment (in Russian)
Continuous Deployment  (in Russian)Continuous Deployment  (in Russian)
Continuous Deployment (in Russian)Smartling
 
XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy code
Dmytro Mindra
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
Gonchik Tsymzhitov
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Dmytro Zharii
 

Similar to Рефакторить легаси код? Только с юнит тестами! (20)

Git for you
Git for youGit for you
Git for you
 
Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.Development of a plugin for VS Code that supports ACSL language.
Development of a plugin for VS Code that supports ACSL language.
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
Виталий Шибаев - Креативный менеджмент глазами разработчика: как выжить в agi...
 
Тестируем legacy c++
Тестируем legacy c++Тестируем legacy c++
Тестируем legacy c++
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
 
Getting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестированияGetting Tested: методология интеграционного тестирования
Getting Tested: методология интеграционного тестирования
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
Python и Django – платформа для фрилансера
Python и Django – платформа для фрилансераPython и Django – платформа для фрилансера
Python и Django – платформа для фрилансера
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
 
XP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architectureXP.Party (iOS) - testable code & architecture
XP.Party (iOS) - testable code & architecture
 
UI+unit testing in iOS
UI+unit testing in iOSUI+unit testing in iOS
UI+unit testing in iOS
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичков
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
 
Continuous Deployment (in Russian)
Continuous Deployment  (in Russian)Continuous Deployment  (in Russian)
Continuous Deployment (in Russian)
 
XP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy codeXP Days Ukraine 2014 - Refactoring legacy code
XP Days Ukraine 2014 - Refactoring legacy code
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
 

Рефакторить легаси код? Только с юнит тестами!