Как бороться с дублирующимся кодом под Linux? - PullRequest
5 голосов
/ 09 февраля 2009

Я ищу лучший подход к работе с дублирующимся кодом в устаревшем PHP-проекте с примерно 150 тыс. Строк кода.

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

Ответы [ 4 ]

2 голосов
/ 23 августа 2009

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

Доступно для многих языков, включая систему PHP. Образец отчета об обнаружении клонов PHP для Joomla (фреймворк PHP) можно найти по ссылке.

2 голосов
/ 09 февраля 2009

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

Кроме того, на практике люди обычно немного изменяют скопированный код, поэтому часто не будут прямые дубликаты, а будут закрываться варианты. Боюсь, что автоматическое обнаружение c & p в большинстве случаев вас там не даст.

Существуют, однако, инструменты рефакторинга, которые могут помочь вам с острым выполнением изменений (а иногда и с поиском вероятных кандидатов). Google для "php refactoring", есть довольно много доступных инструментов, как автономных, так и в составе IDE.

1 голос
/ 10 февраля 2009

Пожалуйста, также примите во внимание процесс , который приводит к этому дублированию кода!

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

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

В противном случае вы окажетесь через два года в поисках того же вопроса, который вы задали здесь!

0 голосов
/ 09 февраля 2009

Может быть, это grep thread может вам помочь?

...