<读书笔记>软件调试之道 :问题的核心-诊断
声明:本文档的内容主要来源于书籍《软件调试修炼之道》作者Paul Butcher,属于读书笔记。
不要急于动手!
尽管可以利用各种工具和技术以及软件自身查找缺陷,但是你最重要的财富是你的智慧
- 一种调试方法
提出假设->设计实验->假设不成立,重新开始
- 采用不同类型的实验
进行几种不同类型的实验,但是每种实验必须有一个明确的目标。比如软件内部运行状态、软件的输入参数、本身编码逻辑。
- 实验必须起到验证的作用
实验是一种达到目的手段,而不是目的的本身。可以通过实验用来证明或者推翻假设。
- 一次只做一次修改
设计实验的规则之一,你每次只能做一个修改。此规则适用于任何修改,令人大跌眼镜的是,该规则经常被人忽略!虽然一次修改几个地方看起来省时间,实际上可能得到的只是无效的结果。不要再犯这种错误
- 记录你所做过的调试
在长期调试时,由于做过多种实验,最后可能忘记自己做了哪些工作,并且在已经得到证明的问题上重复浪费时间,甚至进入死胡同。因此应该做调试记录,理想情况是每个实验都都消除一些可能原因,最终找到根本原因。
- 不要忽略任何细节
凡是你不明白的都是潜在的缺陷,因此即使莫名其妙的现象,也往往对发现问题本身非常有价值。弄清楚意想不到的运行状况可以为你节省大量跟踪缺陷的时间。
相关策略
- 插桩
留意海森堡定律,其本身不应该影响软件本身的运行,有充足的利用把插桩留到代码中,从而编写出自调试软件。
- 分而治之
也就是二分法,这种方法可以排除很多错误的情况,提高效率,但是对减小工作量、提高效率,其并非唯一。
- 利用源码控制工具
利用源码控制系统,可以进行有效的回归跟踪,它可以有效的告诉你哪个变化导致了这些问题。
- 聚焦差异
问题是否只在特定环境下重现?是否在大量数据输入情况下重新?
- 向他人学习
许多缺陷只存在于代码中,因此只有你和合作者才能解决它们。但有时其设计到特定的算法、库文件等,这种情况可能其他人已经遇到过同样的问题。
陷阱
下面这些是从实战中来之不易的经验教训
- 你做的修改正确吗
如果修改没有起到任何效果,那么你并没有改到点子上。这个陷阱很容易掉进去,又让人摸不着头脑,唯一的防御措施是时刻提高警惕。
- 验证假设
假设会带来盲点,要了解你正在做什么样的假设,以及何时对它进行严格的检验。
- 多重原因
这种情况比较难,最富有成效的解决多原因缺陷的办法是对问题进行隔离,并找到一个方法来重现缺陷。另外一个方法是先找寻同一区域内其它明显的缺陷并处理。
- 流沙
实证方法的基础是,可以一次一次的重现问题,并且每次获得相同的结果,但是如果没有了这种确定性,想取得改进就变得极为困难。如果自己遇到了这种问题,那就立即停下来,继续进行只会陷入更大的麻烦。此时的主要目标是准确的找到是什么在变化,以便你能控制它。
思维游戏
调试是艰苦的,有时简直苦不堪言,别灰心 ,我们都遇到过。这正是软件开发工作的 一部分,如果你遇到这种情况,下面的技巧会帮你解决这些问题。
- 旁观调试方法
最有效的一个策略就是向人求助,人多力量大,问题可能很快得到解决。做过这项工作的人都知道,往往只要把问题再解释一遍的简单行为也能激发灵感。因此实在找不到人,对着橡皮鸭或者纸人都可以做。
- 角色扮演
在解释和探讨问题时非常有用,特别是涉及到系统之间的数据交互时。
- 换换脑筋
当自己变得沮丧或者超负荷时,休息一会,看问题的角度可能就大不相同。
- 做些改变
当做实证实验陷入困境之中时,做一点改变是必要的,任何改变都可以,也需不会告诉你任何东西,但是有时会给你带来惊喜。
- 福尔摩斯原则
当你排除了一切不可能,无论剩下的是什么,他也一定是真相!
- 坚持
在绝望时,请记住总有一个办法能帮你解决问题,只要有足够的时间、付出足够的精力和决心,你一定会解决问题。
验证诊断
我们人类是多才多艺的,其中才能之一就是自欺欺人。考虑到这一点,花时间验证你的诊断是很值得的。
- 向他人讲述你的诊断
他们可能会发现一个缺陷,即使是旁观者效应也能帮助你达到这样的效果。
- 检查源码原始副本
从一个已知没有问题的版本重新验证你编程时的思考。
- 多和他人讨论
假设你是错误的,知道你犯过什么错误了吗?
<读书笔记>软件调试之道 :问题的核心-诊断的更多相关文章
- <读书笔记>软件调试之道 :从大局看调试-理想的调试环境
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- <读书笔记>软件调试之道 :从大局看调试-零容忍策略
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- <读书笔记>软件调试之道 :从大局看调试-发现代码存在问题
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- <读书笔记>软件调试之道 :问题的核心-修复后的反思
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- <读书笔记>软件调试之道 :问题的核心-如何修复缺陷
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! 修复缺陷 对于一个好的修复来说,不仅仅是让软件运行正确,还需要为将来奠定基础.一 ...
- <读书笔记>软件调试之道 :问题的核心-重现问题
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记. 重现第一,提问第二 问题重现是实证过程的最强大武器,如果不能重现问题,你也无法证明修复了它 ...
- <读书笔记>软件调试之道 :实证方法
有效调试不仅仅是排除缺陷,其包含如下几个步骤 弄明白软件为何运行错误 修复这个问题 避免破坏其它部分 保持或者提高代码的总体质量 确保同样的问题不在其它地方发生,也不会再次发生 构建实验.观察结果 依 ...
- 读书笔记|Windows 调试原理学习|持续更新
关于调试方面的学习笔记,主要来源于<软件调试>的读书笔记和梦织未来论坛的视频教程 1.调试器使用一个死循环监听调试信息. DebugActiveProcess(PID);while(TRU ...
- <读书笔记> 代码整洁之道
概述 1.本文档的内容主要来源于书籍<代码整洁之道>作者Robert C.Martin,属于读书笔记. 2.软件质量,不仅依赖于架构和项目管理,而且与代码质量紧密相关,本书提出一 ...
随机推荐
- bash shell,调用ffmpeg定期截图
#!/bin/bash #获取当前目录中所有m3u8文件,并 var=$(ls |grep '.m3u8'|cut -d '.' -f1) #死循环 = ] do #循环每个文件 for stream ...
- Tomcat启动脚本
记录一个比较好的tomcat启动脚本,截取<OneinStack>,修改如下两个参数即可用. 使用之前修改下面2个参数: #Location of JAVA_HOME (bin files ...
- IOS零碎技术整理(3)-获取wifi列表
1. 该功能实现基于MobileApple80211框架来进行开发,而目前该框架成为了私有框架,其中的API均为私有API. 如果使用这些API可能导致应用不能上app store或者ios版本升 ...
- [综]前景检测GMM
tornadomeet 前景检测算法_4(opencv自带GMM) http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2531705.html ...
- SVN的感叹号
黄色感叹号(有冲突):--这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别人 ...
- Spark算上下基线
def baseLine(sc: SparkContext): Unit = { println("--------------------baseLine start----------- ...
- shell条件判断中-a至-z的含义
[ -a file ] ------- 如果file存在,返回值为真. [ -b file ] ------- 如果file存在且为块特殊文件,返回值为真. [ -c file ] ------- 如 ...
- Android 蓝牙打印超时问题的处理
http://stackoverflow.com/questions/18657427/ioexception-read-failed-socket-might-closed-bluetooth-on ...
- Postgresql 迁移随笔一
最近忙于MSSQL 迁移到Postgresql的工程,在这里记录一下迁移遇到的问题以及解法. 程序语言:java 要求,根据不同的driver可以同时支援多种数据库,目前主要为MSSQL 和Postg ...
- Linux系统挂载数据盘
参考:http://help.aliyun.com/knowledge_detail/5974154.html?spm=5176.788314850.3.2.hUqwXo 1.在阿里云上购买了服务器, ...