Skip to content

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

Notifications You must be signed in to change notification settings

masuda220/code-inspection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 

Repository files navigation

code-inspection

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

概要

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

使用ツール:IntelliJ IDEA の Code Inspection

メソッド

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

引数の数

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

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

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

クラス

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

フィールドの数

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

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

パッケージ

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

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published