web-dev-qa-db-ja.com

PHP)でのデッドコードの検出

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

しばらく前はユニットテストによるコードカバレッジはゼロでしたが、現在はすべての新しいコードをT.D.Dで記述しようとしています。ユニットテスト(テストラストテクニック)でも「古い」コードをカバーすることにより、マナーと技術的負債を削減します。

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

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

34

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.
?>  
14
Ben James

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

13
El Yobo

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

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

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

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

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

3
CaseySoftware

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

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

2
Ira Baxter

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

2
ivanjovanovic

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

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

2
Shane

誰かがxdebugデータを使用する Structure101g のフレーバーを実装したと思います-s101は、未使用のクラスター、つまり相互に使用しているがメインコードベースから切断されているファイルを検出します。