JAVAソースコード内のコードのまとまりのあるブロックを識別できるツールがあるかどうか疑問に思っています。たとえば、別のメソッドを抽出したい長いメソッドがある場合、抽出する価値のあるコードの大きなチャンクを自動的に教えてくれるツールはありますか?
5 に答える
Google CodePro AnalyticsにはEclipseプラグインがあり、コード行や循環的複雑度など、メソッドをリファクタリングする必要があることを示す優れた指標となる一連の統計情報を提供できます。
コードの「まとまりのある」ブロックをメソッドに自動的にリファクタリングできるツールはないと思います。その中には主観が多すぎます。
別の質問で同様のツールを探しました: https://stackoverflow.com/questions/12016289/tool-for-visualizing-dependencies-inside-a-java-class少し高いレベル: 単一のクラス。
同じ答えが当てはまると思います。そのようなものはありません。ただし、探している情報を抽出できる情報を提供するツールがあります。
DependencyFinderを調べます。コードのすべての部分にアクセスできるため、共通の変数セットにアクセスするコード要素のクラスターを見つけることができます。残念ながら、API は少しわかりにくく、十分に文書化されていないことがわかりました。そのため、試行錯誤するか、作成者に連絡する必要があります。また、おそらく空白にアクセスできないと思います。しかし、とにかくこれは有効なアプローチだとは思いません。
検討したい別のツールはJaMoPP です。これには、空白に関する情報も含まれている必要があります。これは Java プラグインですが、Eclipse とは関係なく基礎となるライブラリを使用できます (私はそう思います)。
制御ブロック(つまり、条件とループ)は、制御ブロックの境界を越えるコードのブロックを簡単に抽出できないという点で「まとまりがあります」。元のメソッドを理解しやすくする、メソッド呼び出しで置き換えることができるブロックを見つけます。制御フローのネストが最も深い領域を抽出することで、複雑さに最も大きな影響を与えるため、ここから始めるのが適切です。ツール自体は必要ありません。コード自体に必要な情報が含まれています。
ソナーをチェックしてください。重複するコードブロックを見つけるための非常に優れたサポートがあります。
Sonar は PMD と FindBugs を基盤として使用します。また、クラスの複雑さ、大きすぎて分解の候補となるクラス/メソッドを指すメソッドの複雑さなどのカスタム メトリックも生成します。