コードの臭い

コードの臭い（こーどのにおい、英: Code smell）とは、コンピュータプログラミングにおいてプログラムのソースコードに深刻な問題が存在することを示す何らかの兆候のことを言う。

コードの臭いが示す深刻な問題は、小さく管理された手順でリファクタリングする短いフィードバックサイクルを廻し、それ以上のリファクタリングが必要なことを示すコードの臭いがないかどうか、設計を検査しなければならない。

リファクタリングを実施するプログラマの視点からは、コードの臭いはいつリファクタリングするか、どのリファクタリング手法を用いるか、発見するための方法である。すなわち、リファクタリングを後押しするものである。

「コードの臭い(code smell)」という呼び方は、ケント・ベックがWardsWikiで初めて用いたようである。マーチン・ファウラーの著書 Refactoring. Improving the Design of Existing Code で
(邦訳)
採り入れられたあと、様々なところで用いられるようになった。

何がコードの臭いで、何がそうでないかは主観的な判断であり、プログラミング言語、開発者や開発手法などによって異なる。 Java向けにはCheckstyle、PMD、FindBugsなどのツールがあり、ある種のコードの臭いを自動的にチェックすることができる。

一般的なコードの臭い
重複したコード
同一あるいは同様のコードが複数箇所に存在。
長すぎるメソッド
メソッド、関数、手続きが長くなりすぎている。
巨大なクラス
大きくなりすぎたクラス。を参照。
機能の横恋慕
他クラスのメソッドを過度に用いるクラス。
不適切な関係
他のクラスの実装の詳細に依存しているクラス。
相続拒否
基底クラスの規約が尊重されない形でのメソッドオーバーライド。リスコフの置換原則参照。
怠け者クラス
行うことが少なすぎるクラス。
重複メソッド
同一あるいは同様のメソッドが複数箇所に存在。
不自然な複雑さ
簡潔な設計で十分なところに、過剰に複雑なデザインパターンの使用を強制する。

関連項目
 アンチパターン
 Don't repeat yourself

参考文献

外部リンク
CodeSmell at c2.com
Taxonomy of code smells

アンチパターン
プログラミング・フォークロア
ソフトウェア工学のフォークロア