首页 > 其他分享 >用结构化思维解一切BUG(3):实际案例

用结构化思维解一切BUG(3):实际案例

时间:2023-11-02 21:48:18浏览次数:34  
标签:结构化 试验 假设 问题 案例 应用 根因 BUG

背景

本文是系列文章《用结构化思维解一切BUG》的第 3 篇,也是最高潮篇!本系列文章主要介绍一种「无需掌握技术细节,只需结构化思维和常识即可解一切BUG的方法」。

在前序文章《用结构化思维解一切BUG(1):核心思路》中,我介绍了本方法的核心思路,即,基于结构化的「假设树」,通过重复多次执行「做试验→造现象→缩范围」动作序列,逐级下钻,缩小问题范围,直到找到问题根因

在前序文章《用结构化思维解一切BUG(2):实践原则》中,我介绍了本方法的实践原则,「程序断案三字经」,总结为 5 条 30 个字:

  1. 先诊断,后开药。
  2. 信机器,慎信人。
  3. 做试验,缩范围。
  4. 找不同,看变化。
  5. 先脆弱,后稳定。

本文我将带大家进入真实BUG场景,在场景中介绍「假设树」如何生长、如何执行「做试验→造现象→缩范围」小闭环、如何运用实践原则。同时,您也从中感受到该方法的强大!

_提醒:_本文中,假设树的生长图和试验记录表格是重点,建议点击图片全屏预览,如用手机建议横屏观看。

案例背景

这个客户是创立了 20 年的国际贸易和海外工业制造公司,目前在筹备上市。为应对上市要求,需要搭建自己的质量管理系统。

这个应用由一个「导航应用」和多个「子应用」构成。导航应用中有多个子应用的链接。当用户登录导航应用后,点击任何一个子应用的链接,即可快速进入这些子应用,无需再次登录。请记住这里的「导航应用」和「子应用」,后文会多次提到。

有一天,客户反馈,部分用户有「跳转到子应用后无法自动登录」的问题。

显然,这仅有的信息,我无法做出任何有效判断。

大多数业务用户,甚至是程序员,在反馈问题时都缺乏必要细节。作为问题解决者,我的第一个任务就是,问对问题,得到我想要的信息。我一般会用 5W2H 的方法来问问题(请注意后续问题的中括号标注),以全面了解信息。

提醒:如果您是程序员,强烈建议刻意培养自己「提出一个好技术问题」的能力,因为好的问题才有更大几率被快速回答。具体请参考我的另一篇文章《如何提出一个好的技术问题?》。

明确问题

首先,我需要明确问题[What]。即,问 3 个问题:

  1. 希望的现象是什么?[To-Be]
  2. 实际的现象是什么?[As-Is]
  3. 哪个点不满足希望?[Gap]

在本场景中,三个问题的答案为:

  1. 希望用户可以免登录地进入子应用。
  2. 实际现象是,用点击子应用链接后,应用自动在新标签页打开一个登录页面。且这个登录界面就算输入正确密码和账号,也无法登录。
  3. 无法正常访问子应用。

缩小范围

根据上一篇文章的「假设树」方法,我们第一层需判断此问题是前端问题还是后端问题。

为了方便引用,我们把发生 BUG 和不发生 BUG 的用户分为两组,发生 BUG 的用户成为 N (Negative)组,未发生 BUG 的用户成为 P (Positive)组。

于是,我问了如下问题:

这个诊断过程,我践行了如下原则:

  1. 「先诊断,后开药」。在没有弄清楚问题根因之前,不做任何正式的修改建议。
  2. 「找不同,看变化」。尽量从现有现象中,找到大家的不同点,看有什么变化,变化就是线索。

有了这些信息,我靠直觉猜测,大概率是前端问题,且是浏览器问题。因为,从后端来看,我很难想到这两组用户在代码和数据上有显著的不同特征。具体来说:

  1. 后端代码,两组用户肯定是一样的。
  2. 后端数据,发生了 BUG 的用户没有任何明显相似点,发生 BUG 的用户与没发生 BUG 的用户也没有任何明显不同点。

直觉很有价值,可以更快找到正确路径。但直觉未经过严格证明,不能把它直接当做结论,还需要做试验证实。

