SlideShare a Scribd company logo
1 of 17
Рефакторинг - изменение во внутренней структуре
программного обеспечения, имеющее целью
облегчить понимание его работы и упростить
модификацию, не затрагивая наблюдаемого
поведения.
Цель рефакторинга - сделать код программы
легче для понимания; без этого рефакторинг
нельзя считать успешным.
Зачем нужно проводить рефакторинг?
 рефакторинг улучшает композицию программного обеспечения;
 рефакторинг облегчает понимание программного обеспечения;
 рефакторинг помогает найти ошибки;
 рефакторинг позволяет быстрее писать программы.
Когда следует проводить рефакторинг?
Всегда!
Нет, ну серьёзно…
Применяйте рефакторинг в следующих случаях:
 правило трех ударов;
 при добавлении новой функции;
 если требуется исправить ошибку;
 при ревьировании.
На что следует обращать свое внимание
 дублирование кода;
 длинный метод;
 большой класс;
 длинный список параметров;
 «завистливые» функции;
 избыточные временные переменные;
 классы данных;
 несгруппированные данные.
Проблемы, возникающие при проведении
рефакторинга
 базы данных;
 изменение интерфейсов;
 изменения дизайна, вызывающие трудности при рефакторинге.
Когда рефакторинг не нужен?
Если существует необходимость переписать программу с нуля.
Если приближается завершающая стадия проекта.
А что с производительностью?
Методы рефакторинга. Извлечение метода.
Чем больше строк кода в методе, тем сложнее разобраться в том, что он делает. Это
основная проблема, которую решает этот рефакторинг.
Порядок рефакторинга:
1. Создайте новый метод и назовите его так, чтобы название отражало суть того, что
будет делать этот метод;
2. Скопируйте фрагмент кода в новый метод. Удалите этот фрагмент из старого
места и замените вызовом вашего нового метода;
3. Найдите все переменные, которые использовались в этом фрагменте кода.
Переменные, которые используются только в этом методе следует оставить;
4. Если переменные объявлены перед интересующим вас участком кода, значит, их
следует передать в параметры нового метода;
5. Если вы видите, что локальная переменная как-то изменяется в вашем участке
кода, это может означать, что её изменённое значение понадобится дальше в
основном методе. Проверьте это. Если это так, то значение этой переменной
следует возвратить в основной метод.
Встраивание метода
Если тело метода состоит из простого делегирования к другому методу, то
следует воспользоваться данным методом. Само по себе такое делегирование
— не проблема. Но если таких методов довольно много, становится очень
легко в них запутаться.
Порядок рефакторинга:
1. Убедитесь, что метод не переопределяется в подклассах. Если
он переопределяется, воздержитесь от рефакторинга;
2. Найдите все вызовы метода. Замените эти вызовы содержимым
метода;
3. Удалите метод.
Инкапсуляция поля
Инкапсуляция – один из основных принципов ООП. Если сделать данные открытыми,
объекты смогут читать и изменять их значения без ведома объекта-владельца этих
данных. Тем самым данные отделяются от поведения.
Это считается неправильным, потому что уменьшает модульность программы. Когда
данные и использующее их поведение сгруппированы вместе, проще изменять код,
поскольку изменяемый код расположен в одном месте, а не разбросан по всей
программе.
Порядок рефакторинга:
1. Создайте геттер и сеттер для поля;
2. Найдите все обращения к полю. Замените получение значения
из поля геттером, а установку новых значений в поле —
сеттером;
3. После того, как все обращения к полям заменены, сделайте
поле приватным.
http://refactoring.guru
сайт-справочник по рефакторингу
http://habrahabr.ru/hub/refactoring
хаб по рефакторингу

More Related Content

What's hot

учебник по теме алгоритмизации
учебник по теме алгоритмизацииучебник по теме алгоритмизации
учебник по теме алгоритмизации
hudooognik
 
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
sqadays8
 
GRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияGRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного Проектирования
Alexander Nemanov
 
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interactionSqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
Alexei Lupan
 

What's hot (14)

информатика лекции 4
информатика лекции 4информатика лекции 4
информатика лекции 4
 
лекция 4
лекция 4лекция 4
лекция 4
 
учебник по теме алгоритмизации
учебник по теме алгоритмизацииучебник по теме алгоритмизации
учебник по теме алгоритмизации
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Тестирование параллельных программ
Тестирование параллельных программТестирование параллельных программ
Тестирование параллельных программ
 
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
QA Fest 2014. Алексей Лупан. Не тест-кейсы красят тестировщика, а...
 
Тест-дизайн: проще читать или проще писать
Тест-дизайн: проще читать или проще писатьТест-дизайн: проще читать или проще писать
Тест-дизайн: проще читать или проще писать
 
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)Александр Александров -- Надёжный тест-дизайн (мастер-класс)
Александр Александров -- Надёжный тест-дизайн (мастер-класс)
 
Keyword-driven framework
Keyword-driven frameworkKeyword-driven framework
Keyword-driven framework
 
TAP
TAPTAP
TAP
 
QA Лекция2
QA Лекция2QA Лекция2
QA Лекция2
 
GRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного ПроектированияGRASP – паттерны Объектно-Ориентированного Проектирования
GRASP – паттерны Объектно-Ориентированного Проектирования
 
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interactionSqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
Sqa.days.2010.beskov.system.analyst.and.test.engineers.interaction
 
лекция4 qa
лекция4 qaлекция4 qa
лекция4 qa
 

Similar to Refactoring

Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
Образовательные мероприятия "Netpeak Talks"
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
Sergey Nemchinsky
 
Ошибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияОшибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы применения
zheldak
 
Разработка веб-сервисов осень 2013 лекция 10
Разработка веб-сервисов осень 2013 лекция 10Разработка веб-сервисов осень 2013 лекция 10
Разработка веб-сервисов осень 2013 лекция 10
Technopark
 
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис ВоскобойникКак работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Образовательные мероприятия "Netpeak Talks"
 
Принципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаПринципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайна
Сергей Шебанин
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
OdessaFrontend
 

Similar to Refactoring (20)

лек11 7
лек11 7лек11 7
лек11 7
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важно
 
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПОЕвгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
Евгений Кривошеев: Фундаментальные правила и принципы проектирования ПО
 
Design Rules And Principles
Design Rules And PrinciplesDesign Rules And Principles
Design Rules And Principles
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
 
SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайна
 
Парадигмы программирования
Парадигмы программированияПарадигмы программирования
Парадигмы программирования
 
Ошибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияОшибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы применения
 
Разработка веб-сервисов осень 2013 лекция 10
Разработка веб-сервисов осень 2013 лекция 10Разработка веб-сервисов осень 2013 лекция 10
Разработка веб-сервисов осень 2013 лекция 10
 
Проектирование программных систем. Занятие 1
Проектирование программных систем. Занятие 1Проектирование программных систем. Занятие 1
Проектирование программных систем. Занятие 1
 
Mva stf module 2 - rus
Mva stf module 2 - rusMva stf module 2 - rus
Mva stf module 2 - rus
 
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис ВоскобойникКак работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
 
Модуль 8. Лекция 37-38. Управление качеством проекта
Модуль 8. Лекция 37-38. Управление качеством проектаМодуль 8. Лекция 37-38. Управление качеством проекта
Модуль 8. Лекция 37-38. Управление качеством проекта
 
Programming Concepts
Programming ConceptsProgramming Concepts
Programming Concepts
 
АРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxАРК-ПЗ-1.pptx
АРК-ПЗ-1.pptx
 
Agile/Scrum
Agile/ScrumAgile/Scrum
Agile/Scrum
 
Принципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайнаПринципы объектно-ориентированного дизайна
Принципы объектно-ориентированного дизайна
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
 

Refactoring

  • 1.
  • 2. Рефакторинг - изменение во внутренней структуре программного обеспечения, имеющее целью облегчить понимание его работы и упростить модификацию, не затрагивая наблюдаемого поведения.
  • 3. Цель рефакторинга - сделать код программы легче для понимания; без этого рефакторинг нельзя считать успешным.
  • 4. Зачем нужно проводить рефакторинг?  рефакторинг улучшает композицию программного обеспечения;  рефакторинг облегчает понимание программного обеспечения;  рефакторинг помогает найти ошибки;  рефакторинг позволяет быстрее писать программы.
  • 5. Когда следует проводить рефакторинг? Всегда!
  • 6. Нет, ну серьёзно… Применяйте рефакторинг в следующих случаях:  правило трех ударов;  при добавлении новой функции;  если требуется исправить ошибку;  при ревьировании.
  • 7. На что следует обращать свое внимание  дублирование кода;  длинный метод;  большой класс;  длинный список параметров;  «завистливые» функции;  избыточные временные переменные;  классы данных;  несгруппированные данные.
  • 8. Проблемы, возникающие при проведении рефакторинга  базы данных;  изменение интерфейсов;  изменения дизайна, вызывающие трудности при рефакторинге.
  • 9. Когда рефакторинг не нужен? Если существует необходимость переписать программу с нуля. Если приближается завершающая стадия проекта.
  • 10. А что с производительностью?
  • 11. Методы рефакторинга. Извлечение метода. Чем больше строк кода в методе, тем сложнее разобраться в том, что он делает. Это основная проблема, которую решает этот рефакторинг.
  • 12. Порядок рефакторинга: 1. Создайте новый метод и назовите его так, чтобы название отражало суть того, что будет делать этот метод; 2. Скопируйте фрагмент кода в новый метод. Удалите этот фрагмент из старого места и замените вызовом вашего нового метода; 3. Найдите все переменные, которые использовались в этом фрагменте кода. Переменные, которые используются только в этом методе следует оставить; 4. Если переменные объявлены перед интересующим вас участком кода, значит, их следует передать в параметры нового метода; 5. Если вы видите, что локальная переменная как-то изменяется в вашем участке кода, это может означать, что её изменённое значение понадобится дальше в основном методе. Проверьте это. Если это так, то значение этой переменной следует возвратить в основной метод.
  • 13. Встраивание метода Если тело метода состоит из простого делегирования к другому методу, то следует воспользоваться данным методом. Само по себе такое делегирование — не проблема. Но если таких методов довольно много, становится очень легко в них запутаться.
  • 14. Порядок рефакторинга: 1. Убедитесь, что метод не переопределяется в подклассах. Если он переопределяется, воздержитесь от рефакторинга; 2. Найдите все вызовы метода. Замените эти вызовы содержимым метода; 3. Удалите метод.
  • 15. Инкапсуляция поля Инкапсуляция – один из основных принципов ООП. Если сделать данные открытыми, объекты смогут читать и изменять их значения без ведома объекта-владельца этих данных. Тем самым данные отделяются от поведения. Это считается неправильным, потому что уменьшает модульность программы. Когда данные и использующее их поведение сгруппированы вместе, проще изменять код, поскольку изменяемый код расположен в одном месте, а не разбросан по всей программе.
  • 16. Порядок рефакторинга: 1. Создайте геттер и сеттер для поля; 2. Найдите все обращения к полю. Замените получение значения из поля геттером, а установку новых значений в поле — сеттером; 3. После того, как все обращения к полям заменены, сделайте поле приватным.