[アップデート]CodeGuru Reviewerにコードの保守性を高めるCodeQuality Detector機能が追加されました!

CodeGuru ReviewerにCodeQuality Detector機能が追加されました! コードの保守性を低くする技術的負債になりそうなコードを早期に発見し、CodeGuru Reviewerで指摘してくれます。
2020.11.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

CodeGuru ReviewerにCodeQuality Detector機能が追加されました!

コードの保守性を低くする技術的負債になりそうなコードを早期に発見し、CodeGuru Reviewerで指摘してくれます。

CodeQuality Detectorは次の5種類のメトリクスに基づいてレコメンデーションを生成します。

  1. メソッドのソースコード行数が多すぎないか
  2. Cyclomatic Complexity(循環的複雑度)
  3. メソッドFan out(1つのメソッドが呼び出すメソッドが多すぎていないか)
  4. クラスFan out(1つのクラスが使用している他のクラス数が多すぎていないか)
  5. Class cohesion(クラス凝集度:クラスが単一の目的で設計されているか測定)

やってみた

CodeGuru Reviewerの使い方自体は、弊社ブログをご参照ください。

今回は、CodeGuru Reviewerでレビューをしてもらい、CodeQuality Detector機能がどんなレビュー結果を出しているのか見てみます。

たとえば、次のレビューは 3. メソッドFan out 観点での指摘だと思われます。

This method calls 51 other methods. By comparison, 99% of the methods in the CodeGuru reference dataset use fewer. This indicates the method is highly coupled with other methods. A method that is highly coupled with other methods is difficult to understand and its behavior might change unexpectedly when one of its referenced methods is updated. High coupling could also increase the integration test complexity, maintenance cost and technical debt. We recommend that you simplify this method or break it into multiple methods.

このメソッドは、51個の他のメソッドを呼び出します。比較すると、CodeGuruのリファレンス・データセットの99%のメソッドは、より少ない数のメソッドを使用しています。これは、そのメソッドが他のメソッドと高度に結合していることを示しています。他のメソッドと高度に結合しているメソッドは理解が難しく、参照されているメソッドの1つが更新されたときに、その動作が予期せず変化する可能性があります。また、結合が高いと、統合テストの複雑さ、保守コスト、技術的負債が増加する可能性があります。このメソッドを単純化するか、複数のメソッドに分割することをお勧めします。

次のレビューは 4. クラスFan out 観点での指摘だと思われます。

This class references 91 other classes. By comparison, 99% of the classes in the CodeGuru reference dataset reference fewer. This indicates that this class is highly coupled with other classes. A class that is highly coupled with other classes is difficult to understand and its behavior might change unexpectedly when one of its referenced classes is updated. High coupling could also increase the integration test complexity, maintenance cost and technical debt. We recommend that you simplify this class or break it into multiple classes.

このクラスは91の他のクラスを参照しています。比較すると、CodeGuruのリファレンス・データセットの99%のクラスは、より少ない数のクラスを参照しています。これは、このクラスが他のクラスと高度に結合していることを示しています。他のクラスと高度に結合しているクラスは理解が難しく、参照しているクラスの1つが更新されたときに、その動作が予期せず変化する可能性があります。また、高度な結合は、統合テストの複雑さ、保守コスト、技術的負債を増加させる可能性があります。このクラスを単純化するか、複数のクラスに分割することをお勧めします。

こんな感じに、コードが複雑になりすぎていないか?をコードレビューして指摘してくれます。

終わりに

CodeGuru ReviewerにいきなりCodeQuality Detector機能が追加されて、 従来のCodeGuru Reviewerとはまた別観点での指摘を新しくしてくれるようになりました。

今後もまた別の観点でのレビューをしてくれるような機能追加することが期待できそうです。

現在はJavaのプログラムでのみ利用できるので、Javaプログラムでの開発をしている方はぜひご活用ください。