调节对开发软件尤为重要。殊不知,即便针对有工作经验的程序猿,调节也决非一件容易的事情。
这书是有部出色的手机软件调节实战演练手册,创作者小结了自身和身旁朋友很多年的成功经验,详尽论述了调节的各个方面。书中內容共分成三绝大多数。首位一部分依靠手机软件独有的作用展现缺点是如何造成的,详细介绍了创建在实证方式之中的关键调节方式;其次一部分论述如何发觉编码中存有必须修补的难题,及其如何把调节融进到全部软件开发过程中来;最后一部分探讨如何应对某些普遍的缺点。
这书秉持了Pragmatic书籍简约好用的设计风格,小结了很多方式与工作经验,合适手机软件开发者、调节工作人员阅读文章并快速付诸行动。
Paul Butcher 杰出程序猿,读一些普遍,从单片机设计编号到高級申明式程序编写无所不精。Paul是一名青少年超级天才,8岁时就早已刚开始在8位机里撰写手机游戏。近期两年他刚开始沉迷于超级跑车,觉得自身是能够和汉密尔顿并列的职业赛车手。
目录
- 第一部分 问题的核心
- 第1章 山重水复疑无路
- 1.1 调试不仅是排除缺陷
- 1.2 实证方法
- 1.3 核心调试过程
- 1.4 先澄清几个问题
- 1.4.1 你知道要找的是什么吗
- 1.4.2 一次一个问题
- 1.4.3 先检查简单的事情
- 1.5 付诸行动
- 第2章 重现问题
- 2.1 重现第一,提问第二
- 2.1.1 明确开始要做的事
- 2.1.2 抓住重点
- 2.2 控制软件
- 2.3 控制环境
- 2.4 控制输入
- 2.4.1 推测可能的输入
- 2.4.2 记录输入值
- 2.4.3 负载和压力
- 2.5 改进问题重现
- 2.5.1 最小化反馈周期
- 2.5.2 将不确定的缺陷变为确定的
- 2.5.3 自动化
- 2.5.4 迭代
- 2.6 如果真的不能重现问题该怎么办
- 2.6.1 缺陷真的存在吗
- 2.6.2 在相同的区域解决不同的问题
- 2.6.3 让其他人参与其中
- 2.6.4 充分利用用户群体
- 2.6.5 推测法
- 2.7 付诸行动
- 第3章 诊断
- 3.1 不要急于动手——试试科学的方法
- 3.2 相关策略
- 3.2.1 插桩
- 3.2.2 分而治之
- 3.2.3 利用源代码控制工具
- 3.2.4 聚焦差异
- 3.2.5 向他人学习
- 3.2.6 奥卡姆的剃刀
- 3.3 调试器
- 3.4 陷阱
- 3.4.1 你做的修改是正确的吗
- 3.4.2 验证假设
- 3.4.3 多重原因
- 3.4.4 流沙
- 3.5 思维游戏
- 3.5.1 旁观调试法
- 3.5.2 角色扮演
- 3.5.3 换换脑筋
- 3.5.4 做些改变,什么改变都行
- 3.5.5 福尔摩斯原则
- 3.5.6 坚持
- 3.6 验证诊断
- 3.7 付诸行动
- 第4章 修复缺陷
- 4.1 清除障碍
- 4.2 测试
- 4.3 修复问题产生的原因,而非修复现
- 4.4 重构
- 4.5 签入
- 4.6 审查代码
- 4.7 付诸行动
- 第5章 反思
- 5.1 这到底是怎么搞的
- 5.2 哪里出了问题
- 5.2.1 我们已经做到了吗
- 5.2.2 根本原因分析
- 5.3 它不会再发生了
- 5.3.1 自动验证
- 5.3.2 重构
- 5.3.3 过程
- 5.4 关闭循环
- 5.5 付诸行动
- 第二部分 从大局看调试
- 第6章 发现代码存在问题
- 6.1 追踪缺陷
- 6.1.1 缺陷追踪系统
- 6.1.2 怎样才能写出一份出色的缺陷报告
- 6.1.3 环境和配置报告
- 6.2 与用户合作
- 6.2.1 简化流程
- 6.2.2 有效的沟通
- 6.3 与支持人员协同工作
- 6.4 付诸行动
- 第7章 务实的零容忍策略
- 7.1 缺陷优先
- 7.1.1 早期缺陷修复可以大大降低软件运行的不确定性
- 7.1.2 没有破窗户
- 7.2 调试的思维模式
- 7.3 自己来解决质量问题
- 7.3.1 这里没有“灵丹妙药”
- 7.3.2 停止开发那些有缺陷的程序
- 7.3.3 从“不干净”的代码中将“干净”的代码分离出来
- 7.3.4 错误分类
- 7.3.5 缺陷闪电战
- 7.3.6 专项小组
- 7.4 付诸行动
- 第三部分 深入调试技术
- 第8章 特殊案例
- 8.1 修补已经发布的软件
- 8.2 向后兼容
- 8.2.1 确定你的代码有问题
- 8.2.2 解决兼容性问题
- 8.3 并发
- 8.3.1 简单与控制
- 8.3.2 修复并发缺陷
- 8.4 海森堡缺陷
- 8.5 性能缺陷
- 8.5.1 寻找瓶颈
- 8.5.2 准确的性能分析
- 8.6 嵌 入式软件
- 8.6.1 嵌入式调试工具
- 8.6.2 提取信息的痛苦路程
- 8.7 第三方软件的缺陷
- 8.7.1 不要太快去指责
- 8.7.2 处理第三方代码的缺陷
- 8.7.3 开源代码
- 8.8 付诸行动
- 第9章 理想的调试环境
- 9.1 自动化测试
- 9.1.1 有效的自动化测试
- 9.1.2 自动化测试可以作为调试的辅助
- 9.1.3 模拟测试、桩测试以及其他的代替测试技术
- 9.2 源程序控制
- 9.2.1 稳定性
- 9.2.2 可维护性
- 9.2.3 与分支相关的问题
- 9.2.4 控制分支
- 9.3 自动构建
- 9.3.1 一键构建
- 9.3.2 构建机器
- 9.3.3 持续集成
- 9.3.4 创建版本
- 9.3.5 静态分析
- 9.3.6 使用静态分析
- 9.4 付诸行动
- 第10章 让软件学会自己寻找缺陷
- 10.1 假设和断言
- 10.1.1 一个例子
- 10.1.2 等一下——刚才发生了什么
- 10.1.3 例子,第二幕
- 10.1.4 契约,先决条件,后置条件和不变量
- 10.1.5 开启或关闭断言
- 10.1.6 防错性程序设计
- 10.1.7 断言滥用
- 10.2 调试版本
- 10.2.1 编译器选项
- 10.2.2 调试子系统
- 10.2.3 内置控制
- 10.3 资源泄漏和异常处理
- 10.3.1 在测试中自动抛出异常
- 10.3.2 一个例子
- 10.3.3 测试框架
- 10.4 付诸行动
- 第11章 反模式
- 11.1 夸大优先级
- 11.2 超级巨星
- 11.3 维护团队
- 11.4 救火模式
- 11.5 重写
- 11.6 没有代码所有权
- 11.7 魔法
- 11.8 付诸行动
- 附录A 资源
- 附录B 参考书目