Мифы о рефакторинге

AndrewVK AndrewVK
Хочу рассказать про несколько мнений о рефакторинге, кои в ходе моей профессиональной деятельности оказались мифами.

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

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

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

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

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

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

Миф 7. Рефакторинг надо проводить как можно реже.
Чем раньше производить процедуру рефакторинга, тем меньшее количество кода придется править, так что затягивать до последнего нестоит.

Миф 8. Рефакторинг надо проводить как можно чаще.
Это тоже крайность, далекая от оптимума. Рефактироить имеет смысл только относительно стабильный код. Попытки рефакторить нестабильный код скорее всего просто бессмысленны из-за неопределенности, не позволяющей сразу спроектировать близкое к оптимуму решение.
... << RSDN@Home 1.1.4 beta 3 rev. 232>>
hrg
hrg
18.11.2004 01:25
AndrewVK -> "Мифы о рефакторинге"

A> Хочу рассказать про несколько мнений о рефакторинге, кои в ходе моей

A> профессиональной деятельности оказались мифами.

imho это уэе где то было. нет?

Yury Kopyl aka hrg | Гордость мешает доходам!
Posted via RSDN NNTP Server 1.9 gamma
AndrewVK
AndrewVK
18.11.2004 01:36
Здравствуйте, hrg, Вы писали:

hrg>imho это уэе где то было. нет?


Было конечно, у меня в голове.
... << RSDN@Home 1.1.4 beta 3 rev. 232>>
prVovik
prVovik
18.11.2004 02:38
Здравствуйте, AndrewVK, Вы писали:

AVK>На самом деле рефакторинг, как правило, не упрощает, а усложняет код. Результатом рефакторинга становится большая масштабируемость кода и упрощение его поддержки ценой усложнения структуры и, часто, увеличением объема кода и количества сущностей сразу после рефакторинга.

Не согласен. Рефакторинг — это оптимизация архитектуры/дизайна. В результате такой оптимизации архитектура может как усложниться, так и упроститься. По-этому я бы не говорил, что рефакторинг — это усложнение, или упрощение. Бывает и так и эдак...
... << RSDN@Home 1.1.4 @@subversion >>
AndrewVK
AndrewVK
18.11.2004 02:50
Здравствуйте, prVovik, Вы писали:

AVK>>На самом деле рефакторинг, как правило, не упрощает, а усложняет код. Результатом рефакторинга становится большая масштабируемость кода и упрощение его поддержки ценой усложнения структуры и, часто, увеличением объема кода и количества сущностей сразу после рефакторинга.

V>Не согласен. Рефакторинг — это оптимизация архитектуры/дизайна. В результате такой оптимизации архитектура может как усложниться, так и упроститься. По-этому я бы не говорил, что рефакторинг — это усложнение, или упрощение. Бывает и так и эдак...

Поэтому и написано "как правило". В м оей практике чаще всего это все же усложнение.
... << RSDN@Home 1.1.4 beta 3 rev. 232>>
VladD2
VladD2
18.11.2004 08:17
Здравствуйте, AndrewVK, Вы писали:

AVK>Поэтому и написано "как правило". В м оей практике чаще всего это все же усложнение.


А я как раз больше рефакторинг использую, чтобы причесать код. Без глубоких архитектунных мыслей.

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

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

При этом код скорее упрощается. Хотя опять же каковы критерии простоты/сложности. Например, количество методов обычно увеличивается, но их размер уменьшается. Я это считаю упрощением, так как это позволяет более просто воспринимать код.

Хотя конечно иногда понимашь, что ошибся и нужно что-то сделать иначе. Вот тут рефакториг действительно за частую усложняет код.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Silver_s
Silver_s
18.11.2004 03:34
Здравствуйте, prVovik, Вы писали:

V>Здравствуйте, AndrewVK, Вы писали:


V>Не согласен. Рефакторинг — это оптимизация архитектуры/дизайна. В результате такой оптимизации архитектура может как усложниться, так и упроститься. По-этому я бы не говорил, что рефакторинг — это усложнение, или упрощение. Бывает и так и эдак...


