Рефакторинг - это переписывание программного кода, с целью исправления ошибок, улучшения быстродействия.
Рефакторинг — процесс изменения программного кода, при котором не меняется его внешнее поведение, но улучшается внутренняя структура. Рефакторинг может проводиться в самых разных целях — для улучшения читабельности кода, устранения ошибок и улучшения дизайна программной архитектуры приложений. Однако вне зависимости от первоначальных целей рефакторинга, в результате вы получаете максимально понятный, читабельный, масштабируемый и стабильный программный код.
Рефакторинг или рефакторирование (англ. refactoring) — процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы. В основе рефакторинга лежит последовательность небольших эквивалентных (то есть сохраняющих поведение) преобразований. Поскольку каждое преобразование маленькое, программисту легче проследить за его правильностью, и в то же время вся последовательность может привести к существенной перестройке программы и улучшению её согласованности и четкости.
Цель рефакторинга — сделать код программы легче для понимания; без этого рефакторинг нельзя считать успешным.
Рефакторинг нужно применять постоянно при разработке кода. Основными стимулами его проведения являются следующие задачи:
Необходимо добавить новую функцию, которая недостаточно укладывается в принятое архитектурное решение; необходимо исправить ошибку, причины возникновения которой сразу не ясны; преодоление трудностей в командной разработке, которые обусловлены сложной логикой программы.
В программировании термин рефакторинг означает изменение исходного кода программы без изменения его внешнего поведения. В экстремальном программировании и других гибких методологиях рефакторинг является неотъемлемой частью цикла разработки ПО: разработчики попеременно то создают новые тесты и функциональность, то выполняют рефакторинг кода для улучшения его логичности и прозрачности. Автоматическое юнит-тестирование позволяет убедиться, что рефакторинг не разрушил существующую функциональность.
Наиболее употребимые методы рефакторинга:
- Изменение сигнатуры метода (Change Method Signature)
- Инкапсуляция поля (Encapsulate Field)
- Выделение класса (Extract Class)
- Выделение интерфейса (Extract Interface)
- Выделение локальной переменной (Extract Local Variable)
- Выделение метода (Extract Method)
- Генерализация типа (Generalize Type)
- Встраивание (Inline)
- Введение фабрики (Introduce Factory)
- Введение параметра (Introduce Parameter)
- Подъём метода (Pull Up Method)
- Спуск метода (Push Down Method)
- Переименование метода (Rename Method)
- Перемещение метода (Move Method)
- Замена условного оператора полиморфизмом (Replace Conditional with Polymorphism)
- Замена наследования делегированием (Replace Inheritance with Delegation)
- Замена кода типа подклассами (Replace Type Code with Subclasses)