4

職場では、いくつかのツールを使用して、いくつかのメトリック(主に循環的複雑度とLCOM)をキャプチャしています。これらを使用して、警告フラグを取得し、先制的なリファクタリングの取り組みをガイドします。これは、コードの品質を向上させる上で非常に有益です。

ただし、プロセスはビルドプロセスに関連付けられていません。別途実施します。さらに、(外部プロセスを実行するのではなく)ソースコードに固有のものを作成できるものを探しています。

コンパイラから実行できる注釈のグループと構成可能な注釈プロセッサを知っている人はいますか?コードが循環的/ LCOMのしきい値メトリックに準拠していない場合、ビルドが失敗しますか?

maven / antからckjm、checkstyle、pmdを実行できると思いますが、ソースコードで動作するものもあれば、バイトコードで動作するものもあります。コンパイルが始まる前にソースコードで動作する1つの統合ツールがあると便利です。

もう1つは、これを促進する可能性のある注釈のセットがあると便利です(コーナーケースで必然的に必要になるカスタマイズを可能にするため)。

@LCOM3(Threshold=1.5)
public class SomeDumbPojo {... buch of gets/sets...}

// by default would be measured against a strict LCOM3
public class ActualBizClass
{
   @CYCLOMATIC_COMPLEXITY(Threshold=15)
   public void someFatIrreducibleMethod(){...}
}

次に、ツールを実行すると、デフォルトで厳密な(および構成可能な)メトリックしきい値が適用されます。ただし、(文書化され、正当な)より緩和されたしきい値で注釈が付けられたアーティファクトは除きます。減らすことができない/減らすべきではないいくつかの方法では、緩和された循環的複雑度が理にかなっています。動作のないプレーンPOJOの場合、LCOMをリラックスさせる必要があります...などなど。

見たりグーグルしたりしても、何も見つかりませんでした(できればオープンソース)。しかし、誰かがその種の何かを知っている場合に備えて、私はここで尋ねたほうがよいでしょう。

ありがとう。

4

2 に答える 2

6

コンパイルを開始する前に、ソース コードで機能する統合ツールが 1 つあると便利です。

静的解析を機能させるには、コードを何かにコンパイルする必要があるため、これが何を意味するのかよくわかりません。これらのツールはすべて、コードをバイトコードまたはある種の構文ツリーにコンパイルできる必要があります。

単純にすることをお勧めします。循環的複雑度またはその他のメトリックの警告が特定のしきい値を超えた場合にビルドが失敗するように PMD を構成します。許容可能な複雑さでメソッドに注釈を付ける代わりに (どのように受け入れられた値を導出しますか? 誰かが誤って複雑さを 12 から 15 に増やして注釈を増やしてしまうのを防ぐにはどうすればよいでしょうか)、注釈を付けて警告を完全に抑制します。

@SuppressWarnings("PMD.CyclomaticComplexity")
public void someFatIrreducibleMethod() { ... }

そして定期的にコードベースを検索して、警告が抑制されているメソッドを削除してリファクタリングすることができます。

あるいは、PMD は、ある種のトレーサビリティを提供したい場合に、誰がいつ警告を監査したかをマークするために、特定の構文でコードにコメントを残すことをサポートしています。

于 2010-05-27T19:52:00.953 に答える
2

SD Java Metricsツールは、最も基本的なメトリック (LCOM ではなく、確かに循環的複雑度) を計算し、コマンド ラインから実行します。

メソッドに関する詳細なメトリックと、その上の階層 (クラス、パッケージ、サブシステム) のロールアップ サマリーを含む XML 出力ファイルを生成します。XLST (または awk、perl、または...) を使用すると、完全な要約または個々のメソッドに必要なメトリックを抽出し、しきい値と照合するのは非常に簡単です。

于 2010-06-04T12:59:53.667 に答える