程序开发领域,代码中的任何可能导致深层次问题的症状都可以叫做代码异味(Code smell)。
通常,在对代码做简短的反馈迭代时,代码异味会暴露出一些深层次的问题,这里的反馈迭代,是指以一种小范围的、可控的方式重构代码。基于这些暴露的问题,人们会进一步的检查设计和代码中是否还存在别的代码异味,然后再做进一步的重构。从负责重构的开发者的角度来看,代码异味可以启发何时重构,如何重构。因此,可以说代码异味推动着重构的进行。
该术语似乎由肯特·贝克于90年代后期,在WardsWiki上首次使用。且自从在.被提到过,使用率就大大的提高。代码异味同时也是敏捷开发者常用的术语。
什么是,或者不是代码异味,是一个主观的判断,通常因语言、开发者、开发方法的不同而不同。对于Java开发语言,有些工具,比如Checkstyle、PMD和 FindBugs可以自动检测一些代码异味。