2008-09-28 3 views
0

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

+0

Вы должны написать свой вопрос немного яснее. Вы имеете в виду функцию рефакторинга конкретной среды IDE? – Horcrux7 2008-09-28 15:54:14

+0

ОП задает вопрос о методологии рефакторинга. Рефакторинг и IDE не связаны друг с другом. Да, некоторые IDE имеют помощников по рефакторингу, но это код, который реорганизуется программистом, а не инструментами IDE. – Kev 2008-09-28 16:23:15

+0

Возможно, это должна быть вики сообщества? – 2011-05-11 03:44:17

ответ

4

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

5

Рефакторинг может быть рискованно

Рефакторинг часто бывает трудно, потому что refactorer часто не тот же человек, как оригинальный дизайнер. Поэтому он или она не имеют того же фона в системе и решения, которые позади оригинального дизайна. Вы всегда рискуете, что ошибки, устраненные в оригинальном дизайне, могут появиться в новом дизайне.

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

Это просто риск, однако, есть вероятность, что команда ошибается, и новый член команды, если ее назначили ответственным и позволил сделать что-то свое, на самом деле серьезно улучшится.

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

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

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

1

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

Таким образом, риск должен занять слишком много времени для рефакторинга.

1

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

2

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

0

К отличному ответу Кэва - «Эффективно работать с устаревшим кодом» Майкла Перса необходимо читать для людей, работающих в Software Engineering.

Смежные вопросы