修改代码的艺术
6推荐 收藏
5.4K阅读
图灵程序设计丛书

修改代码的艺术

Michael Feathers (作者) 刘未鹏 (译者)
终止销售
修改代码是每一位软件开发人员的日常工作。开发人员常常面对的现实是,即便是最训练有素的开发团队也会写出混乱的代码,而且系统的腐化程度也会日积月累。本书是一部里程碑式的著作,针对大型的、无测试的遗留代码基,提供了从头到尾的方案,让你能够更有效地应付它们,将你的遗留代码基改善得具有更高性能、更多功能、更好的可靠性和可控性。本书还包括了一组共24项解依赖技术,它们能帮助你单独对付代码中的问题片段,并实现更安全的修改。
本书适合各层次软件开发人员、管理人员和测试人员阅读。

收藏本书能做什么?

有情况的时候会收到通知,比如电子书发布等。

纸质书
¥59.00

其他购买方式?

出版信息

  • 书  名修改代码的艺术
  • 系列书名图灵程序设计丛书
  • 执行编辑关于本书的内容有任何问题,请联系 傅志红
  • 出版日期2007-09-25
  • 书  号978-7-115-16362-2
  • 定  价59.00 元
  • 页  数384
  • 开  本16开
  • 出版状态终止销售
  • 原书名Working Effectively with Legacy Code
  • 原书号0-13-117705-2

同系列书

  • HTTP权威指南

    David Gourley   Brian Totty   Marjorie Sayer   Sailu Reddy   Anshu Aggarwal   陈涓   赵振平   译

    本书是HTTP及其相关核心Web技术方面的权威著作,主要介绍了Web应用程序是如何工作的,核心的因特网协议如何...

  • JavaScript高级程序设计(第3版)

    Nicholas C.Zakas   李松峰   曹力   译

    本书是JavaScript超级畅销书的新版。ECMAScript 5 和HTML5在标准之争中双双胜出,使大量...

  • 计算机科学的基础

    Al Aho   Jeff Ullman   傅尔也   译

    本书全面而详细地阐述了计算机科学的理论基础,从抽象概念的机械化到各种数据模型的建立,用算法、数据抽象等核心思想...

  • Java技术手册(第6版)

    Benjamin J Evans   David Flanagan   安道   译

    通过学习本书,你将能够: 掌握最新的语言细节,包括Java 8的变化 使用基本的Java句法学习面向对...

  • 机器学习实战

    Peter Harrington   李锐   李鹏   曲亚东   王斌   译

    机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或...

目录

