修改代码的艺术

修改代码的艺术
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: [美] ,
2014-06
版次: 1
ISBN: 9787111466253
定价: 79.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 328页
正文语种: 简体中文
原版书名: Working Effectively with Legacy Code
98人买过
  •   理解修改软件的机制:添加特性、修正缺陷、改进设计、优化性能把遗留代码放到测试用具之中编写测试,防止引入新的问题包含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) 著;周靖 译
修改代码的艺术
侯门新妇-嫤语书年
海青拿天鹅 著
修改代码的艺术
服务设计模式:SOAP/WSDL与RESTful Web服务设计解决方案
[美]Robert Daigneau 著;姚军 译
修改代码的艺术
名家经典系列:Windows 运行时编程权威指南
[美]瑞奇特(Jeffrey Richter)、[美]布什彼特(Maarten van de Bospoort) 著;段菲、周靖 译
相关图书 / 更多
修改代码的艺术
修改为一个新广告人的自白:营销新思维实战手册
牛云 著
修改代码的艺术
修改后的刑事诉讼法实施情况调查与研究
卞建林 编
修改代码的艺术
修改软件的艺术 构建易维护代码的9条最佳实践
李满庆 译
修改代码的艺术
修改代码的艺术
[美]费瑟(Michael Feathers) 著;刘未鹏 译
修改代码的艺术
修改过程
韩少功 著
修改代码的艺术
修改后刑事诉讼法适用与应对研究
高树勇 编
修改代码的艺术
修改后刑诉法实施与检察工作
曾页九 编
修改代码的艺术
修改与完善《农业法》的若干问题研究
李军波
修改代码的艺术
修改后诉讼法贯彻实施中的检察工作研究:全国女检察官征文活动获奖文集
中国女检察官协会 编
修改代码的艺术
修改基因
[英]内莎·凯里(Nessa Carey)
修改代码的艺术
修改历史的孩子
刘兴诗
您可能感兴趣 / 更多
修改代码的艺术
拱门:木心风格的意义
[美]童明
修改代码的艺术
土狼星Ⅲ 边疆(雨果奖三冠王艾伦?斯蒂尔代表作,附赠异形书签1枚)
[美] 艾伦·斯蒂尔
修改代码的艺术
幸福的16种大脑类型
[美]丹尼尔·亚蒙
修改代码的艺术
幸福的涟漪:从个人成长到组织发展的非凡力量
[美]林爱伦(Jenn Lim) 著;马虹瑶(Susanna Ma) 译;颉腾文化 出品
修改代码的艺术
自然之镜:美国博物学家的自然保护历程
[美]玛丽·安妮·安德烈
修改代码的艺术
超越绩效2.0(大规模组织变革的成功路线图原书第2版)
[美]斯科特·凯勒;[美]比尔·沙宁格
修改代码的艺术
猫头鹰日记(全17册)
[美]瑞贝卡·埃利奥特著绘
修改代码的艺术
30分钟学会铅笔画
[美]马克·凯斯特勒
修改代码的艺术
帽子的历史
[美]德雷克·斯图特曼
修改代码的艺术
全新正版图书 众里寻他艾丽卡·洛林·米拉姆辽宁科学技术出版社9787559130587
[美]艾丽卡·洛林·米拉姆
修改代码的艺术
火药魔法师(卷二)猩红战役
[美]布莱恩·麦克莱伦
修改代码的艺术
火药魔法师(卷三)秋日共和
[美]布莱恩·麦克莱伦