Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
Карелин Артем ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.04 c
15-1142145294
Kerk
2006-03-12 09:34
2006.04.02
Ребяты, устроим консилиум


2-1142943475
WestBronx
2006-03-21 15:17
2006.04.02
Как запустить с невидимой формой? И по поводу GetFileAttributes.


15-1142150131
Ega23
2006-03-12 10:55
2006.04.02
С Днём рождения! 12 марта


3-1139400405
Ega23
2006-02-08 15:06
2006.04.02
Как лучше всего пинговать сервер?


6-1135017409
SergP
2005-12-19 21:36
2006.04.02
Открыть браузер и выполнить POST-запрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский