5

ソース コードから使用されていないコードを削除するために、少なくともある程度の努力をしなければならない状況にいます。一般的には、静的コード分析ツールを使用することをお勧めします。他のプロジェクトではこれでうまくいきましたが、私が聞いているのはほとんどがデバイス レベルのコードに取り組んでいる C/C++ 開発者です。

私はJava EEシステムに取り組んでいる Web 開発者です。分析に好まれるツールはCoverity Preventですが、私たちが開発しているテクノロジーにより適切であるという強い主張をすることができれば、おそらく他の何かを支持することができます.

多くの抽象化を備えたシステムに対して実行している場合、デッドコードの静的コード分析の有効性はどうでしょうか? たとえば、Springの依存性注入とJSFを使用します。どちらの場合も、関数呼び出しをフロントエンドからバックエンドまで追跡し、何が呼び出され、何が呼び出されないかを完全に把握する簡単な方法はありません。

デッド コード チェックでの誤検出が、そもそもツールを実行する価値を上回るのではないかと非常に懸念しています。

このシナリオでの経験は何ですか? アーキテクチャが多くの抽象化を使用しているときに、静的コード分析ツールから価値を得ることができましたか? 誤検知を最小限に抑えて機能させるために何かしなければならなかったことはありますか?

4

4 に答える 4

4

私は以前、Coverity で Java 静的解析製品の仕事をしていました。

デッド コードを検出するというこの特定のタスクは、静的アナライザーにとってヒットまたはミスになる可能性があります。特にデッド メソッド、つまり実行時に呼び出すことができないメソッドの場合、すべての動的エントリ ポイントについて静的アナライザーに通知するために多くの調整を行わないと、誤検知率が非常に高くなります。

メソッド内のデッドコードの場合、アナライザーにその機能がある場合、分析では入力データに関する仮定が行われないため、結果はかなり良好になるはずです。すべての可能な入力を想定したとしても、関連するロジックによって特定の分岐が行われないデッド コードを見つけることができます。

于 2009-11-05T13:20:38.797 に答える
2

テスト カバレッジ ツール (動的分析) を使用して、システムのどのコード使用されているかを判断できます。補数は、死んでいる可能性があり (実行されていない!)、検査が必要なコードです (たとえば、いくつかの誤検知がある可能性があります)。システムに与える運動量が多いほど、偽陽性率が低くなります。

このデータを収集できる Java テスト カバレッジ ツールは、ここにあります。

誤検知を最小限に抑えたい場合は、静的分析ツールを実行してカバレッジをテストし、交差を取ることを検討してください。

一般に、デッド コード X を検出するには、X が呼び出される条件がないことを証明する必要があります。チューリング マシンと次の形式の IF ステートメントに直面すると、それは困難です (理論的には不可能です)。

 if (Turing(..)) then call X();

これが、静的分析ツールの誤検知率が高い理由です。

ただし、多くの場合、「デッド コード」は実際には、それを呼び出す方法がない単なるコードです (FAA 用語では「非アクティブ コード」)。つまり、X が定義されている間は、直接的または間接的に、システム内のどこにも X の呼び出し (または X がデータ項目の場合はアクセス) はありません。これらは、動的クラスのロードとリフレクションという Java の厄介な複雑さにより、静的分析ツールが検出しやすくなります (これにより、未知であるがロード可能なクラスに直面して、非アクティブなコード分析の問題が不可能になります)。

これらの複雑さを無視して、大規模な Java システムで無効なコードを検出して報告する静的分析ツールを見つけることができます。このようなツールは、Java システム全体を一度に処理する必要があります。そうしないと、分析に含まれない 1 つのモジュールに参照が存在する可能性があるためです。「非アクティブ」コード検出機能を構築しました。リムーバーは、すべての非アクティブ コードが自動的に削除されたソース コードを提供し、参照されていないものについてレポートすることもできます。レポートを調べて、クリーンアップされたコードを使用するか、明らかに使用されていないエンティティへのアクセスを追加するかを決定します。

于 2009-11-08T10:39:53.067 に答える
1

静的分析に取り組んでいますが、実際に抽象化で機能する静的分析ツールを知りません。ほとんどの場合、抽象化の使用方法に関するプロセスと理由を分析するモジュールを作成する必要があります。

そして、デッドコードの存在がこれ以上のコストをもたらすとは思えません。

于 2009-11-08T10:53:09.780 に答える
0

どのような場合でも、静的コード分析は、分析プロセスとコードを完全に理解している場合にのみ行う必要があります。問題は単に、それが大ざっぱであり、仮定を提供しているだけだということです。解決策でも、脆弱性の完全に正確なチェックでもありません。他のテスト方法で偽陽性を判断できる必要があります。

静的コード アナライザーの価値は、コード レビューではありません。デッド コードを排除するには、コード カバレッジを使用してそのプロファイルを作成します。-あなたの場合、多くの抽象化について言及しました...静的コード分析では十分ではないと思います。

于 2009-11-05T13:27:35.970 に答える