http://www.martinfowler.com/bliki/CodeSmell.html

コードの臭いとは表層の兆候で、だいたいにおいてシステムの根深い問題に関係している。この単語はKent Beckが私のリファクタリング本を手伝っているときにはじめて考え出したものだ。

上記の簡単な定義では伝わりにくい点が2、3ある。第1に、臭いとは定義上、すぐに見つけられる——私の最近の表現だと’‘嗅ぎつけられる’‘——ものだ。長いメソッドはこれのいい例だ——十数行以上のJavaコードを見かけたら、コードを眺めただけで鼻がヒクヒクしてしまう。

第2に、臭いが常に問題の兆候というわけではない。長いメソッド方法でも問題ないものはある。そこに問題が隠れているのかを知るには、より深く眺めないといけない——臭い自体が根本的に悪いわけではない——それ自体が問題というよりは、問題の指標となっていることが多いということだ。

最良の臭いとは、簡単に見つかり、多くの場合は本当に面白い問題に出会うことができるものだ。データクラス(データだけでふるまいを持たないクラス)がいい例だ。これを眺めれば、このクラスがどんな振る舞いをもつべきかを自問する。そしてその振る舞いをクラス内に移動するためにリファクタリングし始める。単純な疑問と最初のリファクタリングこそが、貧血オブジェクトを本当にクラス化されたものに変えるための不可欠なステップになることが多い。

臭いに関するいいことの1つは、未熟な人でも見つけ出すのが簡単だということだ。もしも、実際に問題があるかを判断したり問題を修正したりできるほどの知識がなかったとしてもだ。私は、リード開発者たちが「今週のにおい」を選び、みんなに探してもらい、チームの上級メンバーたちと話し合うという事例を聞いたことがある。においにひとつずつ取り掛かるというのは、チームの人々をいいプログラマーに導いていくいい方法だ。

Gene Garciaが、私の本からにおいについて抜粋し、オンラインに置いている。