Отличия рефакторинга от переписывания
Рефакторинг — это изменение с сохранением поведения. Также, пишут что это именно небольшое изменение, а большое — это реинжиниринг. Я бы скорее акцентировал внимание, что это изменение в замкнутой области.
Основное отличие от переписывания — внесённые изменения не требуют менять смежные модули, которые не подвергались рефакторингу.
Примерно как ремонт квартиры — после ремонта окна и двери стоят на том же месте, несущие стены и коммуникации не затронуты, а внутри стало приятнее.
И тут же признаки того, что рефакторинг пошёл не по плану:
Забыли какой‑то ранее работающий функционал.
Полезли ошибки в других местах.
При правильном планировании и последовательном проведении рефакторинга допустить такие ошибки довольно сложно.
План работ определяет область для изменений и её границы, в результате получаем набор точек (методов), которые останутся неизменными. Это границы изменяемого кода.
Если внешние обращения изменяются, иногда бывает полезным новый код писать отдельно от старого, и главная фишка тут в том, что можно по готовности переключать пограничные точки со старого кода на новый. А перед удалением старого кода ещё раз проверить, что весь старый код отключили и ничего не упустили.
Таким образом, в каждый момент времени код сохраняет свою работоспособность и не теряет связанности.