14

私は現在、perl WebアプリのLAMPスタイルに取り組んでおり、最近、以前の開発者が残したこの死の迷路のコードに出くわしました。彼は非常に多くのマジックナンバーと奇妙な論理を残したので、私がそれを経験しなければならないたびにそれは私に頭痛を与えます。

私は今ユニットテストを学んでいるので、コードをリファクタリングし、途中でユニットテストを記述して、誤って何かを壊さないようにするための便利なツールを見つけたいと思います。

LAMP perl用の優れたリファクタリングツールに関する推奨事項はありますか?できれば無料:)

ありがとう。

4

8 に答える 8

13

Eclipse / EPICには「いくつかの」Perl リファクタリング ツールがあると思いますが、それについては引用しないでください ;-)

Komodoもチェックする価値があるかもしれません。ただし、フルバージョンは Eclipse / EPIC のように無料ではありません。オープンソース バージョンのKomodo Editを試すこともできますが、すべての機能を備えているわけではありませんか?

上記のリファクタリング ツールも他のリファクタリング ツールも使用していません。

単体テストを作成することは良い出発点です。perltidy / Perl::Tidy & Perl::Criticも見てください。これは、混乱を突き抜けて、「コードのにおい」のいくつかを見つけるのに役立つ場合があります。

于 2009-02-02T11:29:40.860 に答える
7

おそらく、Refactor:my=>'code'のボランティアがあなたを助けることができます。とにかく、それは尋ねるのは自由です:)

于 2009-02-02T09:23:34.357 に答える
6

Perl の動的な性質は、Perl 用のリファクタリング ツールを作成するのが非常に難しいことを意味します。

ただし、テストに関しては、途中で役立ついくつかの回帰テストをまとめることができるはずです。これは、現在のコードから開始し、現在の出力をキャプチャすることで機能します。これは、コマンドラインから CGI スクリプトを実行し、結果の HTML をファイルに保存している可能性があります。

これをキャプチャしたら、コードを変更して、HTML が変更されていないことを確認します。これは、コードが壊れていないことを意味します。変更が発生した場合は、バグを見つけるか、テストを変更して新しい HTML を正しいものとして受け入れることができます。

これを設定するのは少し面倒かもしれませんが、長い目で見れば生活が楽になります。これらのテストを自動化して、簡単に実行できるようにする必要があります。Test::WWW::Mechanize と Test::LongString およびその他すべてをチェックアウトします。

于 2009-02-02T14:40:42.020 に答える
5

それほど深いリファクタリングではありませんが、このPerlMonks ノードでは、 B::Deparseを使用して perl コードの難読化を解除するための Vim マッピングについて説明しています。

彼らの例:

_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

Perl コードのリファクタリングについては、Devel::Refactor - Perl 拡張機能を参照してください。 https://metacpan.org/pod/Devel::リファクタリング

于 2009-05-14T21:42:59.157 に答える
1

EPIC プラグインを使用する Eclipse には、いくつかのリファクタリング サポートがあります。IntelliJ の Java ツールのリファクタリングほど洗練されていません。ただし、それがあなたの問題に役立つかどうかは100%確信が持てません。私が使用した方法は、コードのブロックを強調表示し、それらを関数/メソッドに移動することです。あなたの場合、おそらくそれらのマジックナンバーで多くの検索/置換を行いたいと思うでしょう...

Test::More を使用して単体テストを作成するとします。他の EPIC ツールのいくつかはそれを助けることができます (例: "todo" タグ)。

Test::WWW::Mechanize と Test::WWW::Selenium を使用することもできます。エンドユーザーの機能を壊さないようにセレンテストを定義すると便利です。EPIC には特にそれを支援するものはありませんが、デバッグ時にコードをステップスルーするために使用できるはずです。

幸運を。:-)

于 2009-02-03T02:48:04.857 に答える
0

vim! (またはその他のテキスト エディター)

コードを屈折させるための魔法のツールは実際にはありません。(たとえば) 変数/関数の名前を変更するためのツールはありますが、恐ろしいコード構造や奇妙なロジックを魔法のように修正する方法はありません。

于 2009-02-02T09:51:39.543 に答える
0

パドレにはいくつかのリファクタリング ツールがあります。変数の名前変更は、しばらくの間 (2 年ほど) うまく機能します。

http://padre.perlide.org/

免責事項: 私はパドレの寄稿者です。

于 2012-06-11T13:23:23.397 に答える