Подтвердить что ты не робот

Когда вы не должны рефакторировать?

Мы все знаем, что рефакторинг хорош, и я люблю его так же, как и следующего парня, но есть ли у вас реальные случаи, когда лучше не рефакторировать?

Что-то вроде времени или синхронизации? В равной степени приветствуются технические или человеческие причины. Реальные сценарии событий и опыт плюс.

Изменить: из ответов до сих пор, похоже, единственная причина не в рефакторе - это деньги. Мой вопрос в основном относится к чему-то вроде этого: предположим, что вы хотите выполнить "метод извлечения", но если вы добавите дополнительный вызов функции, вы сделаете код немного менее быстрым и помешаете очень строгой синхронизации. Просто, чтобы дать вам представление о том, что я имею в виду.

Другая причина, по которой я иногда слышу, - это то, что "другие, используемые для текущего макета кода, будут раздражены вашими изменениями". Конечно, я сомневаюсь, что это хорошая причина.

4b9b3361

Ответ 1

Чтобы укрепить другой ответ (и коснуться тех вопросов, которые вы упомянули): не рефакторируйте часть кода, пока он не будет хорошо охвачен всеми соответствующими видами тестирования. Это не означает, что "не рефакторизуйте его" - акцент делается на "добавлении необходимых тестов" (для правильного выполнения модульных тестов может потребоваться некоторый рефакторинг, в частности введение DP7 и/или зависимостей инъекций factory DP в коде, который теперь прочно привязан к конкретным зависимостям).

Обратите внимание, что это касается ваших вопросов второго абзаца: если часть кода имеет критический момент, он должен быть хорошо освещен "load-tests" (который, как и более обычный тип, тест правильности, должен охватывать как конкретные единицы [хотя и с точки зрения производительности - проверка правильности - это бизнес других тестов!)) И сквозные операции - эквивалент модульных тестов и интеграционных тестов, если говорить о правильности, а не о производительности).

Многозадачный код с тонкой синхронизацией может быть кошмаром, так как ни один тест не может действительно сделать вас полностью уверенным в этом - никакой другой рефакторинг (который никоим образом не повлияет на любую хрупкую синхронизацию, которая, как представляется, сейчас работает), должна следует рассматривать прежде, чем кто-то намерен сделать синхронизацию много, МНОГО более надежным и звуковым (передача сообщений через очереди гарантированных потоков, являющихся BY FAR, моим любимым шаблоном дизайна в этом отношении; -).

Ответ 2

Я большой поклонник рефакторинга, чтобы сохранить код чистым и поддерживаемым. Но вы вообще хотите уклониться от рефакторинга производственных модулей, которые отлично работают и не требуют изменений. Однако, когда вам нужно работать над модулем, чтобы исправить ошибки или ввести новую функцию, некоторые рефакторинги обычно стоят того и не будут стоить дорого, так как вы уже готовы выполнять полный набор тестов и проходить выпуск обработать. (Модульные тесты очень полезны, но являются лишь частью полного набора тестов, как отмечали другие плакаты.)

Более значимые рефакторинги могут сделать его труднее для других, чтобы найти свой путь вокруг нового кода, и они могут затем неблагоприятно реагировать на рефакторинг. Чтобы свести к минимуму это, вовлечь других членов команды в процесс, используя подход, такой как парное программирование.

Обновление (8/10): Еще одна причина не рефакторирования - это когда вы не приближаетесь к существующей базе кода с надлежащим смирением и уважением. С этими качествами вы будете склонны быть консервативными и делать только рефакторинги, которые действительно имеют значение. Если вы подходите к коду со слишком высокой надменностью, вы можете просто внести изменения вместо рефакторинга. Является ли это новое имя метода более ясным, или у старого есть имя с очень специфическим значением в вашем домене приложения? Вам действительно нужно было механически переформатировать этот исходный файл в ваш личный стиль, когда существующий стиль соответствовал проектам? Опять же, может помочь программирование пары.

Ответ 3

Хммм - Я не согласен с вышеизложенным (1-й ответ). Данный код без тестов, вы можете реорганизовать его, чтобы сделать его более проверяемым.

Вы не используете код рефакторинга, когда вы не можете проверить полученный код вовремя, чтобы доставить его таким образом, чтобы он по-прежнему был ценным для получателя.

Вы не используете код рефакторинга, когда ваш рефакторинг не улучшит качество кода. Качество не субъективно, хотя иногда дизайн может быть.

Вы не используете код рефакторинга, если нет никаких бизнес-обоснований для внесения изменений.

Есть, вероятно, больше, но, надеюсь, вы получите идею...

Ответ 4

Как пишет Мартин Фаулер, вам не следует реорганизовывать, если ближайший срок близок. Это время в проекте лучше подходит для очистки ошибок, а не для улучшения дизайна (рефакторинг). Сделайте рефакторинг опущенным на этот раз непосредственно после окончания срока.

Ответ 5

Рефакторинг не очень хорош сам по себе. Скорее, его цель - улучшить качество кода, чтобы его можно было поддерживать дешевле и с меньшим риском добавления дефектов. Для активно разработанного кода преимущества рефакторинга стоят стоимости. Для замороженного кода, в котором нет намерения продолжать работу, рефакторинг не дает никакой пользы.

