Skip to content

Latest commit

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

code-inspection

設計の改善課題を、コードのメトリクスから発見する

概要

Javaの設計(クラス、メソッド、パッケージ)の改善課題を発見するための、測定指標のガイドライン。

使用ツール:IntelliJ IDEA の Code Inspection

メソッド

指標英語名ガイドライン
(デフォルト値)
説明
複雑度overly complex method2 (10)分岐の複雑さ。if文、for文、そのネストが多いほど複雑になる。
リファクタリングの候補。
結合度overly coupled method2 (10)メソッド内で使う他のクラスの数。
他のクラスへの依存が多いほど密結合になる。
長さoverly long method5 (30)長いメソッドほど異なる関心事が混在している。
メソッド抽出の候補。
ネストの深さoverly nested method1 (5)ネストの深さは、異なるレベルの関心事が混在。
メソッド抽出の候補。
多重ループmethod with multiple loop多重ループは、異なるレベルの関心事が混在している。
メソッド抽出の候補。
メソッドの引数method with too many parameters2 (5)パラメータが多いほど、コードが複雑になる。
パラメータクラスの抽出の候補。
コンストラクタの引数constructor with too many parameters3 (5)複雑なコンストラクタは、意図が不明確で使う側の負担になる。
クラスの分割の候補。

引数の数

メソッドが使う第一のデータは、インスタンス変数になる。
オブジェクト指向のメソッドに渡す引数は、手続き型のサーブルーチンに渡す引数よりも少なくなる。

インスタンス変数だけで、判断/加工/計算ができるロジックを記述したメソッドであれば、引数はゼロ。
インスタンス変数に他のデータを組合せて判断/加工/計算する場合、原則として一つだけのデータを対象にする。
引数の用途がオプション(振る舞いの条件分岐)の場合は、目的別にメソッドを分けるか多態を検討する。

コンストラクタに多くの引数を渡すのは、インスタンス変数が多い。
インスタンス変数が多いクラスは、異なる関心事が混在している可能性が高い。 クラスの分割を検討する。

クラス

指標英語名ガイドライン
(デフォルト値)
説明
複雑度overly complex class20 (80)メソッドの複雑度の合計。
結合度overly coupled class5 (15)他のクラスに依存する度合い。
フィールドの数too many fields3 (10)フィールド(インスタンス変数)の数。
関心の分離の改善の候補。
メソッドの数too many methods7 (20)人間が一度が理解できる個数は7個が限度。
コンストラクタの数too many constructors2 (5)コンストラクタの多重定義は、わかりにくい。
完全コンストラクタ+デフォルトの2つがガイドライン。

フィールドの数

クラスは、判断/加工/計算のロジックの置き場所。
フィールド(インスタンス変数)は、その計算の対象となるデータ。
フィールドの数が多い場合は、異なる関心事が混在している可能性が高い。 クラスの分割の候補。

なお、ロジックをほとんど持たないデータの入れ物クラスは、このガイドラインの対象外。 このガイドラインは「ロジックの整理の手段」としてのクラス設計の改善のガイドライン。

パッケージ

指標英語名ガイドライン
(デフォルト値)
説明
少ないクラスpacakge with too few classes3 (3)クラス数が少なすぎる。
他のパッケージとの統合の候補。
多すぎるクラスpackage with too many classes10 (10)クラス数が多すぎる。
パッケージ分割の候補。
孤立したクラスclass indepedent of its packageパッケージ内から使われない、かつ、パッケージの他のクラスを使わない。
このパッケージに存在することが疑わしい。
特定のパッケージだけから使うclass only used from one other package特定のパッケージだけから使う。
そのパッケージへの移動の候補。

About

設計の改善課題を、コードのメトリクスから発見する

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors