• 第三周读书笔记


    这周我继续阅读了《调试九法》的后面章节,我个人认为调试在制造一个可以投入使用,并且具有吸引力的软件(或者说是任意一种产品)占据着十分重要的作用。

    在《制造失败》这一章节中,让我印象最深刻的是下面这一段对话。

    如果Charlie现在正在我的公司工作,你问他:“当你发现一个故障时该怎么办?” 他会回答说:“试着让他再次发生”

    让错误重演在调试中是十分重要的,当你能够让错误重演时,实际上,你已经掌握了攻克他的必要条件。再不知道错误时,你甚至不能判断问题是否已经修复,这其实会产生不可预见的隐患。

                书中也同样的提到了,让失败重现的三个原因。

                可以观察他;

                可以专心查找原因;

                可以判断是否已修复问题;

          然而我认为,书中有一个地方说的并不能够完全依靠,书中说,当你执行X操作时,失败率为100%,修复问题后,再执行X操作,失败率为0,则说明BUG已完全修复。但是在我自己的实际操作中,当你执行X操作不再失败后,实际有可能只是做出了让这个操作不再出问题的操作,他很有可能引起新的问题,具体的判断解决方案相信书中后续部分会提到。

    而为了能够制造失败,详细记录测试步骤也是十分重要的,这是你制造失败的重要步骤,然而如果这个错误存在巨大的破坏性或是高额的代价,就需要改变一些地方,但应尽量少改动原来的系统和顺序。

    在制造失败时,应试着从一个已知的状态开始,因为计算机有可能处在一个复杂的状态下,而BUG有可能仅会在机器的某个复杂状态下出现。所以应试着从一个已知的状态开始,如刚重启的计算机。

    引发失败,自动化的调试过程其实是很有启发的,由于重复引发失败时,很多步骤都是重复执行的,所以将这些步骤自动化实际基于了很大的帮助。

    引发失败和模拟失败的区别,这一段实际我看的不是特别懂,核心思想应该是告诫调试员,不要试图的猜测产生失败的机理,在你猜测失败时,模拟很可能会失败,并且产生新的BUG,这在调试中是非常让人痛苦并且延缓效率的。

    在上面这些步骤时,间歇性的BUG是很难处理的,在自己的调试过程中,如果一个BUG重复的出现,其实他并不能造成太长时间的困扰(很有可能只是一个疏忽造成的,并且很好调试消除),但间歇性的BUG,导致很多调试的规则很难实现,关键的问题正如书中所说,间歇性的BUG其实是因为失败原因很难被直接找出。

     

  • 相关阅读:
    Shell case esac 和 for
    Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
    杨辉三角+优化算法
    mount --bind和硬连接的区别
    Linux文件系统管理
    磁盘管理
    Linux之find文件(目录)查找
    BZOJ 3224 平衡树模板题
    NOIP 2016 滚粗记
    BZOJ 4034 线段树+DFS序
  • 原文地址:https://www.cnblogs.com/lanziwen/p/8658127.html
Copyright © 2020-2023  润新知