第一部分 修改机理
第1章 修改软件 2
1.1 修改软件的四个起因 2
1.1.1 添加特性和修正bug 2
1.1.2 改善设计 4
1.1.3 优化 4
1.1.4 综合起来 4
1.2 危险的修改 6
第2章 带着反馈工作 8
2.1 什么是单元测试 10
2.2 高层测试 12
2.3 测试覆盖 12
2.4 遗留代码修改算法 15
2.4.1 确定修改点 16
2.4.2 找出测试点 16
2.4.3 解依赖 16
2.4.4 编写测试 16
2.4.5 改动和重构 17
2.4.6 其他内容 17
第3章 感知和分离 18
3.1 伪装成合作者 19
3.1.1 伪对象 19
3.1.2 伪对象的两面性 22
3.1.3 伪对象手法的核心理念 23
3.1.4 仿对象 23
第4章 接缝模型 25
4.1 一大段文本 25
4.2 接缝 26
4.3 接缝类型 29
4.3.1 预处理期接缝 29
4.3.2 连接期接缝 32
4.3.3 对象接缝 35
第5章 工具 40
5.1 自动化重构工具 40
5.2 仿对象 42
5.3 单元测试用具 42
5.3.1 JUnit 43
5.3.2 CppUnitLite 44
5.3.3 NUnit 46
5.3.4 其他xUnit框架 46
5.4 一般测试用具 46
5.4.1 集成测试框架 47
5.4.2 Fitnesse 47
第二部分 修改代码的技术
第6章 时间紧迫,但必须修改 50
6.1 新生方法 52
6.2 新生类 54
6.3 外覆方法 58
6.4 外覆类 61
6.5 小结 66
第7章 漫长的修改 67
7.1 理解代码 67
7.2 时滞 67
7.3 解依赖 68
7.4 小结 73
第8章 添加特性 74
8.1 测试驱动开发 74
8.1.1 编写一个失败测试用例 75
8.1.2 让它通过编译 75
8.1.3 让测试通过 75
8.1.4 消除重复 76
8.1.5 编写一个失败测试用例 76
8.1.6 让它通过编译 76
8.1.7 让测试通过 77
8.1.8 消除重复代码 77
8.1.9 编写一个失败测试用例 77
8.1.10 让它通过编译 77
8.1.11 让测试通过 78
8.1.12 消除重复 79
8.2 差异式编程 80
8.3 小结 88
第9章 无法将类放入测试用具中 89
9.1 令人恼火的参数 89
9.2 隐藏依赖 95
9.3 构造块 98
9.4 恼人的全局依赖 100
9.5 可怕的包含依赖 107
9.6 “洋葱”参数 110
9.7 化名参数 112
第10章 无法在测试用具中运行方法 115
10.1 隐藏的方法 115
10.2 “有益的”语言特性 118
10.3 无法探知的副作用 121
第11章 修改时应当测试哪些方法 127
11.1 推测代码修改所产生的影响 127
11.2 前向推测 132
11.3 影响的传播 137
11.4 进行影响推测的工具 138
11.5 从影响分析当中学习 140
11.6 简化影响结构示意图 141
第12章 在同一地进行多处修改,是否应该将相关的所有类都解依赖 144
12.1 拦截点 145
12.1.1 简单的情形 145
12.1.2 高层拦截点 147
12.2 通过汇点来判断设计的好坏 150
12.3 汇点的陷阱 152
第13章 修改时应该怎样写测试 153
13.1 特征测试 153
13.2 刻画类 156
13.3 目标测试 157
13.4 编写特征测试的启发式方法 161
第14章 棘手的库依赖问题 162
第15章 到处都是API调用 164
第16章 对代码的理解不足 172
16.1 注记/草图 172
16.2 清单标注 173
16.2.1 职责分离 173
16.2.2 理解方法结构 174
16.2.3 方法提取 174
16.2.4 理解你的修改产生的影响 174
16.3 草稿式重构 174
16.4 删除不用的代码 175
第17章 应用毫无结构可言 176
17.1 讲述系统的故事 177
17.2 Naked CRC 180
17.3 反省你们的交流或讨论 182
第18章 测试代码碍手碍脚 184
18.1 类命名约定 184
18.2 测试代码放在哪儿 185
第19章 对非面向对象的项目,如何安全地对它进行修改 187
19.1 一个简单的案例 187
19.2 一个棘手的案例 188
19.3 添加新行为 191
19.4 利用面向对象的优势 193
19.5 一切都是面向对象 196
第20章 处理大类 199
20.1 职责识别 202
20.2 其他技术 213
20.3 继续前进 213
20.3.1 战略 213
20.3.2 战术 214
20.4 类提取之后 215
第21章 需要修改大量相同的代码 216
第22章 要修改一个巨型方法,却没法为它编写测试 232
22.1 巨型方法的种类 232
22.1.1 项目列表式方法 232
22.1.2 锯齿状方法 233
22.2 利用自动重构支持来对付巨型方法 236
22.3 手动重构的挑战 238
22.3.1 引入感知变量 239
22.3.2 只提取你所了解的 241
22.3.3 依赖收集 243
22.3.4 分解出方法对象 243
22.4 策略 244
22.4.1 主干提取 244
22.4.2 序列发现 244
22.4.3 优先提取到当前类中 245
22.4.4 小块提取 246
22.4.5 时刻准备重新提取 246
第23章 降低修改的风险 247
23.1 超感编辑 247
23.2 单一目标的编辑 248
23.3 签名保持 249
23.4 依靠编译器 251
第24章 当你感到绝望时 254
第三部分 解依赖技术
第25章 解依赖技术 258
25.1 参数适配 258
25.2 分解出方法对象 261
25.3 定义补全 266
25.4 封装全局引用 268
25.5 暴露静态方法 273
25.6 提取并重写调用 275
25.7 提取并重写工厂方法 276
25.8 提取并重写获取方法 278
25.9 实现提取 281
25.9.1 步骤 283
25.9.2 一个更复杂的例子 284
25.10 接口提取 285
25.11 引入实例委托 290
25.12 引入静态设置方法 292
25.13 连接替换 296
25.14 参数化构造函数 297
25.15 参数化方法 301
25.16 朴素化参数 302
25.17 特性提升 304
25.18 依赖下推 307
25.19 换函数为函数指针 310
25.20 以获取方法替换全局引用 313
25.21 子类化并重写方法 314
25.22 替换实例变量 317
25.23 模板重定义 320
25.24 文本重定义 323
附录 重构 325
术语表 329
索引 331
  • 出自[url=http://blog.china-pub.com/more.asp?name=chinapubblog2008&id=44598]china-pub blog[/url]

    在我列表中,让我拍案惊奇的书只有几本。Martin Fowler的《重构》……Robert Martin的《敏捷软件开发》……Kent Beck的《测试驱动开发》……有好长一段时间,这个列表没再更新过,中间虽然我也读了很多书,也学到了很多东西,但却没有哪本书如这几本书一样给我带来巨大触动。新近加入我这个列表的书是《修改代码的艺术》。

    具体的手法,很难在这里一一列举,但是,以我的开发经验来看,许多似曾相识的代码不断的出现在书中,而作者举重若轻的处理手法,正是让我有拍案惊奇的地方。
    teacher1  发表于 2007-11-16 19:10:37
    推荐
  • 有机会出个电子版吗
    姜鹏  发表于 2016-10-23 22:45:55
    推荐
    • 这本书的版权已过期,也不会有电子版。

      傅志红  发表于 2016-10-24 07:42:56