为你推荐
译者序
前言
如何使用本书
致谢
第一部分修改机制
第1章修改软件
1.1 修改软件的四大原因
1.2 组合在一起
第2章利用反馈
2.1 什么是单元测试
2.2 高层次测试
2.3 测试覆盖
2.4 遗留代码修改方法
2.5 本书其他部分
第3章感知和分离
3.1 伪协作程序
第4章接缝模型
4.1 大片的文本
4.2 接缝
4.3 接缝类型
第5章工具
5.1 自动化重构工具
5.2 模拟对象
5.3 单元测试用具
5.4 一般测试用具
第二部分修改软件
第6章时间很紧张,但还需要修改
6.1 新生方法(Sprout Method)
6.2 新生类(Sprout Class)
6.3 包装方法
6.4 包装类
6.5 小结
第7章永远都无法完成的修改
7.1 理解
7.2 延迟时间
7.3 打破依赖关系
7.4 构建依赖关系
7.5 小结
第8章如何添加新特性
8.1 测试驱动开发
8.2 根据差异编程
8.3 小结
第9章无法把类放到测试用具中
9.1 恼人的参数
9.2 具有隐藏依赖的情况
9.3 构造Blob的情况
9.4 恼人的全局依赖
9.5 可怕的Include依赖
9.6 洋葱皮参数
9.7 别名参数
第10章无法在测试用具中运行方法
10.1 隐藏方法的情况
10.2 “有帮助的”语言特性
10.3 检测不到的副作用
第11章我需要修改代码,应该测试哪些方法
11.1 推断影响
11.2 正向推理
11.3 影响传播
11.4 推理影响的工具
11.5 从影响分析中学习
11.6 简化影响草图
第12章我需要在一个地方做多处变更,需要为所有涉及的类打破依赖关系吗
12.1 拦截点
12.2 使用夹点来判断设计
12.3 夹点陷阱
第13章我需要修改代码,但不知道要编写哪些测试
13.1 鉴定测试
13.2 鉴定类
13.3 定向测试(Targeted Testing)
13.4 编写鉴定测试的启示
第14章对库的依赖让我快要崩溃了
第15章应用全是API调用
第16章对代码理解不够,所以无法修改
16.1 做笔记,画草图
16.2 列表标记
16.3 临时重构
16.4 删除没有用的代码
第17章应用没有结构
17.1 讲述系统的故事
17.2 裸CRC
17.3 对话审查(Conversation Scrutiny)
第18章测试代码挡路了
18.1 类命名规范
18.2 测试位置
第19章项目并非面向对象,如何才能够安全地修改
19.1 简单的案例
19.2 困难的案例
19.3 增加新行为
19.4 充分利用面向对象
19.5 完全面向对象
第20章类太大了,我不想让它继续膨胀
20.1 查看职责
20.2 其他技术
20.3 继续前进
20.4 提取类之后
第21章在各个地方修改的都是同样的代码
第22章我需要修改一个巨兽方法,但无法为其编写测试
22.1 巨兽的种类
22.2 使用自动重构支持来对付巨兽
22.3 手动重构挑战
22.4 策略
第23章如何知道没有造成任何破坏
23.1 超感编辑(Hyperaware Editing)
23.2 单一目标编辑
23.3 保留签名
23.4 依赖于编译器
23.5 结对编程
第24章我要崩溃了,它不会再有任何改进
第三部分打破依赖的技术
第25章打破依赖的技术
25.1 调整参数
25.2 分解方法对象
25.3 完善定义
25.4 封装全局引用
25.5 暴露静态方法
25.6 提取并重写调用
25.7 提取并重写工厂方法
25.8 提取并重写getter方法
25.9 提取实现器
25.10 提取接口
25.11 引入实例委托器
25.12 引入静态设置器
25.13 链接替换
23.14 参数化构造函数
25.15 参数化方法
25.16 原始化参数(Primitivize Parameter)
25.17 上推特性
25.18 下推依赖
25.19 使用函数指针替换函数
25.20 使用getter方法替换全局引用
25.21 创建子类并重写方法
25.22 替代实例变量
25.23 模板重定义
25.24 文本重定义
附录重构
术语表
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