修改代码的艺术

Michael Feathers

出版时间

2007-09-25

ISBN

9787115163622

评分

★★★★★
书籍介绍
这本书最独特的地方,在于它把'测试'当成了修改代码的前提,而非事后补救。它反复强调一个近乎偏执的信念:在不动现有行为的前提下,先用测试给旧代码圈一块安全区,再小心翼翼地改动。对读者而言,这种'先锁定、再重构'的姿态,恰恰是面对庞大遗留系统时最稀缺的底气。它不教你写出漂亮的新代码,而是教你如何在不崩溃、不改坏的前提下,从2000行的函数里一点点抠出可维护的结构。因此它更像一本案头手册——问题来了查一节,而不是从头读到尾。它真正适合的是那些每天在烂代码里'漫游'、被糟糕命名与重复逻辑折磨、却不知从何下手的工程师;至于追求理论高度的读者,或许会觉得它更像案例集。
作者简介
Michael Feathers 世界级面向对象技术专家,以丰富的软件项目开发经验著称。目前在世界顶尖的软件咨询公司Object Mentor从事敏捷方法/极限编程、测试驱动开发、重构、面向对象设计、Java、C#和C++等方面的培训和项目指导。他是著名测试框架CppUnit和FitCpp的开发者,已经主持了三次面向对象界盛会OOPSLA上的CodeFest比赛。 刘未鹏,热爱编程技术,长期关注C++,现在南京大学计算机系攻读硕士学位,译有《Imperfect C++中文版》、《Exceptional C++ Style中文版》(人民邮电出版社出版)。个人blog:http://blog.csdn.net/pongba。
AI导读
核心看点
  • 深入解析遗留代码的修改与重构技术
  • 结合测试与解依赖,安全修改复杂系统
  • 提供从理解到修改的完整工程化方法论
读者共识
  • 修改旧代码比写新代码更具挑战性
  • 测试是安全重构遗留代码的关键保障
  • 虽内容硬核但阅读门槛较高,需耐心
精彩摘录
  • "这种感觉在一次与一个金融业的团队一起工作的时候强烈到了顶点。当时的情况是:在我加入他们之前,他们已经意识到单元测试非常有用,然而实际上进行的却是全景式的测试,他们写的测试很繁琐,需要多次调用数据库并执行大量的代码。这种测试难于编写,而且也并不常用,因为运行耗费的时间实在是太长了。"
  • "想要完全不改变现有行为地添加新行为几乎是不可能的。"
  • "在重构时我们并不只是在做那些低危险性的工作(如重整源代码的格式)或侵入性的危险工作(如重写代码块),而是进行一系列的结构上的小改动,并通过测试的支持来使得代码的修改更容易着手。"
  • "当我们避免创建新类和新方法时,既有的类和方法就会变得越来越庞大,越来越难以理解。"
  • "当在任何大型系统中进行修改时,你可能需要一点时间来熟悉一下将要修改的区域。这时好的系统和差的系统之间的差别就体现出来了。对于前者,当你熟悉了待修改的区域之后,你会对将要进行的修改充满信心。而对于那些结构糟糕的代码,从理清存在的问题到着手进行修改的过程简直就像是为了躲避一只老虎而跳下悬崖一样痛苦。你一再犹豫:“我真的准备好这么做了吗?唔,好吧,我想我别无选择。”"
  • "测试与自动化重构"
  • "我们可以通过解依赖并将类分配给不同的包来加快编译过程,这么做是非常值得的。当你可以快速编译并运行测试时,在开发过程中便能够获得更佳的反馈。大多数时候,这就意味着更少的错误,另外情况也没那么令人恼火了。但这也并非免费的午餐,增加接口和包的数量也会增加一些概念的复杂性。值得这么做吗?答案是肯定的。的确,有时候,包和接口的数量多了以后,找起东西来要多花点工夫,但找到之后用它们工作会非常容易。"
  • "依赖性往往是进行测试的最为明显的障碍。这表现在两个方面:一是难以在测试用具中实例化目标对象;二是难以在测试用具中运行方法。通常在遗留代码中你得先解依赖而后才能将测试安置到位。"
用户评论
就那样。
比较一般,年底也比较久了,内容主要就是讲重构和测试,但是现在看起来没有太多的启发了
值得一读
=。= 真的是鹏鹏翻的?
从测试角度出发的重构
书的内容显然是局限于那个面向对象至上的时代,翻译也没有那么好,诸多错误
很经典的一本书,读完有被启发到,只是翻译的有些不敢恭维。07年的书了,很多能力目前的ide都可以支持,什么时候可以与时俱进的更新一版?
翻译非常一般
给了很大的安慰,困难的时候可以再回来看看
下载
收藏