美文网首页简书付费文章
不用加班的bug修复术-结构化调试法

不用加班的bug修复术-结构化调试法

作者: 溪石iOS | 来源:发表于2019-02-14 23:08 被阅读117次

电影《飞驰人生》中有这样一句打油诗

一顿操作猛如虎,定睛一看原地杵。

当时我看到这里,不禁笑出眼泪来,这些年来,看过多少程序员在开发中,忙着下断点,一遍又一遍运行程序,东改一句,西改一句,最终找到的却是如缺少赋值语句这种“二bi”原因,如此“暴力调试”,能找到问题都已是万幸,哪里还敢提什么工作效率,真是“你不加班谁加班”。
《飞驰人生》反映出技术工作中的一些常识,坏消息是:只要是技术性工作,复杂是其天然的属性,谁都不可避免;而好消息是:只要掌握规律,总结经验,你可以在这个领域成为顶尖高手。

为什么要用结构化方法

修复bug中,80%时间都花费在找出问题的原因上,用户(或测试人员)反馈的问题常常没有关键步骤,如“输入用户名后崩溃”,连输入的是中文还是英文都不带描述的;大型项目中,出问题的代码可能都不是你写的,这时找一个bug不单工作量巨大,甚至如进入一片荆棘丛林中,时不时地迷了路,原地打转,浪费时间,解决不了问题。因此,需要有一套流程,帮助开发者看清方向,甚至能帮助你重绘地图。
结构化调试能从两个维度提高你的工作效率:

  • 减少时间
  • 减少工作量

结构化调试法是什么

结构化调试是指在分析解决问题时,以一定的规则、流程顺序进行,首先以假设为出发点,对问题进行正确的判定,假设并罗列问题构成的要素,其次对要素进行合理分类,排除非关键问题,对重点原因进行分析,寻找出针对根本原因的修复方法。

结构化调试法概念看起来有些抽象,其实对开发者来说并不陌生,可能你一直在用它,只不过你并没有意识到而已。
比如说,你出门时,发现找不到钥匙了。这个时候,“钥匙在哪里”就是你要解决的问题。你会从分析钥匙的来源、丢钥匙的可能时间、地点、丢钥匙的影响等等各种因素中,列出各种可能的解决方案再开始找钥匙吗?当然不会,相反,你一定是先找出自己昨天穿的衣服,在口袋里摸一摸,如果有,那问题就解决了,你就拿好钥匙出门。如果没有,再找找最可能有钥匙的地方在哪里,比如是不是在书房抽屉里。
也就是说,你先假设钥匙在哪,再去验证有没有,按找钥匙这个方法,修复bug的过程是这样的:


找钥匙的方法

如果你已能有意识地这样去找bug,说明你已经是有经验的开发者了,但这还不够,如果漫无目的的提出各种假设,验证的过程将枯燥漫长,还有可能顾此失彼,本文接下来将进一步细化这个流程,通过一些实例,给出在各个步骤中需要做的具体工作,防止在调试过程中出现“只见树木不见森林”的情况,并列出一些常见的调试误区。

完整的结构化调试过程

结构化调试法

分解问题

实际调试时,由于最初的问题都过于模糊,无法提出可验证的假设,我们需要拆解最初问题,将问题分为几个子问题。
分解问题要遵循两个原则:

1. 相互独立:

独立原则要求在分析问题时,列出的各个子问题互不包含,各自代表系统的一个切面。

2. 穷尽大问题:

这条原则要求,各个子问题综合起来,能代表大问题,若子问题有解,则大问题就有解。

这时要注意,穷尽问题必须以最初问题为导向,用“二分法”从结果倒推,
以“输入用户名后崩溃”这个总问题为例:

相关文章

  • 不用加班的bug修复术-结构化调试法

    电影《飞驰人生》中有这样一句打油诗 一顿操作猛如虎,定睛一看原地杵。 当时我看到这里,不禁笑出眼泪来,这些年来,看...

  • 软件调试的技巧

    这篇文章是《调试九法:软硬件错误的排查之道》的阅读笔记。这本书的主旨,是介绍如何修复bug:找出bug发生的原因、...

  • Python调试

    项目开发过程中很难一次完全运行,总是会有各种各样的bug,修复这些bug需要各种调试手段。 调试技巧一: prin...

  • IOS基础:调试修复BUG

    原创:知识点总结性文章创作不易,请珍惜,之后会持续更新,不断完善个人比较喜欢做笔记和写总结,毕竟好记性不如烂笔头哈...

  • 关于JSPatch的一些坑

    发出去的app 出现bug 鞭长莫及?有热修复的出现再也不用担心了。可以在客户还没发现就偷偷的把bug修复了。JS...

  • 亦真亦幻梦医院

    -------------程序员日记 万行代码无人知,日日bug难修复; 加班常事难心理...

  • 「周报No.77」ITC万物链项目进展更新2019/6/29-7

    研发 主网 主链:完成Gas映射合约调试;修复Bug(节点连接及RPC Websockt链接超时等) 钱包:完成i...

  • iOS开发中常见bug!(内附解答方法)

    序言 你是否曾经修复了一个 bug ,随后又发现了一个跟刚修复 bug 有关的 bug ,又或是修复 bug 的方...

  • 为什么修复每个 bug 后都要问这 3 个问题?

    你是否曾经修复了一个 bug ,随后又发现了一个跟刚修复 bug 有关的 bug ,又或是修复 bug 的方式引起...

  • 修复每个bug后都要问这4个问题

    你是否曾经修复了一个bug,随后又发现了一个刚修复bug有关的bug,又或是修复bug的方式引起了另一个bug?又...

网友评论

    本文标题:不用加班的bug修复术-结构化调试法

    本文链接:https://www.haomeiwen.com/subject/gtrdeqtx.html