35

私は非常に厄介なコードを含むプロジェクトを持っています-あちこちにたくさんの重複とデッドコードがあります。

以前は単体テストによるコードカバレッジはゼロでしたが、現在はすべての新しいコードをTDD方式で記述し、「古い」コードも単体テストでカバーすることで技術的負債を削減しようとしています(テストラスト手法)。

ビジネスロジックの複雑さは非常に高く、一部の方法が使用されているかどうかにかかわらず、だれも答えられない場合があります。

このデッドコードメソッドはどのようにして見つけることができますか?広範なロギング?テストカバレッジが高いですか?(顧客は新機能のリリースを望んでいるため、簡単ではありません)

4

7 に答える 7

14

xdebugのコードカバレッジツールを使用すると、すべての関数/メソッドにトレースステートメントを配置しなくても、実際に実行されているコード行をテストできます。

例:

<?php
    xdebug_start_code_coverage();

    function a($a) {
        echo $a * 2.5;
    }

    function b($count) {
        for ($i = 0; $i < $count; $i++) {
            a($i + 0.17);
        }
    }

    b(6);
    b(10);

    var_dump(xdebug_get_code_coverage());  // array '/path/file.php' => array line_number => int 1 or 0.
?>  
于 2009-11-22T13:30:39.560 に答える
13

今は少し遅れていますが、PHPDCDはこれを静的に行うと主張しています。これにより、xprof/xdebugを使用して実際のコード実行をプロファイリングするよりもはるかに有益な結果が得られるはずです。

于 2010-08-19T00:48:58.443 に答える
3

完全に使用されていないコードを検出する方法がわかりません。これは、そこにあるすべてのツールの能力を超えている可能性があります。しかし、そこにあるツールに関しては、https: //phpqa.io/にアクセスして、ツールの概要を確認してください。

  • これまでのところ、オブジェクト指向の観点からコードを分解し、クラス数、関数数、テスト数、関数あたりの平均loc、循環的複雑度の詳細を示すphplocでの私のお気に入りの1つです。

  • 私の次のお気に入りは、「PHPコピーペースト検出器」であるphpcpdです。コードベース全体をトークン化し、一般的な署名を探し、行番号付きのファイルのリストを提供します。

  • そのページには他にもたくさんのツールがあります。あなたに役立つツールを選択してください。

私たちはweb2projectでこれらのツールを積極的に使用しており、dotProjectからフォークしてから2年間で、コードベースの約35%をリファクタリングから除外し、重複を排除し(当初は12%、現在は約2.5%)、一般的に物事を構造化していますより良い。そして、それは私たちの15k以上のユニットテストの行を数えています。:)

于 2009-11-22T14:05:07.623 に答える
2

プロファイリングツールに関しては、その方法を選択する場合は、xhprof http://developers.facebook.com/xhprof/
を参照し てください。出力ファイルのサイズが小さく、継続的な追跡のためにアプリに埋め込むことができるWebインターフェイスがあります。 。コールツリーの視覚的表現を生成することができます。xdebug私はその目的のためにそれをお勧めします。

于 2009-11-22T18:22:03.417 に答える
2

SDPHPテストカバレッジツールを参照してください。テストスイートを好きなように実行する(または実行しない)など、好きな方法でコードを実行します。実行の最後に、実行されたコードの表示を確認できます(Webサイトにスクリーンショットがあります)。実行されないコードは死んでいる可能性があり、ユーザー側でさらに分析が必要ですが、システムをうまく実行すると、実行されていないコードはエラーハンドラーまたは本当に死んだものになります。PHPテストカバレッジツールでは、PHPサーバーを変更する必要はありません。

SD CloneDRツールは、非常に大きなソースコードベースで重複するコードを検出します。言語に依存するため(C、C ++、Java、C#、Ada、Fortran、PHP4、PHP5をカバー)、フォーマットの変更、空白、コメントの有無に惑わされることはありません。正確なコピークローンとニアミスクローンを検出します。このWebサイトには、いくつかの言語のクローンレポートの例が示されています。

于 2009-11-25T06:52:31.843 に答える
2

xdebugプロファイラー(http://xdebug.org/docs/profiler)を使用してシステムを実行することをお勧めします。

システムを実行してhttp://code.google.com/p/webgrind/でログを表示し、何が呼び出されているかを物理的に確認します。

于 2009-11-22T14:07:37.260 に答える