用科学化除错方法替你的 zk 程序除错之一

Steve McConnel 所着的CODE COMPLETE:软件开发实务指南 中, 第 23 章提到一个科学化的除错方法,步骤如下:

  1. 可以稳定产生错误
  2. 找出错误的根因
    a. 收集造成此错误的相关资讯
    b. 分析找到的资料并给出一个对根因的假设
    c. 证明或反证该假设
  3. 修正该错误
  4. 验证该修正
  5. 寻找其他同样的错误

我就以这套步骤当作基本原则来说明怎麽帮 ZK 应用程序除错。

1.可以稳定产生错误

这阶段目标是找到能产生该错误的明确、固定、最少步骤

如果你的步骤不明确、不固定、或步骤很多,这代表似乎每个元件都可能造成问题,那问题范围就会牵涉太广,难以找到根因。如果能够除去一个步骤,仍然能够重现该错误,那就代表该步骤与错误无关,可以移除。因此经由反覆测试来减少步骤,就能缩小问题范围,可以让你接下来比较容易找到根因。

2.找出错误的根因

a. 收集造成此错误的相关资讯

服务器 log 中的(错误)讯息

很多人会忽略服务器印出的 log 内容,但其实它常常明确的表示出问题的根因,如显示 exception stack trace,我们就可以根据呼叫的 stack 去找出错误发生的程序来推测出错误根因。

浏览器上的错误讯息

主流的桌上浏览器按 F12 都可以开启开发者工具,其中 Console 页会显示错误讯息,这通常也能帮助我们找到根因。 以下是 Chrome 中的开发者工具:

https://ithelp.ithome.com.tw/upload/images/20211009/20050621jXBjqe2ep9.png

缩小问题范围

为了找到错误的根因,缩小问题的范围将会非常有帮助,因为问题牵涉的范围越大,潜在造成问题的因素就越多,必须耗费非常多时间一一检视这范围里的每个因素来找出根因,因此缩小问题范围可以增进除错的效率。你可用以下作法缩小问题:

  • 移除(不相关的)元件。
    通常 zul 上会有很多元件,但其实真正与错误有关的元件不多,因此将其他无关的元件从 zul 中移除可以让你专注在真正的问题上。
  • 减少重制步骤。
    如果原本要 3 个步骤能重现 bug,若是少做某一个步骤仍然能重现该 bug,就代表那一步跟该 bug 无关,可以省略。
  • 移除(不相关的)程序码。
    如果一个按钮按下去,相对应的 event listener 有 500 行,那就得在这 500 行中找问题。如果能移除不相关的程序码,减少成 100 行,就只需要在这 100 行中找出根因,就可以减少除错时间。

<<:  Day 25 -资料库应用小程序 创建资料库

>>:  Android Studio初学笔记-Day24-FloatButton和SnackBar

【LeetCode】Linked List

能够完赛的人是鬼吧 本文会提到做 singular linked list 常犯错误、如何避免,与常...

移动设备安全政策是防止影子 IT 使用的最佳安全控制

移动设备安全政策是防止影子 IT 使用的最佳安全控制。用户教育可促进对安全政策和问题的普遍认识,但应...

Day19:别说那麽多废话,讲重点

Lambda在刚开始学Java一定会很不想碰,会觉得好不容易对Java有点熟悉了,结果又搞出一整陀新...

[Day20] Emmet 学习笔记 - 层级篇

预处理器可以透过加快撰写程序的速度,但是自己的打字速度提升有限(换了Mac之後还变慢不少),Emme...

[Day18] 抽象类别

抽象类别 PHP也支援抽象类的和抽象方法,被定义为抽象类的方法不能被实体化,在任何一个类别中, 如果...