Тут ведь как... Архитектуры различаются по 3 признакам:
1) Кривая и прямая, кривая соответственно кривыми руками делается.
2) Соответствующая функционалу или нет.
3) Простая и сложная. Сложная это в смысле более абстрактная, более generic, более хитрая, но проще в таком коде разобраться если прямыми руками делалось, и по объему он как правлило гораздо меньше. Но сложная архитектура может содержать больше ограничний и больше риск нарваться на грабли. В результате рефакторинга к сложной архитектуре приходить безопаснее чем изначально под нее затачиваться.
Сложная архитектура, как правило более нелинейная по отношению к функционалу: можно сложнейший кусок нового функционала привинтить за пару секунд, а можно на другом примитивнейшем кусочке функционала получить граблями по носу. Тут главное не промахнуться, все мелочи учесть при усложнении.
prVovik
prVovik
18.11.2004 05:13
Здравствуйте, prVovik, Вы писали:

V>Не согласен. Рефакторинг — это оптимизация архитектуры/дизайна. В результате такой оптимизации архитектура может как усложниться, так и упроститься. По-этому я бы не говорил, что рефакторинг — это усложнение, или упрощение. Бывает и так и эдак...


Интересно, а с чем несогласен Lloyd?
... << RSDN@Home 1.1.4 @@subversion >>
Lloyd
Lloyd
18.11.2004 06:58
Здравствуйте, prVovik, Вы писали:

V>Здравствуйте, prVovik, Вы писали:


V>>Не согласен. Рефакторинг — это оптимизация архитектуры/дизайна. В результате такой оптимизации архитектура может как усложниться, так и упроститься. По-этому я бы не говорил, что рефакторинг — это усложнение, или упрощение. Бывает и так и эдак...


V>Интересно, а с чем несогласен Lloyd?


С тем, что "Рефакторинг — это оптимизация архитектуры/дизайна".
prVovik
prVovik
18.11.2004 07:08
Здравствуйте, Lloyd, Вы писали:

L>С тем, что "Рефакторинг — это оптимизация архитектуры/дизайна".

Хм, а что же это тогда такое?
... << RSDN@Home 1.1.4 @@subversion >>
Lloyd
Lloyd
19.11.2004 09:19
Здравствуйте, prVovik, Вы писали:

V>Хм, а что же это тогда такое?


Это просто изменение структуры кода и ничего более.
prVovik
prVovik
19.11.2004 11:33
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, prVovik, Вы писали:


V>>Хм, а что же это тогда такое?


L>Это просто изменение структуры кода и ничего более.


Изменение просто так? А зачем структуру менять просто так?
... << RSDN@Home 1.1.4 @@subversion >>
Lloyd
Lloyd
19.11.2004 03:23
Здравствуйте, prVovik, Вы писали:

V>Изменение просто так? А зачем структуру менять просто так?


Для облегчения внесения изменений.
VladD2
VladD2
18.11.2004 08:17
Здравствуйте, prVovik, Вы писали:

V>Интересно, а с чем несогласен Lloyd?


Гы-гы. Ты лучше спроси с чем он бывает согласен?
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
VladD2
VladD2
18.11.2004 08:06
Здравствуйте, prVovik, Вы писали:

AVK>>На самом деле рефакторинг, как правило, не упрощает, а усложняет код. Результатом рефакторинга становится большая масштабируемость кода и упрощение его поддержки ценой усложнения структуры и, часто, увеличением объема кода и количества сущностей сразу после рефакторинга.

V>Не согласен. Рефакторинг — это оптимизация архитектуры/дизайна. В результате такой оптимизации архитектура может как усложниться, так и упроститься. По-этому я бы не говорил, что рефакторинг — это усложнение, или упрощение. Бывает и так и эдак...

Согласен. Но посмотри на выделенные жирным куски утверждения.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
_FRED_
_FRED_
18.11.2004 04:26
Здравствуйте, AndrewVK, Вы писали:
AVK>Хочу рассказать про несколько мнений о рефакторинге, кои в ходе моей профессиональной деятельности оказались мифами.

А кто эти мифы сочиняет? Я вот ни разу ни про один такой миф не слышал — наоборот, на каждом шагу твердят о положительных последствиях его проведения... Кому в конце-концов рефакторинг может помешать?
_vovin
_vovin
18.11.2004 04:39
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, AndrewVK, Вы писали:

AVK>>Хочу рассказать про несколько мнений о рефакторинге, кои в ходе моей профессиональной деятельности оказались мифами.

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


