コードの臭い - リファクタリングの必要性を示す兆候

重複したコード (Duplicate Code)

同じようなコードの並びが、複数の場所で見られる。

長すぎるメソッド (Long Method)

メソッドが長くて理解しづらい。

巨大なクラス (Large Class)

インスタンス変数を持ちすぎている。コード量が多すぎる。

多すぎる引数 (Long Parameter List)

引数が多くて、それらの意味がわかりにくくなっている。

変更の発散 (Divergent Change)

1つのクラスがさまざまな変更要求の影響を被る。

変更の分散 (Shotgun Surgery)

1つの変更がさまざまなクラスの変更を引き起こす。

属性・操作の横恋慕 (Feature Envy)

他のクラスの属性やメソッドを使いすぎる。

(これは他のクラスに強く関連していることを意味します)

データの群れ (Data Clumps)

いつも一緒に使われるデータ群がある。

基本データ型への執着

基本データ型ばかりを使っている。

switch文

switch文が多い。

(これは重複したコードの原因になります)

パラレル継承 (Parallel Inheritance Hierarchies)

サブクラスを定義するたびに、他のクラスでもサブクラス化しなければならない。

怠け者クラス (Lazy Class)

すでに不要になったクラスが残っている。役に立たないクラスがある。

疑わしき一般化

将来に備えるためだけの無意味なクラスがある。

一時的属性

一時的属性を使っている。

(これは変数の意味を不明にします)

メッセージの連鎖 (Message Chains)

メッセージが過剰に連鎖する。

仲介人 (Middle Man)

メッセージを右から左に受け流すだけのオブジェクトがある。

不適切な関係 (Inappropriate Intimacy)

クラス間の結合度が高く、privateがなくなる。

クラスのインターフェイス不一致

処理は同じなのにシグニチャ (メソッド名、引数の数、引数の型) が異なるメソッドがある。

未熟なクラスライブラリ

クラスライブラリの修正が系統立って行われていない。

データクラス (Data Class)

属性とgetおよびsetメソッド (プロパティ) 以外には、何も持たないクラスがある。

接続拒否 (Refused Bequest)

継承しても、スーパークラスの特性をあまり使っていない。

コメント (Comments)

コメントは多いが、よい説明になっていない。

参考

複数の技術系サイトから、まとめて検索