(知识分享)软硬件调试九法:第九条规则 如果你不修复一个bug,它将永远存在
1、查证问题确已被修复
如果遵循了“制造失败”这条规则,就知道如何验证你确实修复了问题。无论问题和修复看起来多么明显,你都无法保证修复是有效的,直到做了测试并验证。
2、查证确实你的修复措施解决了问题
如果你取消这个修复,系统再次出现失败,再应用这个修复,问题消失,才能够证明你确实修复了问题。这样做的原因是,在调试期间,往往会改变一些不属于修复的地方,有时这些改变会隐藏问题,如果没有意识到这一点,发现测试起作用了,就高高兴兴的回家了,因为你做的修复和问题消失毫无关系,因此修复方案到达客户后,可能再次失败甚至更糟! 但是这个也有例外,比如已经坏掉的硬件不需要再装回去验证。就像心脏手术中不需要把原来的心脏再装回去验证一样。
3、要知道,bug不会自动消失
如果你不修复bug,它不会自动修复,也许看起来不再发生了,但是它仍会发生。 比如随机出现的bug,如果凭猜测修改了很多地方,或许碰巧修车成功了,或许只是把它隐藏起来了,但你并不知道怎么解决的,下次发生时,你还是毫无头绪。
如果基于发布,没有时间追踪随机bug,也可以在发布的系统中进行插桩,当故障发生时,可以捕获一些信息,如果问题不发生,也不会有任何影响。这样做的一个好处是,及时你无法利用这些信息来修复问题,起码让客户知道你认真跟踪了问题,通过对客户反馈的信息进行感谢,比向客户说我们从未遇到这个问题要好。
4、从根本解决问题
如果一个硬件损坏了,不要简单更换了事,如果其在某种情况下会损坏,这样只会给你换来一点时间,新的零件还是会损坏。 比如,电路板上的电容耐压值5V,但是你的系统峰值电压偶尔会达到8V,那么简单更换电容后,它仍然会损坏,必须找到器件损坏的原因,才能从根本解决,比如更换耐压值为16V的电容。
5、对过程进行修复
有时修复系统和修复过程很难区分,有时bug隐藏在设计的过程中,而不是产品中,这个方面涉及到了设置质量的问题。 比如一家生产车间的地板上有油滴,如果简单的擦拭掉,过几天还会出现,查找原因后才发现,公司的产品使用两个螺钉固定,当受到剧烈震动后,螺钉会松动导致漏油,因此必须修改设计,以确保产品在需求、设计和验证正确考虑震动。
总结
- 要合理利用版本控制和管理工具
- 要有调试测试记录文档和bug记录系统,便于备份、总结和查找。
- 要勤于学习,持开放心态,积极面对问题。
- 要遵循前面的九条规则,遇到问题不要慌乱,不要主观臆断问题根源,不要随意改动,以免导致更加严重的后果
(知识分享)软硬件调试九法:第九条规则 如果你不修复一个bug,它将永远存在的更多相关文章
- 《调试九法——软硬件错误的排查之道》【PDF】下载
<调试九法--软硬件错误的排查之道>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196352 内容简介 <调试九法:软硬件错 ...
- 调试九法: 软硬件错误的排查之道 (David J. Agans 著)
第1章 简介 (已看) 第2章 总体规则 (已看) 第3章 理解系统 (已看) 第4章 制造失败 第5章 不要想, 而要看 第6章 分而治之 第7章 一次只改一个地方 第8章 保持审计跟踪 第9章 检 ...
- 分享吉林大学机械科学与工程学院,zhao jun 博士的Halcon学习过程及知识分享
分享吉林大学机械科学与工程学院,zhao jun 博士的Halcon学习过程及知识分享 全文转载zhao jun 博士的新浪博客,版权为zhaojun博士所有 原文地址:http://blog.sin ...
- Kafka 基本知识分享
目录 一.基本术语 二.Kafka 基本命令 三.易混淆概念 四.Kafka的特性 五.Kafka的使用场景 六.Kakfa 的设计思想 七.Kafka 配置文件设置 八.新消费者 九.Kafka该怎 ...
- GO基础知识分享
目录 GO基础知识分享 go语言的基本事项 关键字 字符串的拼接和变量的定义方式 空白符 const常量 iota的用法 运算符 Go 没有三目运算符,不能适用?: 语言条件语句 for循环的方式 函 ...
- 使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台
www.gbtags.com 使用javascript开发的视差滚动效果的云彩 阅读全文:使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台
- 学汇编的时候可以拿IDA之类的反汇编工具辅助学习,再用gdb或者IDA动态调试,跟踪每条指令的 执行结果。都不难
作者:潘安仁链接:https://www.zhihu.com/question/40720890/answer/87926792来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- MemoryStream相关知识分享
一.简单介绍一下MemoryStream MemoryStream是内存流,为系统内存提供读写操作,由于MemoryStream是通过无符号字节数组组成的,可以说MemoryStream的性能可以算比 ...
- 制作一个简单的部门员工知识分享的python抽取脚本
需求: 基于公司的文化和公司部门间以及员工之间的工作需求状态,或者想要了解某一些技能.专业方面的知识需求.促进并提高员工们的技能认知和技术水平. 详细代码如下: 先说一下存入csv表格的表头字段: 1 ...
随机推荐
- 网页版电子表格控件tmlxSpreadsheet免费下载地址
tmlxSpreadsheet 是一个由JavaScript 和 PHP 写成的电子表格控件(包含WP插件, Joomla插件等等).. 程序员可以容易的添加一个类似Excel功能的,可编辑的表格功能 ...
- Fragment的初步设计
Fragment的初步设计 Fragment功能 Fragment将每一段碎片时间归类到一个具体的事件上: 使用者可以创建多个事件对碎片时间进行分类: 使用者点击事件会进入用户自己设置好的事件对应的A ...
- CentOS上的RabbitMQ安装
1. erlang安装配置(这里我们在opt目录下进行安装配置) cd /opt 安装依赖文件: yum install gcc glibc-devel make ncurses-devel open ...
- 委托Delegate,多播委托和委托链
定义一个委托 public delegate void CalculateDelegate(int 32 x,int 32 y); 定义一个委托类型的变量 public static Calculat ...
- js常见函数汇总
/** * 隐藏元素 * @param {String} elem */ function hide(elem){ var curDisplay = getStyle(elem, 'di ...
- Map/Reduce 工作机制分析 --- 作业的执行流程
前言 从运行我们的 Map/Reduce 程序,到结果的提交,Hadoop 平台其实做了很多事情. 那么 Hadoop 平台到底做了什么事情,让 Map/Reduce 程序可以如此 "轻易& ...
- PHP7在linux下的安装步骤
安装mcrypt: yum install -y php-mcrypt libmcrypt libmcrypt-devel 升级bison: cd /var/soft/ wget http://ftp ...
- unity之mipmap
Mipmap技术有点类似于LOD技术,但是不同的是,LOD针对的是模型资源,而Mipmap针对的纹理贴图资源 使用Mipmap后,贴图会根据摄像机距离的远近,选择使用不同精度的贴图. 缺点:会占用内存 ...
- cocos2d 中显示系统时间
用到的两个方法先贴上 这个是时间回调 每分钟回去调用一次时间设置方法 //定时更新状态栏上的时间 void MGameScene::update(float dt) { ; fpassedTime + ...
- iOS下UITableView的单元格重用逻辑
终于有时间继续UITableView的接口调用顺序这篇文章了,之前测试过,模拟器都是按照height,cellForRow这样的顺序调用接口的,iOS8以前一直是这样,但是到了iOS8,这个顺序倒过来 ...