14

我目前正在开发一个 perl 网络应用程序 LAMP 样式,最近偶然发现了一些以前的开发人员留下的代码死亡迷宫。他留下了这么多神奇的数字和奇怪的逻辑,以至于每次我必须通过它时都让我头疼。

我现在正在学习单元测试,所以我想找到一些有用的工具来重构代码并编写单元测试,以确保我不会意外破坏任何东西。

对 LAMP perl 的任何好的重构工具有什么建议吗?最好是免费的:)

谢谢。

4

8 回答 8

13

我认为Eclipse / EPIC有“一些”Perl 重构工具......但不要引用我的话 ;-)

可能也值得一试Komodo。但是完整版不像 Eclipse / EPIC 那样免费。您可以尝试他们的开源版本Komodo Edit,但我猜它不会具备所有功能?

我没有使用上述或任何其他重构工具......我使用 vi/vim 和 TextMate 编辑器以及它们提供的内容(或者到目前为止我在每个编辑器中找到的内容!)。

进行单元测试是一个好的开始。还可以看看perltidy / Perl::TidyPerl::Critic,这可能有助于通过混乱来寻找一些“代码气味”。

于 2009-02-02T11:29:40.860 回答
7

可能,Refactor :my => 'code' 的志愿者可以帮助你。无论如何,它是免费问:)

于 2009-02-02T09:23:34.357 回答
6

Perl 的动态特性意味着很难为它创建重构工具。

但是,关于测试,您应该能够组合一些回归测试来帮助您。这通过从现在的代码开始并捕获其当前输出来工作。这可能是从命令行运行 CGI 脚本并将生成的 HTML 保存到文件中。

捕捉到这一点后,您可以更改代码,并在检查时检查 HTML 是否未更改,这意味着代码没有损坏。当确实发生更改时,您可以找到错误,或者更改测试以接受新的 HTML 为正确的。

这可能有点麻烦,但从长远来看会让你的生活更轻松。您应该尝试自动化这些测试以使其易于运行。签出 Test::WWW::Mechanize 和 Test::LongString 以及所有其他。

于 2009-02-02T14:40:42.020 回答
5

虽然它并没有真正进行深度重构,但这个PerlMonks 节点描述了几个 Vim 映射,用于使用B::Deparse对 perl 代码进行反混淆。

他们的例子:

在正常模式下,您可以_d在光标位于此行上时键入:

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

...它将被替换为:

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

而这一行:

$foo and $bar or $baz = 1;

...将被替换为:

$baz = 1 unless $foo and $bar;
于 2009-02-02T12:32:01.827 回答
1

带有 EPIC 插件的 Eclipse 确实有一些重构支持。不像 IntelliJ 对 Java 工具的重构那么复杂。不是 100% 确定它会帮助您解决问题。我使用它的方式是突出显示代码块并将它们移动到函数/方法中。在您的情况下,您可能会想要对那些神奇的数字进行大量搜索/替换......

我假设您将使用 Test::More 来编写单元测试。其他一些 EPIC 工具可以帮助解决这个问题(例如“todo”标签)。

您还可以使用 Test::WWW::Mechanize 和 Test::WWW::Selenium - 在您的情况下定义 selenium 测试以确保您不会破坏任何最终用户功能会很有用。虽然 EPIC 没有任何特别的帮助,但它应该可以在调试时使用它来逐步执行代码。

祝你好运。:-)

于 2009-02-03T02:48:04.857 回答
1

请参阅 Devel::Refactor - 用于重构 Perl 代码的 Perl 扩展。 https://metacpan.org/pod/Devel::重构

于 2009-05-14T21:42:59.157 回答
0

vim!(或任何其他文本编辑器)

真的没有什么神奇的工具可以重构你的代码,有一些工具可以(例如)重命名变量/函数,但它无法神奇地修复可怕的代码结构或奇怪的逻辑。

于 2009-02-02T09:51:39.543 回答
0

Padre 有一些重构工具。现在(两年左右)重命名变量的效果很好。

http://padre.perlide.org/

免责声明:我是 Padre 的贡献者。

于 2012-06-11T13:23:23.397 回答