问题排查复盘-大屏自选股数据错误

问题描述

用户那边展示的 Web 大屏,其中自选股页面的数据显示错误了。这个问题之前也出现过。

排查过程

  • 上午销售同事反馈数据不对,我看了一下,知道是之前出现过的问题,但是不能确定原因,答复本周解决
  • 对方比较着急,要求我们的人现场排查,销售同事准备协调工程同事
  • 工程同事跟我沟通后,感觉没有去的必要(我只是让他看下 F12 有没有报错),不过最终还是决定去一趟,让对方放心一些
  • 下午工程同事到达现场,开始配合我联调:
    • 查看了控制台,没有报错
    • 刷新页面,发现数据还是不对
    • 单独访问自选股页面,发现数据正确(这一步说不通了,得仔细核查下代码)
    • 查看接口的请求头、返回头、返回的具体数据信息,发现根本没有发出数据请求(该页面的 2 个数据请求都没发出来)
    • 怀疑和用户登录状态有关,查看用户状态,发现确实没登录
    • 查看用户的 Cookie 信息,发现和我本地的相比,少了这几项:SELFNUMBER、ctjj_pass_id、SELFSTOCK
    • 让对方清空 cookie 数据,刷新页面,发现数据更新正常了
    • 初步判断应该是我们发送请求的逻辑中,依赖了用户 cookie 的变量,而用户登录失效后,该变量丢失导致的
    • 结束联调
  • 按照我们的登录时间来算,那应该是一周左右就失效了,而我们上次让对方清空数据恢复是在 6.25 左右,如果是该原因,那么行情数据应该是在 6.25 之后一周左右又停止更新了;因为我们做了数据兜底功能,所以一直显示的是最后获取的数据
  • 核对之前对方截图中的几个股票的数据,发现确实和 7 月初的数据能对上,确定是该原因导致的
  • 本地启动程序调试排查,发现是因为程序中获取的自选股变量为 null,而后面又调用了该变量的其他属性,导致抛出异常了;我们程序捕获了异常后,直接用 localStorage 中的数据进行了页面渲染,没有请求后端数据,所以就不更新了;现在对自选股变量的获取做了容错处理,当发现取不到时,会从本地缓存的 holdingStock 数据中解析自选股信息,如果还是获取失败,则用前端程序写死的自选股列表去请求数据。

反思

没有确认问题细节,直接就准备干了

这是很恐怖的事情,试想如果这次不是工程部的同事现场帮忙排查,我估计这周我们即使上线一版,也解决不了问题,因为我们压根就没找到问题的根本原因。

总是想绕过问题

这个问题因为难以排查,我首先想到的不是如何确定原因,而是去做一些补救措施,比如行情数据对比、网页截屏回传、数据回传、远程操控刷新等等。

这些方案不仅没解决问题,还会花费大量的成本,得不偿失。

直面问题,不要降低标准,不要靠猜测去解决问题。

计算机是科学,别自己把它搞成了玄学。

没有构建好开发环境

我从上午 9 点多就准备开始排查大屏的代码问题,结果一直到 11:20 才把程序跑起来。。。

遇到的问题包括:

  • 找源码
  • 内网程序跑不起来
  • 外网程序跑不起来

(重要)编码质量导致的维护问题

这个项目的代码质量一言难尽,我之前也没有做 CodeReview,当时项目也确实很赶,结果到现在看逻辑、维护都很麻烦了。

就像《Code Complete》的理念一样:编码完成,做到什么样的程度才算编码完成呢?我们的这个项目的代码明显没有达到这个程度,距离高质量的代码差得很远。

代码质量的重要性,其实 YLF 是很清楚的,他也一直强调这些,但是不经过一些血与泪的教训,是 Get 不到的。

TODO

明天观察一天,然后联系销售,让用户那边:

  • 重新登录账号
  • 强制刷新,清空 JS 缓存