Даже для живого кода рефакторинг имеет свои риски, которые могут быть сведены к минимуму. Он также имеет свое место в цикле разработки, который идет вперёд, где он менее разрушительный. Лучшее время и место для рефакторинга - это незадолго до того, как вы начнете вносить серьезные изменения в какой-то хрупкий код.

Ответ 6

Когда это не экономически выгодно. Там парень в том месте, где я работаю, который любит рефакторинг. Совершенствование кода делает его очень счастливым. Он может проверить текущее дерево проекта и перейти в город на нем, перемещать функции и классы вокруг и затягивать вещи, чтобы они выглядели великолепно, имели лучший поток и более расширяемы в будущем.

К сожалению, это не стоит денег. Если он проводит неделю рефакторинга некоторых классов в более функциональные подразделения, с которыми может быть легче работать в будущем, то потеряла бы заработную плату за неделю в компании без заметных улучшений в нижней строке.

Код никогда не будет абсолютно совершенным. Вы учитесь жить с ним и не отрывать руки от чего-то, что может быть сделано лучше, но, возможно, не стоит того времени.

Ответ 7

Если код кажется очень сложным для рефакторинга без нарушения, это самый важный код для рефакторинга!

Если тестов нет, напишите их как рефакторинг.

Честно говоря, в одном случае вам запрещено прикасаться к определенному коду менеджером/клиентом/SomeoneImportant, и когда это произойдет, я считаю, что проект сломан.

Ответ 8

Вот мой опыт:

Не рефакторинг:

  • Если у вас нет набора тестов, сопровождающего код, который вы хотите реорганизовать. Вместо этого вы можете сначала разработать тестовый костюм.
  • Когда ваш менеджер действительно не заботится о сохранности и расширяемости базы данных текущей, вместо этого они очень заботятся о том, смогут ли они поставлять продукт по расписанию, особенно для проекта с короткий и жесткий график.

Ответ 9

Если вы придерживаетесь принципа, что все, что вы делаете, должно добавить ценность для клиента/бизнеса, тогда вам не нужно рефакторировать следующие моменты:

  • Код, который работает, и никаких новых разработок не планируется.
  • Кодекс, который достаточно хорош/работает и рефакторинг, просто представляет золотое покрытие.
  • Стоимость рефакторинга выше, чем проживание с существующим кодом.
  • Стоимость рефакторинга выше, чем переписывание кода с нуля

Некоторые из других ответчиков говорят, что вы не должны использовать код рефакторинга, который не имеет модульных тестов. Если код нуждается в рефакторинге, вам необходимо его реорганизовать, однако вы должны сначала написать тесты. Если код написан таким образом, что его трудно проверить, его следует переписать (в идеальном мире).

Ответ 10

Когда у вас есть другой материал для сборки. Я всегда чувствую, что рефакторинг существующей системы, когда я должен делать что-то еще.

Ответ 11

Всегда есть баланс между фиксацией или добавлением кода и рефакторингом. Тем не менее, этот баланс до сих пор в пользу рефакторинга, что я не думаю, что когда-либо был в команде, которая слишком много реорганизовала. Скорее всего, если вы думаете, что ошибаетесь на стороне рефакторинга слишком много, вы правы на деньги.

Конечно, самым важным определяющим фактором является то, насколько близок крайний срок. Если срок действия неминуем, требования должны быть первыми.

Ответ 12

Не рефакторинг, если у вас нет времени, чтобы проверить реорганизованный код перед выпуском. Рефакторинг может вводить ошибки. Если у вас есть проверенный и относительно без ошибок код, зачем рисковать? Подождите до следующего цикла разработки.

Ответ 13

Если вы застряли, поддерживая старую флексовую базу кода без будущего, за исключением того, что она будет работать до тех пор, пока руководство не сможет укусить пулю и сделать переписывание, тогда рефакторинг - это потерянная ситуация. Сначала разработчик теряет, потому что рефакторинг плохой чешуйчатый код - это кошмар, а во-вторых, бизнес теряет, потому что, когда разработчик пытается реорганизовать программное обеспечение, он неожиданно и непредсказуем.

Ответ 14

Если вы действительно не знаете, что делает код в первую очередь. И да, я видел, как люди игнорируют это правило.

Ответ 15

Не нужно ли переформатировать код в значительной степени на основе склонности людей вырезать и вставлять код, а не думать о решении и делать факторинг заранее? Другими словами, всякий раз, когда вы чувствуете необходимость вырезать и вставлять какой-то код, просто сделайте этот кусок кода функцией и запишите его.

Мне пришлось поддерживать слишком много кода, где людям было легче разрезать и вставить целую функцию, только чтобы сделать одно или два тривиальных изменения, которые легко могли быть параметризованы. Но, как и многие другие опыты, чтобы попытаться реорганизовать часть этого кода, потребовалось бы много времени и было бы очень рискованным.

У меня есть 4 проекта, в которых набор функций в 10K строк был просто скопирован и изменен по мере необходимости. Это ужасный кошмар. Особенно, когда код имеет множество проблем, например. гипотезы жесткой проводки, тонны глобальных переменных и т.д. Я чувствую желчь в горле, просто думая об этом.

Ответ 16

Это просто компромисс между затратами и выгодами. Оцените стоимость рефакторинга, оцените преимущества, определите, действительно ли у вас есть время для реорганизации, учитывая другие задачи, определить, является ли рефакторинг наилучшим компромиссом по времени и выгоде. Могут быть другие задачи, которые стоит сделать.