Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.02;
Скачать: CL | DM;

Вниз

Рефакторинг проекта. Что посоветуете использовать?   Найти похожие ветки 

 
Карелин Артем ©   (2006-03-11 09:55) [0]

Значится есть у меня проект на Д5. Сотня модулей, 50К строк чиста кода.
Хочу разгрести это дело и привести к более удобному виду.
Для начала привести к одному стандарту названия классов, методов и свойств, параметров и т.д. В идеале нужен рефакторинг как в VS 2005 Enterprise.
Что посоветуете для этого.
Был бы на студии 2005 проект - проблем бы не было.


 
Lamer@fools.ua ©   (2006-03-11 12:23) [1]

BDS2006


 
Sergey Masloff   (2006-03-11 12:58) [2]

В меню Search & Replace ;-)
По совокупности трудоемкость меньше будет а эффект больше.


 
iZEN ©   (2006-03-11 13:24) [3]

Sergey Masloff   (11.03.06 12:58) [2],
рефакторинг не ограничивается Search & Replace, хотя для начала сойдёт.
Но именно для начала, которого хочет автор темы.


 
Карелин Артем ©   (2006-03-11 13:31) [4]

Sergey Masloff   (11.03.06 12:58) [2]
LOL!!!!!!!!!!!!!!!!!!!!!!!!!!
1) Все-таки модуль не один и даже не 10. Класс может быть продекларирован в одном модуле, а использоваться скажем в 60 модулях.
2) Если мне надо к примеру поменять название или параметры метода Write у одного конкретного класса, не вызовет ли предложенный способ изменение ВСЕХ строчек программы, содержащих Write???

Огромная просьба не предлагать такие решения в данной ветке!


 
Sergey Masloff   (2006-03-11 14:42) [5]

Карелин Артем ©   (11.03.06 13:31) [4]
Артем, уверяю Вас я рекомендуемый мной метод УСПЕШНО применял при рефакторинге проектов ЗНАЧИТЕЛЬНО больших по объему чем приводимый в исходном топике. Как минимум использование его даст возможность просмотреть глазами места где рефакторингуемый элемент встречается и просто выбросить ненужные устаревшие и так далее. Что в свою очередь позволит значительно сократить число проходов.


 
Суслик ©   (2006-03-11 14:47) [6]

поддержу Сергея.
у меня проект 1млн строк, иногда занимаюсь рефакторингом.
У дельфи есть большое достоинство - он быстро компилирует.
Что тебе мешает - поправить название метода и начать build?
Сразу узнаешь, где что нужно править.
Зачастую действтиельно можно поиском.


 
Nic ©   (2006-03-11 14:48) [7]

По-моему, 50 Кб кода - это не так уж много, чтобы  искать специализированные средства рефакторинга. ИМХО.


 
Nic ©   (2006-03-11 15:02) [8]

А вот сотня модулей на 50Кб кода - это многовато =о|


 
antonn ©   (2006-03-11 15:13) [9]

Nic ©   (11.03.06 15:02) [8]
А вот сотня модулей на 50Кб кода

50000 строк


 
Nic ©   (2006-03-11 15:16) [10]

Надо же, ляп какой :) Спать мне надо больше.


 
API ©   (2006-03-11 15:34) [11]

Карелин Артем ©   (11.03.06 09:55)
Класс может быть продекларирован в одном модуле, а использоваться скажем в 60 модулях.


Search ->Find in files -> Search all files in project

Если мне надо к примеру поменять название или параметры метода Write у одного конкретного класса, не вызовет ли предложенный способ изменение ВСЕХ строчек программы, содержащих Write???

Поменять название в 100 местах? Без проблем, максимум 5-10 минут "вручную".
Добавить параметр? Если "до того" Вам параметр был не нужен, и тут вдруг понадобился, то: или вводите новый метод, или перегружайте, или используйет параметр по умолчанию.
Удалить параметр? Снова тех же 5-10 минут.

Да и не всякий код можно автоматически отрефакторить.
Вот, сегодня сам исправлял в некоторых местах по проекту (кстати, размер одного порядка - ~62 000 строк) метод CreateService() на дополнительно написанный RequestService(). Дело в том, что CreateService() мог возвращать nil, и поэтому результат надо проверять на неравенство. В одних местах эта проверка через ASSERT, в других - условие. Ну и добавил я метод RequestService(), в котором вызывался CreateService(), а затем результат проверялся, а, в случае nil, вызывалось исключение. Но менять CreateService() на RequestService() везде "автоматом", по понятным причинам, не получится. Сделал вручную, где не надо - убрал лишний ASSERT(), несколько локальных указателей. 20 минут - зато уверен, что код "подчищен", и никаких лишних проверок нет, да и методы вызываются в каждом месте - нужные.

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

Скажете - долго и нудно? Ну так заранее думать, проектировать нужно. (У меня вот, был однажды аврал - не подумал - теперь вот подправлял).
Да и прежде, чем "рефакторить", подумать - нужен ли этот рефакторинг?
А то можно так нарефакториться, что потом сам черт ногу сломит.

