今天测试同学为了赶进度,加班去测试我的功能。
下午第一个问题提过来,根据经验,这个应该是测试的逻辑问题,最后他自己也发现了。
过了一会,提了第二个问题,说是本该命中条件进入某个等级的,没有进入,跳到下个等级了。
拥有几年开发经验的我,此时当然不会说“我的代码没有bug,你再试一遍”。说出这句话的成本近乎为0,但是脸要是打起来,那是真的疼啊~~~
脑海中快速思考下,发现不是靠脑海中演练就能给出答案的,于是乖乖的,掀开电脑盖,指纹解锁,连接VPN,查看日志,一气呵成。
因为这个需求指标巨多,流程相对较长,所以我已经在代码的关键节点打印了数据日志。
所以,想要的信息,日志都是有的。只是,仔细看了下日志的数据,又认真的比对了测试同学给出的测试数据。讲道理,这确实应该命中。
可是事实就是没有命中,于是开始排查。
查看配置中心
因为指标多,每个指标都有阈值,首先第一反应当时是别人的锅,所以我不放心的看了看是不是测试同学调整的参数阈值有问题,看完后,我有点愧疚,这不是测试同学的问题,指标都对上了。
但是还是不死心,是不是没有按照我给他说的要点选热加载选项,导致指标没生效。想到这里,我有点小激动,没错,我又可以表面轻描淡写,实则内心激动的告诉他真相:你这个是配置忘记勾选了吧(怎么回事,又是你的问题)
想归想,想要趾高气昂就要有底气,要底气就得拿证据。
我们的配置中心做的就是这么贴心,每一次操作都可以查看历史记录。赶紧点一下,然后截个图,甩给他。
等等,这个,没想到啊,测试同学居然这么严谨,选项勾选了。
emmm
调整策略
从日志来看,测试的数据没有问题。
从配置中心来看,配置也勾上了。
测试排除嫌疑,真相只有一个,是我的问题(自己打自己脸,下手可以轻点)。
虽然家里连上了VPN,也可以看日志、发布项目,但是本地启动服务不好使,UT也跑不通。
那只能看代码了,要知道,近朱者赤近墨者黑,找别人缺点,那是章口就莱,一莱一个准。
找自己的问题?首先得否定自己,知道自己原来也是有瑕疵的,这是多么难的事儿,但是我做到了!
为了给测试同学一个交代,我开始老老实实的研读自己的代码,企图一眼就发现自己的不足~(太南了
失策了
涉及测试点的代码逻辑也不复杂。大概过程是这样的
上游并发调用获取各个指标的当前值 -> 在规则层过滤 -> 如果命中两个规则条件则视为命中,否则未命中
于是,按照测试同学提供的两个指标以及提供的测试数据比对两个规则的阈值。
从日志来看,上游的数据是没有问题的,从数据比对来说,应该是比对通过了,但是没有命中。
于是开始仔细检查这两个规则相关的代码,以防出现,手抖把"!="写成"=="的情况。
很遗憾,在我认为比较关键的地方查看后,发现我的代码就是这么严谨,找不出任何破绽。
为了不让测试同学hang在我这个线程上划水、摸鱼,我得先释放锁:“代码看着没啥问题,你先测试其他逻辑,我再看看。”
小黄鸭救了我
我心里清楚,虽然我有一点散光,但是眼睛还没瞎。
所以即使再比对十遍八遍,肯定也还是找不到bug。
是时候换一种思路了。
上面说了,上游代码排除嫌疑,涉事代码本身排除嫌疑,当然,测试同学也排除嫌疑,更别说下游代码,下游完全不知情啊。
仔细想想,两个规则之前还有有其他代码的,虽然也是一个规则。我决定擦亮双眼,人肉找bug。
把自己当做一台没有感情的机器,一遍读这我写的工整简洁的代码,一遍计算代码的结果,再到排除嫌疑。
上游赋值没有问题! 变量初始化和结果返回没有问题! 第一个规则没有问题!