修改代码是每一位软件开发人员的日常工作。开发人员常常面对的现实是,即便是最训练有素的开发团队也会写出混乱的代码,而且系统的腐化程度也会日积月累。本书是一部里程碑式的著作,针对大型的、无测试的遗留代码基,提供了从头到尾的方案,让你能够更有效地应付它们,将你的遗留代码基改善得具有更高性能、更多功能、更好的可靠性和可控性。本书还包括了一组共24项解依赖技术,它们能帮助你单独对付代码中的问题片段,并实现更安全的修改。\r\n 本书适合各层次软件开发人员、管理人员和测试人员阅读。
第一部分 修改机理\r\n 第1章 修改软件\r\n 第2章 带着反馈工作\r\n 第3章 感知和分离\r\n 第4章 接缝模型\r\n 第5章 工具\r\n第二部分 修改代码的技术\r\n 第6章 时间紧迫、但必须修改\r\n 第7章 漫长的修改\r\n 第8章 添加特性\r\n 第9章 无法将类放入测试用具中\r\n 第10章 无法在测试用具中运行方法\r\n 第11章 修改时应当测试哪些方法 \r\n 第12章 在同一地进行多处测试、是否应该将相关的所有类都解依赖\r\n 第13章 修改时应该怎样写测试 \r\n 第14章 棘手的库依赖问题\r\n 第15章 到处都是API调用 \r\n 第16章 对代码的理解不足\r\n 第17章 应用毫无结构可言\r\n 第18章 测试代码碍手碍脚 \r\n 第19章 对非面向对象的项目、如何安全地对它进行修改\r\n 第20章 处理大类\r\n 第21章 需要修改大量相同的代码 \r\n 第22章 要修改一个巨型方法,却没法为它编写测试 \r\n 第23章 降低修改的风险\r\n 第24章 当你感到绝望明\r\n第三部分 解依赖技术\r\n 第24章 解依赖技术\r\n附录 重构\r\n术语表\r\n索引
Michael Feathers世界级面向对象技术专家,以丰富的软件项目开发经验著称。目前在世界顶尖的软件咨询公司Object Mentor从事敏捷方法,极限编程、测试驱动开发、重构、面向对象设计、Java、c#和c++等方面的培训和项目指导。他是著名测试框架CppUnit和FitCpp的开发者,已经主持了三次面向对象界盛会OOPSLA上的CodeFest比赛。
“……所有的一切就从那一刻开始……”
Michael Feathers在对本书的介绍中用这句话来描述他当初是怎样迷上软件开发的。
“……所有的一切就从那一刻开始……”
你能够体会那种感觉吗?你是否能够回忆起你生命中的某个时刻,说“……所有的一切就从那一刻开始……”?有没有某一刻某件事改变了你生命的进程,最终,使你拿起了这本书读到了这篇序言?
对我来说,所有的一切是从六年级的时候开始的。当时我对科学、太空以及一切与技术相关的东西都感兴趣。母亲在店里发现了一台塑料电脑玩具并买下来送给了我,我还记得它的名字叫“Digi-Comp I”。40年过去了,那台小小的塑料电脑玩具在我的书架上仍光荣地占有一席之地。它点燃并催化了我对软件开发的持续热情,它让我第一次隐约感受到了编写程序来解决人们的问题是多么有意思的一件事情。那只不过是一台由3个塑料的S-R触发器和6个与门组成的简单机器,但这已经足够了。于是……对我来说……一切就从那一刻开始……
后来我的热情逐渐冷却下来,因为我发现现实中的软件系统几乎总是会慢慢变为一个烂摊子。程序员脑子里原先那些漂亮的设计随着时间的推移会慢慢“发出腐化的臭味”。我们往往会发现,去年才构建的漂亮小巧的系统,到了今年却变成了由一堆纠缠不清的函数和变量搅和在一起的“代码浆糊”。
为什么会这样?为什么一个原先好好的系统会逐渐“发出腐化的臭味”?为什么它们不能保持原先那样的清晰简洁呢?
有时候,我们会把原因归咎于客户,责怪他们总是改变需求。我们自我安慰地认为,只要客户的需求仅限于他们最初所声明的,那么我们的设计就是没问题的,所以错就错在客户改变了他们的需求。
呃……然而问题在于:需求总是在改变。那些不能适应未来需求变更的设计是糟糕的设计。能够适应未来需求变更的设计是每一位合格的软件开发者的目标。
这听起来似乎是个极难解决的问题。难到什么程度呢?实际上,迄今为止人们构建出的几乎所有软件系统都遭遇了缓慢的、不可抗拒的腐化。这种现象是如此的普遍,以至于我们给那些腐化得散发着臭味的程序起了一个别致的名字:遗留代码。
遗留代码,一个令程序员感到头大的词。它往往令人联想到“在黑暗的、乱糟糟的灌木丛中艰难地跋涉,脚下有吸血的蚂蟥,旁边还有蜇人的昆虫飞来飞去,它散发着某种黑暗的、粘乎乎的、钝重的、腐烂的垃圾般的气味”。尽管我们初尝编程的滋味可能会是很美妙的,但在处理遗留代码时的痛苦往往会无情地将你的热情之火浇灭。
我们中的许多人都曾尝试过以某种方式避免让代码沦为遗留代码。我们已经编写了关于原则、模式和实践的书,以帮助程序员保持其软件系统的清晰简洁。然而Michael Feathers具有我们许多人都没有的洞察力。他指出,光采用预防措施是不够的。即便是最训练有素的开发团队(通晓最佳原则,使用最佳模式,遵循最佳实践方式)也常常会写出混乱的代码,而且系统的腐化程度也会日积月累。所以,仅是努力防止腐化是不够的,你必须设法扭转它。
这便是本书所要讲述的内容。简言之,本书教你如何扭转腐化,教你在面对一个错综复杂的、不透明的、令人费解的系统时如何慢慢地、逐步地将其变成一个简单的、有良好组织和设计的系统。打个比方,就好比扭转一个热力学系统在自发状态下熵增的趋势。
在你摩拳擦掌、跃跃欲试之前,我得先警告你:扭转腐化趋势的过程并不轻松,而且也算不上迅速。Michael在本书中给出的技术、模式及工具是非常有效的,但仍需要你花费精力、时间、耐心以及细致。本书并不是什么神丹妙药。它不会告诉你如何在一夜之间就把系统中积累的腐化成分统统去除,而是告诉你一些在今后的开发中应当谨记的原则、概念和态度,这样才能帮助你将逐渐退化的系统转变为渐趋完善。
Robert C. Martin
面向对象技术大师
Object Mentor公司总裁
2004年6月29日
无封面