13

循環的複雑度は価値のある指標ですが、メンテナンスが難しいコードを特定するには不十分なツールであることがわかります。特に、特定のタイプのコード (パーサーなど) を強調するだけで、難しい再帰、スレッド化、結合の問題、および定義されている多くのアンチパターンを見落としていることがよくあります。

問題のある Java コードを特定するために利用できる他のツールは何ですか?

メソッド レベルの問題識別に優れていると思われる PMD と FindBugs を既に使用していることに注意してください。

4

6 に答える 6

12

私の経験では、コードの保守性を検討する際の最も重要な指標は次のとおりです。

  • 循環的複雑性。おそらく理解/変更が難しい大きなコードのチャンクを特定します。
  • 入れ子の深さ、同様のスポットを見つけるため (入れ子の深さが高いと自動的に CC が高くなりますが、必ずしもその逆であるとは限らないため、両方のスコアを確認することが重要です)。
  • ファンイン/ファンアウトして、メソッド/クラス間の関係と個々のメソッドの実際の重要性をよりよく把握します。

他の人が作成したコードを調べる場合、動的な手法を含めると役立つことがよくあります。プロファイラー/コード カバレッジ ツールを使用して一般的な使用シナリオを実行するだけで、次のことがわかります。

  • 実際に頻繁に実行されるコード (これにはプロファイラーが最適です。タイミング情報を無視して、代わりにヒット カウントを確認してください)。
  • コード カバレッジは、(ほとんど) デッド コードを見つけるのに最適です。とにかくめったに実行されないコードのリファクタリングに時間を費やすのを防ぐため。

プロファイラー、コード カバレッジ、メトリクス ツールなどの通常の容疑者は、通常、これらの評価を行うために必要なデータを取得するのに役立ちます。

于 2009-07-17T19:35:29.790 に答える
8

Google Testability Explorerは、たとえば、デザインの悪臭であるシングルトンやその他の静的なものをチェックします。Metricsは、人類に知られているほぼすべてのコードメトリックを測定するEclipseプラグインです。私は両方を使用し、簡単に推奨できます。

于 2009-07-17T14:11:04.873 に答える
5

Sonarは、さまざまなオープンソースツール(PMDやFindbugsを含む)の結果を組み合わせて、複雑さと保守性の「ホットスポット」を特定しようとします。MavenおよびCIサーバー(特にHudson)とうまく統合されます。

エクストラネオンによる編集

多くのオープンソースプロジェクトが分析されているSonarサイトが利用可能です。これは、適用されるルールの量と、ドリルダウンがどこまで進んでいるかを示していると思います。もちろん、面白くないルールを無効にすることもできます。

メトリックの説明は次のとおりです

于 2009-07-17T19:21:25.483 に答える
1

私はそれを使用したことはありませんが、これはかなり興味深く有望であることがわかりました。

http://erik.doernenburg.com/2008/11/how-toxic-is-your-code/

そして、私はこれを使用しましたが、依存関係の素晴らしい視覚化のため、非常に役立つことがわかりました

http://www.headwaysoftware.com/products/structure101/index.php

于 2009-07-17T15:28:06.980 に答える
0

すでに使用している静的分析ツールはかなり標準的です。Eclipse を使用している場合は、ここで他のコード分析ツールを探してみてください。

Emmaはコード カバレッジの分析を提供しますが、これは実際にはテスト用です。

于 2009-07-17T12:59:36.580 に答える
0

ツールNDepend for .NET コードを使用すると、循環的複雑性、ネストの深さ、メソッドの結合の欠如、テストによるカバレッジなどのコード メトリックを含む、コードの複雑さの多くの側面を分析できます。

...依存関係の分析を含め、LINQ クエリ (CQLinq) を介したコード ルールを含め、質問、コードの複雑さ、およびルールの記述に特化しています。約200 のデフォルト Code Rulesが用意されています。それらは、 Singletonのようなアンチパターン、スレッド化の問題の検出、 UI レイヤーが直接 DB タイプを使用してはならないなどのカップリングの問題の検出に関係しています...

しばらく前に、コードの複雑さのいくつかの側面をまとめた記事を書きました。

于 2010-08-28T08:37:28.273 に答える