Есть ли хороший инструмент для рефакторинга веб-кода 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 не имеет ничего особенного, чтобы помочь с этим, хотя, но его можно использовать для выполнения кода при отладке.
Удачи.: -)
Ответ 6
См. Devel:: Refactor - расширение Perl для рефакторинга кода Perl.
https://metacpan.org/pod/Devel::Refactor
Ответ 7
vim
! (Или любой другой текстовый редактор)
На самом деле нет волшебного инструмента, который бы преломлял ваш код, есть инструменты вокруг (например) переименовать переменные/функции, но нет способа, чтобы он мог магически исправить ужасную структуру кода или странную логику.
Ответ 8
У Padre есть инструменты для рефакторинга.
Переименование переменных работает довольно хорошо (через два года или около того).
http://padre.perlide.org/
Отказ от ответственности: я являюсь вкладчиком Падре.