Code Smells
Bloaters 長い関数(Long Method) オブジェクトそのものの受け渡し、関数の抽出、コマンドによる関数の置き換え、問い合わせによる一時変数の置き換え、条件記述の分解、パラメータオブジェクトの導入、ポリモーフィズムによる条件記述の置き換え、ループの分離 巨大なクラス(Large Class) クラスの抽出、サブクスによるタイプコードの置き換え、スーパークラスの抽出 データの群れ(Data Clumps) オブジェクトそのものの受け渡し、クラスの抽出、パラメータオブジェクトの導入 長いパラメータリスト(Long Parameter List) オブジェクトそのものの受け渡し、関数群のクラスへの集約、問い合わせによるパラメータの置き換え、パラメータオブジェクトの導入、フラグパラメータの削除 基本データ型への執着(Primitive Obsession) オブジェクトによるプリミティブの置き換え、クラスの抽出、サブクラスによるタイプコードの置き換え、パラメータオブジェクトの導入、ポリモーフィズムによる条件記述の置き換え Tool Abusers Switch Statements 相続拒否(Refused Bequest) 委譲によるサブクラスの置き換え、委譲によるスーパークラスの置き換え、フィールドの押し下げ、メソッドの押し下げ クラスのインターフェース不一致(Alternative Classes w/ Different Interfaces) 関数宣言の変更、関数の移動、スーパークラスの抽出 一時的属性(Temporary Field) 関数の移動、クラスの抽出、特殊ケースの導入 Change Preventers Divergent Change 変更の分散(Shotgun Surgery) 関数群のクラスへの集約、関数群の変換への集約、関数の移動、関数のインライン化、クラスのインライン化、フィールドの移動、フェーズの分離 Parallel Inheritance Hierarchies Dispensables Lazy Class 疑わしき一般化(Speculative Generality) 関数宣言の変更、関数のインライン化、クラス階層の平坦化、クラスのインライン化、デッドコードの削除 データクラス(Data Class) 重複したコード(Duplicated Code) 関数の抽出、ステートメントのスライド、メソッドの引き上げ Couplers 特性の横恋慕(Feature Envy) 関数の移動、関数の抽出 Inappropriate Intimacy メッセージの連鎖(Message Chains)...