Чтобы высказать свое мнение:
Небольшие инкрементальные изменения, которые оставляют код в лучшем состоянии, чем он был найден
Определенно да: «косметические» изменения, которые напрямую не связаны с функциями (т. Е. Не оплачиваются как запрос на изменение).
Определенно нет: перезапись больших кусков явно нарушает принцип «маленькие, инкрементальные». Рефакторинг часто используется как противоположность перезаписи: вместо того, чтобы делать это снова, улучшайте существующее.
Определенно возможно: замена структур данных и алгоритмов - это своего рода пограничный случай. Решающее различие здесь IMO - это маленькие шаги: будьте готовы к доставке, будьте готовы работать над другим делом.
Пример: представьте, что у вас есть модуль рандомизатора отчетов, работа которого замедляется из-за использования вектора. Вы профилировали, что вставки векторов являются узким местом, но, к сожалению, модуль во многих местах полагается на непрерывную память, поэтому при использовании списка все будет незаметно прерываться.
Переписывание означало бы выбросить модуль из здания, построение более качественное и быстрое, с нуля, просто взяв несколько частей из старого. Или написать новое ядро, а затем вставить его в существующий диалог.
Рефакторинг будет означать небольшие шаги по удалению арифметики указателя, так что переключатель. Возможно, вы даже создаете служебную функцию, обертывающую арифметику указателя, заменяя прямую манипуляцию указателем вызовами этой функции, затем переключайтесь на итератор, чтобы компилятор жаловался на места, где все еще используется арифметика указателя, затем переключитесь на a list
, а затем удалите служебная функция.
Идея состоит в том, что код становится хуже сам по себе. При исправлении ошибок и добавлении функций качество ухудшается небольшими шагами - значение переменной неуловимо меняется, функция получает дополнительный параметр, который нарушает изоляцию, цикл становится немного сложным и т. Д. Ничто из этого не является настоящей ошибкой, вы можете Не указывайте количество строк, которое делает цикл сложным, но вы ухудшаете удобочитаемость и обслуживание.
Точно так же изменение имени переменной или извлечение функции сами по себе не являются ощутимыми улучшениями. Но все вместе они борются с медленной эрозией.
Как стена из гальки, где каждый день падает на землю. И каждый день один прохожий поднимает его и кладет обратно.