Skip to content

Latest commit

 

History

History
executable file
·
42 lines (21 loc) · 3.73 KB

解决bug技巧.md

File metadata and controls

executable file
·
42 lines (21 loc) · 3.73 KB

解决 Bug 技巧

作为程序员,最讨厌的就是Bug,但是这是不可避免的问题,也是无法逃避的问题,所以说应该如何解bug呢?

通过异常获取调中栈。

通常来说解决bug有三种方式:

自上而下: 即从最开始的逻辑进行一步一步的排查,一直排查到出错位置。

自下而上: 即从出错位置开始排查,一步一步的寻找上一级的逻辑,直到找到出错根源。

盲人摸象: 又称瞎猜,根据bug出现形态猜测bug出现原因,之后尝试去修改调试,如果解决了就OK,如果没有解决就再猜一次,直到猜正确。

对于编程老手来说,一般会根据具体项目采用前两种方案,如果项目较小,整体不算复杂就使用自上而下,可以通过快速的梳理项目逻辑来找到问题的核心。如果项目本身比较复杂,而且是多人合作类型的,采用自下而上的方式比较多,从出错位置出发一层一层的寻找问题根源。至于盲人摸象的方案,属于玄学范畴,因为这种随意测试修改的方式太过于耗费时间,也可能解决了眼前的Bug,但又引入了新的Bug,很不稳定,如果采用这种方案,会随着项目的开发积累越来越多的Bug,最终可能陷入整天解Bug,没时间开发新功能的境地。

解决Bug的最好方案就是将其扼杀在源头。

而bug也分三种:

对最终结果没什么影响的警告。

必然出现的异常。

偶然出现的异常。

对于不同频率的 bug 也要有不同的处理方式。

**警告:**对于警告采用尽量解决的方式,虽然现在它是一个警告,说不定哪天在特殊条件下就变成一个异常了,而且可能会让程序整体逻辑混乱,程序崩溃。

必现异常: 必然出现的异常一般比较好解决,因为这类异常的异常信息最容易捕获,通过异常信息加上分析测试基本就能断定异常出现的情况,只要知道了产生原因,解决掉也就不困难了。

偶现异常: 对于偶现异常比较麻烦,因为它不是必然出现的,只会偶尔出来恶心你一下,下次你想让它出现它反而可能不出现了。所以也很难抓住它的小尾巴。对于偶现异常一般要用异常捕获框架来将它的信息捕获出来,这样比较容易分析,当然了,也有另一种方案,就是让偶现异常通过条件约束变成必现异常。下面就主要介绍一下如何通过条件约束将偶现异常变成必现异常。

很多偶现因素都可能导致偶现异常的产生,例如网络不稳定,本地部分数据丢失,远程服务偶然死亡,内存泄漏,内存溢出等。我们可以通过模拟这些条件来让偶现异常变成必现异常。

第一步:分析偶现概率,如果偶现概率非常小并且影响不大,可以暂缓处理。

第二步:白盒测试,所谓白盒测试就是不通过代码进行测试,把自己当成用户在界面上随意操作,来尝试触发bug。如果bug没有出现尝试更换环境,例如断开网络链接,清空本地数据,之后再进入测试。如果成功触发了bug,要记住bug产生前的环境和操作步骤,例如:设备偶而投屏无法退出问题,最终确认确定到必现的操作步骤是,熄屏后唤醒语音界面,之后再退出应用会导致无法投屏无法正常退出,只要按照这个步骤操作,百分百出现该错误。

第三步:捕捉异常信息,只要保证了bug必现,那么捕捉异常也就简单了,按照步骤分步操作,并且观察与之相关的内部状态变化,如果发现内部状态变化不符合预期,重点调查产生原因,一般就能找出问题的核心。