软硬件调试九法:第二条规则,重现失败

1、重现失败

   目的是为了观察它,找到原因,并检查修复是否成功。方法是进行内部预演、观察如何出错,如果出错会导致重大损失则必须改变一些地方,但是尽量少改动原理的系统和顺序。

2、从头开始

  需要知道bug发生之前的细节,试着从已知的状态开始,仔细观察到bug出现是执行的步骤和状态。

3、引发失败

  如果错误偶尔发生,需要重复很多次才能出现,则需要借助自动测试工具,提高其bug出现的几率。比如房屋下雨漏水,无需等待下次下雨再检查漏水的地方,仅需使用水喷头模拟降雨,在晴天就可以进行修复。比如牙医检查对冷过敏的牙齿,采用向牙齿逐个喷冷空气,就可以查找具体哪个牙齿对冷过敏,然后针对治疗。

4、不要模拟失败

  如果改变测试条件,也许不再出错,也许更糟,出现其它错误,从而分散查找问题的注意力。不要用看似相同的环境代替希望并看到相同错误。比如不要因为假设芯片的问题由于过热产生,就用热风枪给芯片加热以模拟错误,这样可能把芯片烧坏。

5、检查不受控制的条件

  有些bug偶尔发生,很难制造,就要检查无法控制的因素,比如初始条件、输入数据、时序、外部过程、电子噪声、温度、震动、以及测试这是否清醒等因素。 软件中要检查未初始化的变量,随机输入的数据、时序误差、多线程同步等。 硬件要查找噪声、震动、温度、时序和器件性能误差(型号不同、厂家不同)。 制造失败的目的有3个:观察错误、查找线索、确认是否修复。 要记住问题没有自己的思维,失败肯定有原因,你一定能够找到它。

6、记录每件事情,并找到间歇性bug的特征

   当捕获到足够多的信息时,就可以确定哪些因素总与bug有关,查找问题根源时,这些因素就是重点关注的。

7、不要过于相信统计数据

  当bug随机发生时,修复前10次发生一次,修复后如果测试30次没有发生,也不能说明已修复,也许修复后变成了40次发生一次,你只是提前终止了测试。因此最好的办法找到一个与总与失败发生的时间序列,修复后,用该序列进行验证。

8、认识到“那”是可能发生的

  经常遇到测试人员报告一个问题,工程师认为那不可能发生。但是失败的确发生了, 此时,就要忘掉假设,让它在工程师面前再次发生,或者尝试新的测试策略,指明问题的根源。

你可能感兴趣的:(bug,调试,硬件,软硬件调试)