После долгой практики применение рефакторинга происходит автоматически оптимальным образом. И эти "мифы" можно придумать глядя как пробуют рефакторить другие.
Как всегда, в таких материалах прежде всего заинтересованы начинающие, а кто освоил, тому уже менее интересно. Поэтому и ощущается недостача полной и всеобъемлющей информации о внедрении той или иной практики.
_FRED_
_FRED_
18.11.2004 05:14
Здравствуйте, _vovin, Вы писали:
_>После долгой практики применение рефакторинга происходит автоматически оптимальным образом. И эти "мифы" можно придумать глядя как пробуют рефакторить другие.

Спасибо, буду практиковаться. Пока что некоторые места каждые полтора месяца переделываю. Хотя теперь знаю почему:
AVK>структура кода не оптимальна из-за того что на момент проектирования существует некоторая неопределенность, от которой можно избавиться, только начав разработку.

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


Мне показалось, что следующее:
AVK>Миф 4. Рефакторинг не возможен без специальных средств.
AVK>Миф 5. Специальные средства для рефакторинга не нужны.
AVK>Миф 6. Навороченные средства рефакторинга намного лучше средств, обеспечивающих базовый функционал.

AVK>Миф 7. Рефакторинг надо проводить как можно реже.

AVK>Миф 8. Рефакторинг надо проводить как можно чаще.

скорее собьёт толку "начинающих" — тут нужен такой подход, как у Фаулера — делайте так и так и пользуйтесь этим (образно говоря), потому что понять справедливость доказательства "от противного" возможно, ИМХО, только погуляв долго по неверным дорожкам и набивши на них шишек, то есть не раз попробовав сделать не так, так надо. Ну а тем, кто "освоил", как ты сказал, "тому уже менее интересно".
AndrewVK
AndrewVK
18.11.2004 04:44
Здравствуйте, _FRED_, Вы писали:

AVK>>Хочу рассказать про несколько мнений о рефакторинге, кои в ходе моей профессиональной деятельности оказались мифами.


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


Да вот бывает. Кое что я почерпнул даже из этого форума.
... << RSDN@Home 1.1.4 beta 3 rev. 232>>
_vovin
_vovin
18.11.2004 04:30
AVK>Миф 3. Рефакторинг это упрощение кода.
AVK>На самом деле рефакторинг, как правило, не упрощает, а усложняет код. Результатом рефакторинга становится большая масштабируемость кода и упрощение его поддержки ценой усложнения структуры и, часто, увеличением объема кода и количества сущностей сразу после рефакторинга.

Миф и то и другое. Рефакторинг может быть как упрощением так и усложнением кода (без "как правило").

Например, в рамках TDD работает такая схема:
1. Зарефакторить имеющийся код для облегчения реализации новой функциональности
2. Описать требования для новой функциональности в виде тестов
3. Реализовать требования простейшим способом (локальный оптимум)
4. Зарефакторить приложение к простейшему виду (глобальный оптимум)

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

Все еще зависит от того, как определить понятие "упрощение кода". Какой код проще, у которого меньше классов, но больше строк или наоборот, и на каком диапазоне?

Вполне логично предположить, что проще тот, который легче читать и понимать.
Если будет мало классов, но много кода, то придется вникать в код для понимания сути происходящего. Если же классов станет слишком много, то возникнет неразбериха, что тоже нехорошо. Значит должно быть какое-то "золотое сечение" дизайна, например 7:1. Т.е. утрированно — семь строк на метод, семь методов на класс и т.д.
Значит не каждый рефакторинг, увеличивающий количество классов является усложнением? Тот, который приближает соотношение к "золотому сечению" явно можно назвать упрощением.

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

AVK>Миф 8. Рефакторинг надо проводить как можно чаще.

AVK>Это тоже крайность, далекая от оптимума. Рефактироить имеет смысл только относительно стабильный код. Попытки рефакторить нестабильный код скорее всего просто бессмысленны из-за неопределенности, не позволяющей сразу спроектировать близкое к оптимуму решение.

Вообще у всякой практики имеется своя область применения и допущения. Например правило частого рефакторинга было введено в контексте XP и TDD в частности. А там для него есть фундамент в виде test-first и необходимость в виде simplest thing.
Практика TDD направлена на "выращивание" дизайна из требований, реализованный в коде — Test-Driven Development. Где частый рефакторинг главным иструментом получения оптимального дизайна для данной ситуации.
Много раз наблюдалось на практике, как затягивание рефакторинга увеличивало усилия по разработке и в конце концов вынуждало проводить Большой Рефакторинг или забивать на хороший дизайн.

