Есть ли хороший инструмент для рефакторинга веб-кода Perl?

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

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

Любая рекомендация для любого хорошего инструмента рефакторинга для LAMP perl? Предпочтительно свободный:)

Спасибо.

Ответы

Ответ 1

Я думаю, Eclipse/EPIC имеет "некоторые" инструменты рефакторинга Perl... но не цитируйте меня на этом; -)

Возможно, стоит проверить Komodo. Однако полная версия не является бесплатной, как Eclipse/EPIC. Вы можете попробовать свою версию с открытым исходным кодом Komodo Edit, но я думаю, что у нее не будет всех функций?

Я не использовал ни выше, ни какие-либо другие инструменты рефакторинга... Я встречаюсь с редакторами vi/vim и TextMate и тем, что они предоставляют (или то, что я до сих пор нашел в каждом из этих редакторов!).

Выполнение модульных тестов - хорошее начало. Также посмотрите perltidy/Perl:: Tidy и Perl:: Критик, который может помочь разобраться в беспорядке и найти некоторые из этих "кодовых запахов".

Ответ 2

Возможно, добровольцы на Рефакторинг: my = > 'code' могут вам помочь. Во всяком случае, он может спросить:)

Ответ 3

Динамическая природа Perl означает, что для него очень сложно создавать инструменты рефакторинга.

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

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

Это может быть немного сложной задачей, но в долгосрочной перспективе это упростит вашу жизнь. Вы должны попытаться автоматизировать эти тесты, чтобы упростить их запуск. Checkout Test:: WWW:: Mechanize and Test:: LongString, а также все остальные.

Ответ 4

Хотя это не рефакторинг на какой-либо большой глубине, этот PerlMonks node описывает пару сопоставлений Vim для деобфаживания perl-кода с использованием B::Deparse.

Их примеры:

Вы можете ввести _d, когда курсор находится над этой строкой в ​​обычном режиме:

--$|&&s|\n|-|;

... и он будет заменен на:

s/\n/-/ if --$|;

И эта строка:

$foo and $bar or $baz = 1;

... будет заменен на:

$baz = 1 unless $foo and $bar;

Ответ 5

Eclipse с плагином EPIC имеет некоторую поддержку рефакторинга. Не так утончен, как рефакторинг IntelliJ для инструмента Java. Не 100% уверен, что это поможет в вашей проблеме. Как я использовал, это выделить блоки кода и переместить их в функции/методы. В вашем случае вы, вероятно, захотите сделать много поиска/замены на этих магических числах...

Я предполагаю, что вы собираетесь использовать Test:: More для написания модульных тестов. Некоторые из других инструментов EPIC могут помочь с этим (например, теги todo).

Вы также можете использовать Test:: WWW:: Mechanize и Test:: WWW:: Selenium - было бы полезно в вашем случае иметь тесты селена, чтобы убедиться, что вы не нарушаете функциональность конечного пользователя. EPIC не имеет ничего особенного, чтобы помочь с этим, хотя, но его можно использовать для выполнения кода при отладке.

Удачи.: -)

Ответ 7

vim! (Или любой другой текстовый редактор)

На самом деле нет волшебного инструмента, который бы преломлял ваш код, есть инструменты вокруг (например) переименовать переменные/функции, но нет способа, чтобы он мог магически исправить ужасную структуру кода или странную логику.

Ответ 8

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

http://padre.perlide.org/

Отказ от ответственности: я являюсь вкладчиком Падре.