我目前正在开发一个perl网络应用程序LAMP风格,最近偶然发现了一些先前开发人员留下的死亡迷宫代码。他留下了许多神奇的数字和奇怪的逻辑,每当我不得不经历它时,它会给我带来麻烦。
我正在学习单元测试,所以我想找到一些有用的工具来重构代码并编写单元测试,以确保我不会意外破坏任何东西。
对LAMP perl的任何好的重构工具的任何建议? 最好是免费的:)
感谢。
答案 0 :(得分:13)
我认为Eclipse / EPIC有“一些”Perl重构工具......但请不要引用我; - )
也可能值得一试Komodo。但是完整版本不像Eclipse / EPIC那样免费。您可以尝试他们的开源版本Komodo Edit,但我想它不具备所有功能?
我没有使用上面的任何重构工具......我用vi / vim& TextMate编辑器及其提供的内容(或者我迄今为止在每个编辑器中找到的内容!)。
进行单元测试是一个好的开始。还要看看perltidy / Perl::Tidy& Perl::Critic这可能有助于通过混乱找到一些“代码味道”。
答案 1 :(得分:7)
Refactor :my => 'code'的志愿者可能会帮助你。无论如何,它可以自由地问:)
答案 2 :(得分:6)
Perl的动态特性意味着很难为它创建重构工具。
然而,关于测试,您应该能够组合一些回归测试来帮助您。这可以通过现在的代码开始并捕获其当前输出来实现。这可能是从命令行运行CGI脚本并将生成的HTML保存到文件。
一旦你捕获了这个,你可以改变代码,当你去检查HTML没有改变,这意味着代码没有破坏。当发生更改时,您可以找到错误,或者更改测试以接受新HTML正确。
这可能是一件苦差事,但从长远来看会让你的生活更轻松。您应该尝试自动化这些测试以使其易于运行。 Checkout Test :: WWW :: Mechanize and Test :: LongString以及所有其他。
答案 3 :(得分:5)
虽然它并没有真正重构,但PerlMonks node描述了使用B::Deparse对perl代码进行反混淆处理的几个Vim映射。
他们的例子:
当光标在正常模式下超过此行时,您可以键入_d
:
--$|&&s|\n|-|;
......它将被替换为:
s/\n/-/ if --$|;
这一行:
$foo and $bar or $baz = 1;
......将替换为:
$baz = 1 unless $foo and $bar;
答案 4 :(得分:1)
带有EPIC插件的Eclipse确实有一些重构支持。不像IntelliJ对Java工具的重构那么复杂。不是100%肯定它会对你的问题有所帮助。我用它的方式是突出显示代码块并将它们移动到函数/方法中。在你的情况下,你可能会想要对那些神奇的数字进行大量搜索/替换......
我假设您将使用Test :: More来编写单元测试。其他一些EPIC工具可以帮助解决这个问题(例如“todo”标签)。
您还可以使用Test :: WWW :: Mechanize和Test :: WWW :: Selenium - 在您的情况下定义selenium测试以确保您不会破坏任何最终用户功能。虽然EPIC没有任何特别的帮助,但应该可以在调试时使用它来逐步执行代码。
祝你好运。 : - )答案 5 :(得分:1)
请参阅Devel :: Refactor - 用于重构Perl代码的Perl扩展。 https://metacpan.org/pod/Devel::Refactor
答案 6 :(得分:0)
vim
! (或任何其他文本编辑器)
确实没有一个神奇的工具来折射您的代码,有一些工具(例如)重命名变量/函数,但它无法神奇地修复可怕的代码结构或奇怪的逻辑。
答案 7 :(得分:0)