Не совсем понятно против чего направлено высказывание из заголовка. Против частого рефакторинга в любом контексте? Разумно. Попробуй часто порефактори JavaScript без тестов.

Необходимым условием проведения частых рефакторингов является наличие адекватного покрытия тестами. Кто применяет правило вне этого контекста, действует на свой страх и риск.
Так что данный миф скорее является примером misuse.
VladD2
VladD2
18.11.2004 08:06
Здравствуйте, AndrewVK, Вы писали:

Ты бы лучше статейку про рефакторин написал. Вот цэ было бы дело.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
hrg
hrg
19.11.2004 06:40
VladD2 -> "Re: Мифы о рефакторинге"

V> Здравствуйте, AndrewVK, Вы писали:


V> Ты бы лучше статейку про рефакторин написал. Вот цэ было бы дело.


http://www.ozon.ru/context/detail/id/1308678/ Ж)

Yury Kopyl aka hrg | Хоббиты — маздай! Мордовия — фарева
Posted via RSDN NNTP Server 1.9 gamma
AndrewVK
AndrewVK
19.11.2004 09:29
Здравствуйте, VladD2, Вы писали:

VD>Ты бы лучше статейку про рефакторин написал. Вот цэ было бы дело.


Не, статью не потяну. Тем более по такой флеймовой теме.
... << RSDN@Home 1.1.4 beta 3 rev. 232>>
VladD2
VladD2
20.11.2004 01:25
Здравствуйте, AndrewVK, Вы писали:

AVK>Не, статью не потяну. Тем более по такой флеймовой теме.


Так если не флэймить, а описать спринципы, возможности и т.п. то получилось бы очень нечего.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Дм.Григорьев
Дм.Григорьев
20.11.2004 11:01
Здравствуйте, VladD2, Вы писали:

VD>Так если не флэймить, а описать спринципы, возможности и т.п. то получилось бы очень нечего.


Дык с этим, кажись, Фаулер давно уже справился, на пять с плюсом.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
VladD2
VladD2
22.11.2004 05:37
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Дык с этим, кажись, Фаулер давно уже справился, на пять с плюсом.


Он по русски плохо пишет.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
AndrewVK
AndrewVK
22.11.2004 09:29
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Дык с этим, кажись, Фаулер давно уже справился, на пять с плюсом.


И что ж теперь — эта тема для всех закрыта?
... << RSDN@Home 1.1.4 beta 3 rev. 232>>
mikа
mikа
22.11.2004 09:55
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, Дм.Григорьев, Вы писали:


ДГ>>Дык с этим, кажись, Фаулер давно уже справился, на пять с плюсом.


AVK>И что ж теперь — эта тема для всех закрыта?


Стоит прочитать книжку. Многие моменты в ней уже были разобраны, так что не стоит открывать новых Америк или изобретать велосипеды. Тогда и воду отделили в этом топике, и не нужно было писать по пять раз столь очевидные вещи.
AndrewVK
AndrewVK
22.11.2004 10:11
Здравствуйте, mikа, Вы писали:

ДГ>>>Дык с этим, кажись, Фаулер давно уже справился, на пять с плюсом.


AVK>>И что ж теперь — эта тема для всех закрыта?


M>Стоит прочитать книжку.


Я ее читал.

M> Многие моменты в ней уже были разобраны, так что не стоит открывать новых Америк или изобретать велосипеды. Тогда и воду отделили в этом топике, и не нужно было писать по пять раз столь очевидные вещи.


Если они для тебя очевидны, это не значит что они очевидны всем.
... << RSDN@Home 1.1.4 beta 3 rev. 232>>
VladD2
VladD2
26.11.2004 01:51
Здравствуйте, mikа, Вы писали:

M>Стоит прочитать книжку. Многие моменты в ней уже были разобраны, так что не стоит открывать новых Америк или изобретать велосипеды. Тогда и воду отделили в этом топике, и не нужно было писать по пять раз столь очевидные вещи.


У Рихтера пол Виндовс описано и пол дотнета. Так что же теперь ВыньАпи и дотнетный форумы не читать что ли?

Читать, может и полезно, но и только.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Павел Кузнецов
Павел Кузнецов
18.11.2004 08:40
AndrewVK,

> Миф 2. Тщательное проектирование позволяет избавится от рефакторинга.

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

В последнее время я, пожалуй, чаще встречаюсь с другими мифами:

