修改代码的艺术

修改代码的艺术
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [美] ,
2014-06
版次: 1
ISBN: 9787111466253
定价: 79.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 328页
正文语种: 简体中文
原版书名: Working Effectively with Legacy Code
87人买过
  •   理解修改软件的机制:添加特性、修正缺陷、改进设计、优化性能把遗留代码放到测试用具之中编写测试,防止引入新的问题包含Java、C++、C和C#的示例,其中介绍的大多数技术适用于其他任何语言或平台,精确地确定要在哪些地方修改代码处理非面向对象的遗留代码处理看起来没有任何结构的应用程序。   Michael C. Feathers,世界级软件开发大师,就职于Object Mentor公司(这是一家世界领先的提供软件领域的指导、技能开发、知识传播和领导力服务的公司)。他是ACM和IEEE成员,也是CppUnit(从JUnit移植到C++上的单元测试框架)和FitCpp(FIT集成测试框架在C++上的实现)的最初作者,曾3次担任OOPSLA会议的CodeFest主席。目前他在世界范围内提供测试驱动开发、重构、面向对象设计、Java、C#、C++以及极限编程方面的培训和指导。 

      侯伯薇,中荷人寿保险有限公司高级系统分析师,InfoQ中文站翻译团队主编,拥有十多年开发经验,目前致力于技术与业务的融合,让开发出来的程序能够真正提高业务人员的工作效率。热衷于通过翻译和演讲的方式与广大程序员分享和交流,曾翻译过多本技术书籍和几百篇技术短文,并在Scrumgathering、QClub、敏捷之旅等活动上做过技术演讲。 译者序

    前言
    第一部分 修改机制
    第1章 修改软件 2
    1.1 修改软件的四大原因 2
    1.1.1 增加特性和修正缺陷 2
    1.1.2 改善设计 4
    1.1.3 优化 4
    1.2 组合在一起 4
    第2章 利用反馈 7
    2.1 什么是单元测试 9
    2.2 高层次测试 11
    2.3 测试覆盖 11
    2.4 遗留代码修改方法 14
    2.4.1 确定变更点 14
    2.4.2 找到测试点 14
    2.4.3 打破依赖关系 14
    2.4.4 编写测试 15
    2.4.5 做出修改并重构 15
    2.5 本书其他部分 15
    第3章 感知和分离 16
    3.1 伪协作程序 17
    3.1.1 伪对象 17
    3.1.2 伪对象的两面 20
    3.1.3 伪对象总结 20
    3.1.4 模拟对象 21
    第4章 接缝模型 22
    4.1 大片的文本 22
    4.2 接缝 23
    4.3 接缝类型 25
    4.3.1 预处理接缝 26
    4.3.2 链接接缝 28
    4.3.3 对象接缝 31
    第5章 工具 36
    5.1 自动化重构工具 36
    5.2 模拟对象 38
    5.3 单元测试用具 38
    5.3.1 JUnit 39
    5.3.2 CppUnitLite 40
    5.3.3 NUnit 41
    5.3.4 其他xUnit框架 42
    5.4 一般测试用具 42
    5.4.1 集成测试框架(Framework for Integrated Test,FIT) 42
    5.4.2 Fitnesse 43 

    第二部分 修改软件
    第6章 时间很紧张,但还需要修改 46
    6.1 新生方法(Sprout Method) 48
    6.2 新生类(Sprout Class) 50
    6.3 包装方法 54
    6.4 包装类 57
    6.5 小结 61
    第7章 永远都无法完成的修改 62
    7.1 理解 62
    7.2 延迟时间 63
    7.3 打破依赖关系 63
    7.4 构建依赖关系 64
    7.5 小结 67
    第8章 如何添加新特性 68
    8.1 测试驱动开发 68
    8.1.1 编写失败的测试案例 69
    8.1.2 对其进行编译 69
    8.1.3 使其通过 69
    8.1.4 去除重复的内容 70
    8.1.5 编写失败的测试案例 70
    8.1.6 对其进行编译 70
    8.1.7 使其通过 71
    8.1.8 去除重复的内容 71
    8.1.9 编写失败的测试案例 71
    8.1.10 对其进行编译 71
    8.1.11 使其通过 72
    8.1.12 去除重复的内容 73
    8.2 根据差异编程 74
    8.3 小结 81
    第9章 无法把类放到测试用具中 82
    9.1 恼人的参数 82
    9.2 具有隐藏依赖的情况 88
    9.3 构造Blob的情况 90
    9.4 恼人的全局依赖 92
    9.5 可怕的Include依赖 99
    9.6 洋葱皮参数 102
    9.7 别名参数 104
    第10章 无法在测试用具中运行方法 107
    10.1 隐藏方法的情况 107
    10.2 “有帮助的”语言特性 110
    10.3 检测不到的副作用 112
    第11章 我需要修改代码,应该测试哪些方法 119
    11.1 推断影响 119
    11.2 正向推理 124
    11.3 影响传播 128
    11.4 推理影响的工具 129
    11.5 从影响分析中学习 131
    11.6 简化影响草图 132
    第12章 我需要在一个地方做多处变更,需要为所有涉及的类打破依赖关系吗 134
    12.1 拦截点 135
    12.1.1 简单的情况 135
    12.1.2 更高层次的拦截点 137
    12.2 使用夹点来判断设计 140
    12.3 夹点陷阱 141
    第13章 我需要修改代码,但不知道要编写哪些测试 142
    13.1 鉴定测试 142
    13.2 鉴定类 145
    13.3 定向测试(Targeted Testing) 146
    13.4 编写鉴定测试的启示 150
    第14章 对库的依赖让我快要崩溃了 151
    第15章 应用全是API调用 153
    第16章 对代码理解不够,所以无法修改 160
    16.1 做笔记,画草图 160
    16.2 列表标记 161
    16.2.1 分离职责 162
    16.2.2 理解方法结构 162
    16.2.3 提取方法 162
    16.2.4 理解变更的影响 162
    16.3 临时重构 162
    16.4 删除没有用的代码 163
    第17章 应用没有结构 164
    17.1 讲述系统的故事 165
    17.2 裸CRC 167
    17.3 对话审查(Conversation Scrutiny) 170
    第18章 测试代码挡路了 171
    18.1 类命名规范 171
    18.2 测试位置 172
    第19章 项目并非面向对象,如何才能够安全地修改 174
    19.1 简单的案例 174
    19.2 困难的案例 175
    19.3 增加新行为 178
    19.4 充分利用面向对象 180
    19.5 完全面向对象 183
    第20章 类太大了,我不想让它继续膨胀 186
    20.1 查看职责 188
    20.2 其他技术 199
    20.3 继续前进 199
    20.3.1 策略 199
    20.3.2 战术 200
    20.4 提取类之后 201
    第21章 在各个地方修改的都是同样的代码 202
    第22章 我需要修改一个巨兽方法,但无法为其编写测试 218
    22.1 巨兽的种类 218
    22.1.1 无序方法 218
    22.1.2 缠结的方法 219
    22.2 使用自动重构支持来对付巨兽 221
    22.3 手动重构挑战 224
    22.3.1 引入检测变量 224
    22.3.2 提取你所知道的内容 227
    22.3.3 收集依赖 228
    22.3.4 打破方法对象 229
    22.4 策略 229
    22.4.1 记下方法的概要 230
    22.4.2 找到序列 230
    22.4.3 首先提取到当前类 231
    22.4.4 提取小段代码 231
    22.4.5 准备好重做提取 231
    第23章 如何知道没有造成任何破坏 232
    23.1 超感编辑(Hyperaware Editing) 232
    23.2 单一目标编辑 233
    23.3 保留签名 234
    23.4 依赖于编译器 236
    23.5 结对编程 238
    第24章 我要崩溃了,它不会再有任何改进 239 

    第三部分 打破依赖的技术
    第25章 打破依赖的技术 242
    25.1 调整参数 242
    25.2 分解方法对象 245
    25.3 完善定义 251
    25.4 封装全局引用 252
    25.5 暴露静态方法 257
    25.6 提取并重写调用 259
    25.7 提取并重写工厂方法 261
    25.8 提取并重写getter方法 262
    25.9 提取实现器 265
    25.10 提取接口 269
    25.11 引入实例委托器 274
    25.12 引入静态设置器 275
    25.13 链接替换 280
    25.14 参数化构造函数 280
    25.15 参数化方法 284
    25.16 原始化参数(Primitivize Parameter) 285
    25.17 上推特性 287
    25.18 下推依赖 290
    25.19 使用函数指针替换函数 293
    25.20 使用getter方法替换全局引用 295
    25.21 创建子类并重写方法 297
    25.22 替代实例变量 299
    25.23 模板重定义 302
    25.24 文本重定义 305
    附录 重构 307
    术语表 311
  • 内容简介:
      理解修改软件的机制:添加特性、修正缺陷、改进设计、优化性能把遗留代码放到测试用具之中编写测试,防止引入新的问题包含Java、C++、C和C#的示例,其中介绍的大多数技术适用于其他任何语言或平台,精确地确定要在哪些地方修改代码处理非面向对象的遗留代码处理看起来没有任何结构的应用程序。
  • 作者简介:
      Michael C. Feathers,世界级软件开发大师,就职于Object Mentor公司(这是一家世界领先的提供软件领域的指导、技能开发、知识传播和领导力服务的公司)。他是ACM和IEEE成员,也是CppUnit(从JUnit移植到C++上的单元测试框架)和FitCpp(FIT集成测试框架在C++上的实现)的最初作者,曾3次担任OOPSLA会议的CodeFest主席。目前他在世界范围内提供测试驱动开发、重构、面向对象设计、Java、C#、C++以及极限编程方面的培训和指导。 

      侯伯薇,中荷人寿保险有限公司高级系统分析师,InfoQ中文站翻译团队主编,拥有十多年开发经验,目前致力于技术与业务的融合,让开发出来的程序能够真正提高业务人员的工作效率。热衷于通过翻译和演讲的方式与广大程序员分享和交流,曾翻译过多本技术书籍和几百篇技术短文,并在Scrumgathering、QClub、敏捷之旅等活动上做过技术演讲。
  • 目录:
    译者序

    前言
    第一部分 修改机制
    第1章 修改软件 2
    1.1 修改软件的四大原因 2
    1.1.1 增加特性和修正缺陷 2
    1.1.2 改善设计 4
    1.1.3 优化 4
    1.2 组合在一起 4
    第2章 利用反馈 7
    2.1 什么是单元测试 9
    2.2 高层次测试 11
    2.3 测试覆盖 11
    2.4 遗留代码修改方法 14
    2.4.1 确定变更点 14
    2.4.2 找到测试点 14
    2.4.3 打破依赖关系 14
    2.4.4 编写测试 15
    2.4.5 做出修改并重构 15
    2.5 本书其他部分 15
    第3章 感知和分离 16
    3.1 伪协作程序 17
    3.1.1 伪对象 17
    3.1.2 伪对象的两面 20
    3.1.3 伪对象总结 20
    3.1.4 模拟对象 21
    第4章 接缝模型 22
    4.1 大片的文本 22
    4.2 接缝 23
    4.3 接缝类型 25
    4.3.1 预处理接缝 26
    4.3.2 链接接缝 28
    4.3.3 对象接缝 31
    第5章 工具 36
    5.1 自动化重构工具 36
    5.2 模拟对象 38
    5.3 单元测试用具 38
    5.3.1 JUnit 39
    5.3.2 CppUnitLite 40
    5.3.3 NUnit 41
    5.3.4 其他xUnit框架 42
    5.4 一般测试用具 42
    5.4.1 集成测试框架(Framework for Integrated Test,FIT) 42
    5.4.2 Fitnesse 43 

    第二部分 修改软件
    第6章 时间很紧张,但还需要修改 46
    6.1 新生方法(Sprout Method) 48
    6.2 新生类(Sprout Class) 50
    6.3 包装方法 54
    6.4 包装类 57
    6.5 小结 61
    第7章 永远都无法完成的修改 62
    7.1 理解 62
    7.2 延迟时间 63
    7.3 打破依赖关系 63
    7.4 构建依赖关系 64
    7.5 小结 67
    第8章 如何添加新特性 68
    8.1 测试驱动开发 68
    8.1.1 编写失败的测试案例 69
    8.1.2 对其进行编译 69
    8.1.3 使其通过 69
    8.1.4 去除重复的内容 70
    8.1.5 编写失败的测试案例 70
    8.1.6 对其进行编译 70
    8.1.7 使其通过 71
    8.1.8 去除重复的内容 71
    8.1.9 编写失败的测试案例 71
    8.1.10 对其进行编译 71
    8.1.11 使其通过 72
    8.1.12 去除重复的内容 73
    8.2 根据差异编程 74
    8.3 小结 81
    第9章 无法把类放到测试用具中 82
    9.1 恼人的参数 82
    9.2 具有隐藏依赖的情况 88
    9.3 构造Blob的情况 90
    9.4 恼人的全局依赖 92
    9.5 可怕的Include依赖 99
    9.6 洋葱皮参数 102
    9.7 别名参数 104
    第10章 无法在测试用具中运行方法 107
    10.1 隐藏方法的情况 107
    10.2 “有帮助的”语言特性 110
    10.3 检测不到的副作用 112
    第11章 我需要修改代码,应该测试哪些方法 119
    11.1 推断影响 119
    11.2 正向推理 124
    11.3 影响传播 128
    11.4 推理影响的工具 129
    11.5 从影响分析中学习 131
    11.6 简化影响草图 132
    第12章 我需要在一个地方做多处变更,需要为所有涉及的类打破依赖关系吗 134
    12.1 拦截点 135
    12.1.1 简单的情况 135
    12.1.2 更高层次的拦截点 137
    12.2 使用夹点来判断设计 140
    12.3 夹点陷阱 141
    第13章 我需要修改代码,但不知道要编写哪些测试 142
    13.1 鉴定测试 142
    13.2 鉴定类 145
    13.3 定向测试(Targeted Testing) 146
    13.4 编写鉴定测试的启示 150
    第14章 对库的依赖让我快要崩溃了 151
    第15章 应用全是API调用 153
    第16章 对代码理解不够,所以无法修改 160
    16.1 做笔记,画草图 160
    16.2 列表标记 161
    16.2.1 分离职责 162
    16.2.2 理解方法结构 162
    16.2.3 提取方法 162
    16.2.4 理解变更的影响 162
    16.3 临时重构 162
    16.4 删除没有用的代码 163
    第17章 应用没有结构 164
    17.1 讲述系统的故事 165
    17.2 裸CRC 167
    17.3 对话审查(Conversation Scrutiny) 170
    第18章 测试代码挡路了 171
    18.1 类命名规范 171
    18.2 测试位置 172
    第19章 项目并非面向对象,如何才能够安全地修改 174
    19.1 简单的案例 174
    19.2 困难的案例 175
    19.3 增加新行为 178
    19.4 充分利用面向对象 180
    19.5 完全面向对象 183
    第20章 类太大了,我不想让它继续膨胀 186
    20.1 查看职责 188
    20.2 其他技术 199
    20.3 继续前进 199
    20.3.1 策略 199
    20.3.2 战术 200
    20.4 提取类之后 201
    第21章 在各个地方修改的都是同样的代码 202
    第22章 我需要修改一个巨兽方法,但无法为其编写测试 218
    22.1 巨兽的种类 218
    22.1.1 无序方法 218
    22.1.2 缠结的方法 219
    22.2 使用自动重构支持来对付巨兽 221
    22.3 手动重构挑战 224
    22.3.1 引入检测变量 224
    22.3.2 提取你所知道的内容 227
    22.3.3 收集依赖 228
    22.3.4 打破方法对象 229
    22.4 策略 229
    22.4.1 记下方法的概要 230
    22.4.2 找到序列 230
    22.4.3 首先提取到当前类 231
    22.4.4 提取小段代码 231
    22.4.5 准备好重做提取 231
    第23章 如何知道没有造成任何破坏 232
    23.1 超感编辑(Hyperaware Editing) 232
    23.2 单一目标编辑 233
    23.3 保留签名 234
    23.4 依赖于编译器 236
    23.5 结对编程 238
    第24章 我要崩溃了,它不会再有任何改进 239 

    第三部分 打破依赖的技术
    第25章 打破依赖的技术 242
    25.1 调整参数 242
    25.2 分解方法对象 245
    25.3 完善定义 251
    25.4 封装全局引用 252
    25.5 暴露静态方法 257
    25.6 提取并重写调用 259
    25.7 提取并重写工厂方法 261
    25.8 提取并重写getter方法 262
    25.9 提取实现器 265
    25.10 提取接口 269
    25.11 引入实例委托器 274
    25.12 引入静态设置器 275
    25.13 链接替换 280
    25.14 参数化构造函数 280
    25.15 参数化方法 284
    25.16 原始化参数(Primitivize Parameter) 285
    25.17 上推特性 287
    25.18 下推依赖 290
    25.19 使用函数指针替换函数 293
    25.20 使用getter方法替换全局引用 295
    25.21 创建子类并重写方法 297
    25.22 替代实例变量 299
    25.23 模板重定义 302
    25.24 文本重定义 305
    附录 重构 307
    术语表 311