另外,不用担心自己直觉不准,它并不会影响最终结果,因为它只是猜测。只要你按照「假设树」的路径逐个遍历,总会到达终点,只是要多做几次试验罢了。

标签:结构化,试验,假设,问题,案例,应用,根因,BUG
From: https://www.cnblogs.com/jhzhu/p/17806366.html

相关文章

  • uniapp小程序所遇到的bug
    最近小程序添加好多条条框框的规矩比如1、登录的时候要弹出隐私规则的弹窗2、要使用的api涉及到隐私的一定要在隐私规则里配置,在微信公众平台的设置里,更新隐私规则3、.如果涉及到手机号登录的小程序,则需要有游客模式,就是不可以在登录的时候向用户获取手机号,要在具体功能的前面......
  • 项目管理中实施风险定量分析案例
    假设一个项目经理正在负责一个信息系统项目,包括软件开发和部署。这个项目涉及到多个风险,例如技术风险、组织风险、市场风险等。在项目开始之前,项目经理需要进行风险的定量分析,以确定每个风险的发生概率和对项目目标的影响程度。以下是实施风险定量分析的步骤:确定风险因素:首先需要确......
  • Docker desktop for win/windows Debug Mode: false/true | Trouble Shooting | diagn
    Eventually,usingthedocker-D-ldebugsettingfortheclientIhavefoundthelogoutputs(apparentlycurrentlytherearenodebuglevelmessagesimplementedasreported.docker-DinfoDebugModedocker-Dversiondocker-D-ldebugC:\Users\[u......
  • 35-Vue脚手架-全局事件总线(使用全局事件总线优化Todo-List案例)
    全局事件总线(GlobalEventBus)1.一种组件间通信的方式,适用于任意组件间通信2.安装全局事件总线newVue({...//生命周期beforeCreate这时vue还未解析模板,初始化的数据监测、数据代理还未开始beforeCreate(){//安装全局事件总线Vue.prot......
  • XSAN数据恢复-存储空间从XSAN架构迁移到STORNEXT架构时误格式化存储系统的XSAN数据恢
    XSAN数据恢复环境:昆腾存储,MACOS操作系统,存放视频类数据(MXF、MOV等格式文件)。XSAN故障&检测:将存储空间从XSAN架构迁移到STORNEXT架构后,存储空间中数据全部丢失。 故障存储中一共有9个数据卷:1个META信息卷+8个DATA信息卷。北亚企安数据恢复工程师分析META信息卷&读取其中的元信......
  • 【视频】R语言生存分析原理与晚期肺癌患者分析案例|数据分享|附代码数据
    原文链接:http://tecdat.cn/?p=10278最近我们被客户要求撰写关于生存分析的研究报告,包括一些图形和统计输出。生存分析(也称为工程中的可靠性分析)的目标是在协变量和事件时间之间建立联系生存分析的名称源于临床研究,其中预测死亡时间,即生存,通常是主要目标。视频:R语言生存分析原......
  • 购物车 复选框和反选 全部选择案例
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>购物车复选框的选中反选的案例</title></head><body>All<inputclass="all"name="Checkbox"......
  • C#中无法将文件“obj\x86\Debug\BookShoopTuto.exe”复制到“bin\Debug\BookShoo
    因为任务多开了,数据无法写入也是因为这个去任务管理区删掉运行的项目就可以了(删掉BookShoopTuto) 参考博客——https://blog.csdn.net/nxg0916/article/details/126782186......
  • 用结构化思维解一切BUG(2):实践原则
    背景本文是系列文章《用结构化思维解一切BUG》的第二篇。本系列文章主要介绍一种「无需掌握技术细节,只需结构化思维和常识即可解一切BUG的方法」。在前序文章《用结构化思维解一切BUG(1):核心思路》中,我介绍了用结构化思维解BUG的核心思路。即,基于结构化的「假设树」,通过重复多次执......
  • 大型央国企智能制造数字化转型之道及案例分析 P138
    本人从事咨询工作多年,二十年一线数字化规划咨询经验,提供制造业数智化转型规划服务,顶层规划/企业架构/数据治理/数据安全解决方案资料干货.该PPT共138页,由于篇幅有限,以下为部分资料,如需完整原版 方案,点击右上角红色按钮关注+私信。本文来源于网络,侵权立删。数字经济浪潮下,央国企......