Миф 2'. Рефакторинг может заменить собой тщательное проектирование

Миф 2''. Рефакторинг всегда возможен
Posted via RSDN NNTP Server 1.9 gamma
prVovik
prVovik
18.11.2004 10:19
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>В последнее время я, пожалуй, чаще встречаюсь с другими мифами:

ПК>Миф 2'. Рефакторинг может заменить собой тщательное проектирование

Есть мнение, что рефакторинг — это и есть составляющая процесса тщательного проектирования.
... << RSDN@Home 1.1.4 @@subversion >>
vdimas
vdimas
18.11.2004 11:51
Здравствуйте, prVovik, Вы писали:

V>Здравствуйте, Павел Кузнецов, Вы писали:


ПК>>В последнее время я, пожалуй, чаще встречаюсь с другими мифами:

ПК>>Миф 2'. Рефакторинг может заменить собой тщательное проектирование

V>Есть мнение, что рефакторинг — это и есть составляющая процесса тщательного проектирования.


это составляющая процесса тщательного кодирования.
dshe
dshe
19.11.2004 08:33
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Миф 2''. Рефакторинг всегда возможен


А когда рефакторинг невозможен?
hrg
hrg
19.11.2004 08:48
dshe -> "Re[2]: Мифы о рефакторинге"

ПК>>Миф 2''. Рефакторинг всегда возможен


d> А когда рефакторинг невозможен?


При наличии субъективного фактора

Yury Kopyl aka hrg | Только взял боец гитару, сразу — видно гармонист
Posted via RSDN NNTP Server 1.9 gamma
dshe
dshe
19.11.2004 09:11
Здравствуйте, hrg, Вы писали:

hrg>dshe -> "Re[2]: Мифы о рефакторинге"


ПК>>>Миф 2''. Рефакторинг всегда возможен


d>> А когда рефакторинг невозможен?


hrg>При наличии субъективного фактора


Меня больше интересуют объективные факторы. Сформулирую вопрос по другому:
Бывают ли ситуации когда рефакторинг противопоказан? Какие это ситуации?
Павел Кузнецов
Павел Кузнецов
19.11.2004 09:14
dshe,

> ПК> Миф 2''. Рефакторинг всегда возможен


> А когда рефакторинг невозможен?


Например, далеко не всегда можно позволить себе рефакторинг, приводящий к изменению интерфейсов опубликованных библиотек.
Posted via RSDN NNTP Server 1.9 gamma
hrg
hrg
19.11.2004 09:19
Павел Кузнецов -> "Re[3]: Мифы о рефакторинге"

>> ПК> Миф 2''. Рефакторинг всегда возможен


>> А когда рефакторинг невозможен?


ПК> Например, далеко не всегда можно позволить себе рефакторинг,

ПК> приводящий к изменению интерфейсов опубликованных библиотек.

Тут 2 варианта:

1. Если используем TDD, то менять можно как угодно, если покрытие тестами
достаточное
2. Можно сделать рефаторинг библиотеки, оставив неиспользованные интерфейсы
для поддержки


Yury Kopyl aka hrg | Любой служащий должен строго выполнять свои
обязанности. А практически каждый занимается на работе чем хочет. (с)
Паркинсон
Posted via RSDN NNTP Server 1.9 gamma
AndrewVK
AndrewVK
19.11.2004 09:40
Здравствуйте, Павел Кузнецов, Вы писали:

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


Тут есть свои приемы, позволяющие обеспечить совместимость. Например провести рефакторинг, а старый интерфейс реализовать в качестве обертки. Так, к примеру, МС рефакторит GDI.
... << RSDN@Home 1.1.4 beta 3 rev. 232>>
vdimas
vdimas
19.11.2004 01:11
Здравствуйте, AndrewVK, Вы писали:

AVK>Тут есть свои приемы, позволяющие обеспечить совместимость. Например провести рефакторинг, а старый интерфейс реализовать в качестве обертки. Так, к примеру, МС рефакторит GDI.


откуда сведения, что они его рефакторят?
AndrewVK
AndrewVK
19.11.2004 01:42
Здравствуйте, vdimas, Вы писали:

V>откуда сведения, что они его рефакторят?


http://longhorn.msdn.microsoft.com . Отрефакторенная версия GDI называется Aero.
... << RSDN@Home 1.1.4 beta 3 rev. 232>>
VladD2
VladD2
20.11.2004 01:25
Здравствуйте, vdimas, Вы писали:


V>откуда сведения, что они его рефакторят?


Из МСДН. Ищи функции с окончанием Ex.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
vdimas
vdimas
22.11.2004 10:27
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, vdimas, Вы писали:



V>>откуда сведения, что они его рефакторят?


VD>Из МСДН. Ищи функции с окончанием Ex.


добавление новых ф-ий не есть рефакторинг
AndrewVK
AndrewVK
19.11.2004 09:40
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>В последнее время я, пожалуй, чаще встречаюсь с другими мифами:


ПК>Миф 2'. Рефакторинг может заменить собой тщательное проектирование


ПК>Миф 2''. Рефакторинг всегда возможен


Дык распиши почему это мифы, сделаем эдакий FAQ по рефакторингу.
... << RSDN@Home 1.1.4 beta 3 rev. 232>>
VladD2
VladD2
20.11.2004 01:25
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>В последнее время я, пожалуй, чаще встречаюсь с другими мифами:


ПК>Миф 2'. Рефакторинг может заменить собой тщательное проектирование


ПК>Миф 2''. Рефакторинг всегда возможен


Ну, если их немного подкорректировать, то они даже перестанут буть мифмми.

Миф 2'. Рефакторинг может являться частью процесса проектирования, а проектирование может быть совмещено с иследованиями и созданием прототипа.

Миф 2''. Рефакторинг может быть частью процесса производства ПО.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
serg_mo
serg_mo
22.11.2004 10:41
Здравствуйте, VladD2, Вы писали:

VD>Миф 2'. Рефакторинг может являться частью процесса проектирования, а проектирование может быть совмещено с иследованиями и созданием прототипа.


VD>Миф 2''. Рефакторинг может быть частью процесса производства ПО.


Э, поясни, пожалуйста. Я вот например считаю рефакторинг неотъемлимой частью процесса производства ПО
... << RSDN@Home 1.1.3 stable >>
VladD2
VladD2
24.11.2004 01:22
Здравствуйте, serg_mo, Вы писали:

VD>>Миф 2'. Рефакторинг может являться частью процесса проектирования, а проектирование может быть совмещено с иследованиями и созданием прототипа.


VD>>Миф 2''. Рефакторинг может быть частью процесса производства ПО.


_>Э, поясни, пожалуйста. Я вот например считаю рефакторинг неотъемлимой частью процесса производства ПО


А ты не квоть так сильно и пояснять не потребуется. Процетирую сам себя

>Ну, если их немного подкорректировать, то они даже перестанут буть мифмми.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
vdimas
vdimas
22.11.2004 10:42
Здравствуйте, VladD2, Вы писали:

VD>Миф 2'. Рефакторинг может являться частью процесса проектирования, а проектирование может быть совмещено с иследованиями и созданием прототипа.


как соотносится прототип и рефакторинг?
или у тебя система из прототипа вырастает?
XP форевер?

VD>Миф 2''. Рефакторинг может быть частью процесса производства ПО.

может или должен?
VladD2
VladD2
24.11.2004 01:22
Здравствуйте, vdimas, Вы писали:

V>как соотносится прототип и рефакторинг?

V>или у тебя система из прототипа вырастает?

Ага. Более того. Я чем дальше теб больше делаю прототипы не приложения, а его частей. Надо решить некую проблемы... Обдумываю ее насколько это возможно в голове... Решаю ее как попало ... Смотрю на результат... Переписываю по человечески... Смотрую еще раз... Переписываю еще лучше... В конце причесываю.

На каждом из этапов то и дело возникает рефактиринг. Это конечно не ХР, но тоже себе подходец.

V>XP форевер?


Не, ХР слишком не экстримальный вид программирования. Мой скорее можно назвать ВП (взрывное программирование). Занимаюсь своими делами (не программированием)... приходит в голову мысль... и понеслась... за сутки недельная норма... А потом опять неделю другими делами. За-то за сутки могу перефигачить программу так что мама не узнает.

Надо бы заптентовать.

VD>>Миф 2''. Рефакторинг может быть частью процесса производства ПО.

V>может или должен?

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

Когда задачи скорее исследовательские, то скорее должно. А когда решается задача которую заранее понятно как решать, то чем его меньше, тем меньше лишнего времени. Да и вообще рефакторинг при этом уже указывает на просчеты.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>