查看详情
系列丛书 / 更多
修改代码的艺术
算法心得:高效算法的奥秘(原书第2版)
[美]Henry S.、Jr. 著;爱飞翔 译
修改代码的艺术
C#7.0本质论
马克·米凯利斯(Mark Michaelis) 著;周靖 译
修改代码的艺术
侯门新妇-嫤语书年
海青拿天鹅 著
修改代码的艺术
名家经典系列:Windows 运行时编程权威指南
[美]瑞奇特(Jeffrey Richter)、[美]布什彼特(Maarten van de Bospoort) 著;段菲、周靖 译
修改代码的艺术
服务设计模式:SOAP/WSDL与RESTful Web服务设计解决方案
[美]Robert Daigneau 著;姚军 译
相关图书 / 更多
修改代码的艺术
修改为一个新广告人的自白:营销新思维实战手册
牛云 著
修改代码的艺术
修改后的刑事诉讼法实施情况调查与研究
卞建林 编
修改代码的艺术
修改软件的艺术 构建易维护代码的9条最佳实践
李满庆 译
修改代码的艺术
修改代码的艺术
[美]费瑟(Michael Feathers) 著;刘未鹏 译
修改代码的艺术
修改过程
韩少功 著
修改代码的艺术
修改后刑事诉讼法适用与应对研究
高树勇 编
修改代码的艺术
修改后刑诉法实施与检察工作
曾页九 编
修改代码的艺术
修改与完善《农业法》的若干问题研究
李军波
修改代码的艺术
修改后诉讼法贯彻实施中的检察工作研究:全国女检察官征文活动获奖文集
中国女检察官协会 编
修改代码的艺术
修改基因
[英]内莎·凯里(Nessa Carey)
修改代码的艺术
修改历史的孩子
刘兴诗
您可能感兴趣 / 更多
修改代码的艺术
无辜者的谎言(相信我!看到结局你一定会头皮发麻;全美读者推荐的悬疑神作,GOODREADS高分作品)
[美]A.R.托雷 著;梁颂宇 译;星文文化 出品
修改代码的艺术
孩子,把你的手给我1:怎么说孩子才爱听,怎么教孩子才肯学?帮助每一位3-12岁孩子的父母结束与孩子的所有冲突!
[美]海姆·G.吉诺特
修改代码的艺术
哲学、历史与僭政——重审施特劳斯与科耶夫之争
[美]弗罗斯特(Bryan-Paul Frost) 编;[美]伯恩斯(Timothy W. Burns)
修改代码的艺术
怎样做成大事
[美]丹·加德纳(Dan Gardner) 著;贾拥民 译;湛庐文化 出品;[丹麦]傅以斌(Bent Flyvbjerg)
修改代码的艺术
力量训练的科学基础与实践应用(第三版)
[美]弗拉基米尔· M.扎齐奥尔斯基;[美]威廉·J.克雷默;[美]安德鲁· C.弗赖伊
修改代码的艺术
1200年希腊罗马神话
[美]伊迪丝·汉密尔顿
修改代码的艺术
爱情心理学(新编本)
[美]罗伯特·J. 斯腾伯格 (美)凯琳·斯腾伯格 倪爱萍 译
修改代码的艺术
黄金圈法则
[美]西蒙·斯涅克 著;磨铁文化 出品
修改代码的艺术
最后一章
[美]厄尼·派尔
修改代码的艺术
汤姆·索亚历险记 彩图注音版 一二三四年级5-6-7-8-9岁小学生课外阅读经典 儿童文学无障碍有声伴读世界名著童话故事
[美]马克 吐温
修改代码的艺术
富兰克林自传 名家全译本 改变无数人命运的励志传奇 埃隆马斯克反复推荐 赠富兰克林签名照及精美插图
[美]本杰明·富兰克林 著;李自修 译
修改代码的艺术
国际大奖图画书系列 共11册(小老鼠的恐惧的大书,大灰狼,红豆与菲比,别烦我,下雪了 ,穿靴子的猫 ,先有蛋,绿 ,特别快递,如果你想看鲸鱼 ,一个部落的孩子 ) 麦克米伦世纪
[美]莱恩·史密斯 (英)埃米莉·格雷维特 (美)劳拉·瓦卡罗·等/文 (英)埃米莉·格雷维特 等/图 彭懿 杨玲玲 阿甲 孙慧阳 白薇 译