程序开发领域,代码中的任何可能导致深层次问题的症状都可以叫做代码异味。通常,在对代码做简短的反馈迭代时,代码异味会暴露出一些深层次的问题,这里的反馈迭代,是指以一种小范围的、可控的方式重构代码。基于这些暴露的问题,人们会进一步的检查设计和代码中是否还存在别的代码异味,然后再做进一步的重构。从负责重构的开发者的角度来看,代码异味可以启发何时重构,如何重构。因此,可以说代码异味推动着重构的进行。
该术语似乎由Kent Beck于90年代后期,在WardsWiki上首次使用。且自从在Refactoring. Improving the Design of Existing Code.被提到过,使用率就大大的提高。代码异味同时也是敏捷开发者常用的术语。
什么是,或者不是代码异味,是一个主观的判断,通常因语言、开发者、开发方法的不同而不同。对于Java开发语言,有些工具,比如
Checkstyle、PMD和
FindBugs可以自动检测一些代码异味。
查看气味的一种方法是关于原则和质量:“气味是代码中的某些结构,表明违反基本设计原则并对设计质量产生负面影响”。代码味道通常不是错误;它们在技术上不正确,并且不会阻止程序运行。相反,它们表明设计中的弱点可能会减缓开发速度或增加未来的漏洞或故障风险。不良代码气味可能是导致技术债务的因素的指标。罗伯特·C·马丁(Robert C. Martin)称一系列代码闻起来是软件工艺的“价值体系”。
当代码经历一个短的反馈循环时,通常可以发现代码气味所暗示的更深层次的问题,在那里以小的,受控的步骤进行重构,并检查所得到的设计以查看是否还有任何代码味道反过来表明需要更多的重构。从负责执行重构的程序员的角度来看,代码气味是指示何时重构的
启发式方法,以及使用什么特定的重构技术。因此,代码气味是重构的驱动因素。