Огромная просьба не предлагать такие решения в данной ветке!

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

То есть, все просто - вручную сегодня или автоматом через неделю. Смотрю, Вам по душе второй путь.

Ну что ж, удачи в любом случае! :)


 
kaZaNoVa ©   (2006-03-11 17:18) [12]

а для чего нужен этот самый рефакторинг?)


 
API ©   (2006-03-11 17:57) [13]

а для чего нужен этот самый рефакторинг?)

В трех словах, рефакторинг - улучшение существующего кода.
Подробности - по адресу: http://www.google.com


 
kaZaNoVa ©   (2006-03-11 18:06) [14]

API ©   (11.03.06 17:57) [13]
а может .. того? что работает - то и трогать не надо, дабы не испортить ...


 
API ©   (2006-03-11 18:14) [15]

что работает - то и трогать не надо, дабы не испортить ...

Можно и так. :)
Но если проект писал кто-то другой, да еще и "на коленке", а Вам его сопровождать и наращивать надо, то без рефакторинга трудновато будет.


 
kaZaNoVa ©   (2006-03-11 20:59) [16]

а если исходника ваще нет?))


 
wicked ©   (2006-03-11 21:22) [17]

по сабжу:
кидайте в меня тапками, но я использую рефакторинг "для бедных"....
суть проста: меняются имена и/или сигнатуры "причёсываемых" обьектов, будь то классы, методы или простые функции..... причем, если меняется реализация некоторого обьекта (вместе с параметрами), то и меняется его имя, поскольку имя должно отражать действия, производимые методом.... запускаем make проекта и компилятор сам нам укажет места, где нужно изменить исходник.... процесс повторяем итеративно до получения удовлетворительных результатов.... в сочетании с системой контроля версий (svn) занятие это не очень трудное и хлопотное....

> kaZaNoVa ©   (11.03.06 20:59) [16]
> а если исходника ваще нет?))

тогда и разговоры такие не ведутся....


 
Джо ©   (2006-03-11 22:00) [18]

> [16] kaZaNoVa ©   (11.03.06 20:59)
> а если исходника ваще нет?))

Нет ножек — нет конфеток (с) :p


 
Карелин Артем ©   (2006-03-11 22:24) [19]

Народ, поймите меня правильно. Недавно пришлось чуть поправить - изменить одну часто используемую глобальную переменную. Название, тип.
Я руками это сделал аналогично wicked ©   (11.03.06 21:22) [17].
Эта переменная встретилась примерно в 300 местах. А рефакторить надо много...


 
Джо ©   (2006-03-11 22:26) [20]

> [19] Карелин Артем ©   (11.03.06 22:24)
> Эта переменная встретилась примерно в 300 местах. А рефакторить
> надо много...

Ну, надеюсь, ты ее убрал? :)


> А рефакторить надо много...

Ну, из стандартного уже подсказали, BDS 3 или 4. Других средств, заточенных под Делфи, я не использовал. Кажется, ModelMaker есть такое.


 
Игорь Шевченко ©   (2006-03-13 13:18) [21]

Стандартный инструмент для рефакторинга - руки + тесты. Все остальное от лукавого. Доверяя инструментам в BDS теряешь самое главное - степень понимания кода.


 
pasha_golub ©   (2006-03-13 16:50) [22]

Я постоянно Search & Replace пользуюсь, чесслово. Да, иногда долго бывает. Зато точно знаю где и что менялось. И в случае непоняток, знаю, что это я накосячил, а не какой-нибудь рефакторер.


 
Джо ©   (2006-03-13 16:51) [23]

А я уж привык к Rename method, просто без него, как без рук :)


 
Джо ©   (2006-03-13 16:53) [24]

> [23] Джо ©   (13.03.06 16:51)

Т.е., хотел сказать просто "Refactor/Rename...".


 
Карелин Артем ©   (2006-03-13 21:13) [25]


> Игорь Шевченко ©   (13.03.06 13:18) [21]

А это.... Как его????
Во! Голова!!!! И мозга!!!

Не нужны чё-ли???


 
Игорь Шевченко ©   (2006-03-14 10:44) [26]

Карелин Артем ©   (13.03.06 21:13) [25]


> Голова!!!! И мозга!!!
>
> Не нужны чё-ли???


Нет конечно. А зачем они в процессе рефакторинга ?



Страницы: 1 вся ветка

Текущий архив: 2006.04.02;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.041 c
2-1142787079
elfebet
2006-03-19 19:51
2006.04.02
функция Аккермана


11-1122315580
AlexLumpov
2005-07-25 22:19
2006.04.02
OnClose в модальной форме на KOL


15-1141992054
ANB
2006-03-10 15:00
2006.04.02
Просьба к модераторам


2-1142502168
Sonnetrut
2006-03-16 12:42
2006.04.02
Привязка файла Excel


3-1139464324
Bambino
2006-02-09 08:52
2006.04.02
Вызов диалога настройки подключения к серверу через ADO?