(知识分享)软硬件调试九法:第九条规则 如果你不修复一个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 ...
随机推荐
- iOS 动画 旋转 移动简单代码
#import "ViewController.h" @interface ViewController () { UIImageView *imgView; BOOL flag; ...
- 十分钟了解分布式计算:Petuum
Petuum是一个机器学习专用分布式计算框架,本文介绍其架构,并基于文章 More Effective Distributed ML via a Stale Synchronous Parallel ...
- 十分钟了解分布式计算:GraphLab
GraphLab是一个面向大规模机器学习/图计算的分布式内存计算框架,由CMU在2009年开始的一个C++项目,这里的内容是基于论文 Low, Yucheng, et al. "Distri ...
- ios项目接入sdk事项
使用cocos2d-x引擎创建的项目在xcode里可以看到都带有一个ios目录,把要接入的sdk的包含.framework库文件和.bundle的资源文件的父目录拖入到xcode项目里的这个ios目录 ...
- dpkg ---- apt-get ------ aptitude 三种方式的区别 及命令格式
转自:http://blog.csdn.net/xiaoyanghuaban/article/details/22946987 dpkg绕过apt包管理数据库对软件包进行操作,所以你用dpkg安装过的 ...
- codeforces mysterious present 最长上升子序列+倒序打印路径
link:http://codeforces.com/problemset/problem/4/D #include <iostream> #include <cstdio> ...
- CSS值得关注的那些事?
CSS值得关注的那些事? CSS层叠样式表的出现,使得样式表现层与HTML结构层分离,CSS样式与HTML结构层次清晰,一目了然.给我们前端开发者带来诸多的便利,然而,在实际前端开发中,还是有相当多的 ...
- hdu3078 伪LCA……
题意:有 n 点的一颗树,每个节点有格子的权值,现在有两种操作,修改一个点的权值,或者求两点之间的路径上的第 k 大的权值. 其实看到这个题,就在 YY 各种做法,询问后得到貌似可能是关于主席树.树链 ...
- [BZOJ 3209]花神的数论题
一道简单的数位 dp 题 但是脑子里只有 __builtin_popcountll 了呢(自重) 看完题解后很快就理解了,而且有一种这么简单的题居然没想到做法真是不应该唉~的感觉 用 f[i] 表示 ...
- (转)几种范数的解释 l0-Norm, l1-Norm, l2-Norm, … , l-infinity Norm
几种范数的解释 l0-Norm, l1-Norm, l2-Norm, - , l-infinity Norm from Rorasa's blog l0-Norm, l1-Norm, l2-Norm, ...