第564章 第 564 章

许知然盯着屏幕上刚弹出的系统通知,轻轻挑了下眉。

“【bug编号1001】状态更新:已驳回。驳回理由:无法复现。处理人:陈序。”

她入职星辰科技第七天,提交的第一个bug,从提交到被驳回,耗时四小时二十七分钟。驳回理由只有四个字:无法复现。

简洁,干脆,没有任何商量的余地。

许知然端起杯子喝了口水,目光落在那个处理人的名字上。陈序。开发组后端工程师,入职时间三年两个月,bug处理量全组第一,驳回率全组最低——但那是针对别人的。她这个新人的第一个bug,就撞上了他的驳回记录。

她点开bug详情,又看了一遍自己提交的内容。

【bug描述】:首页底部“立即体验”按钮,点击后反馈延迟约0.3秒。用户在低网速环境下感受尤为明显,存在交互阻塞感。

【复现步骤】:1.连接公司Wi-Fi;2.打开App进入首页;3.连续点击“立即体验”按钮5次。

【预期结果】:按钮点击后应在0.1秒内给出视觉反馈。

【实际结果】:点击后约0.3秒按钮状态才发生变化。

0.3秒。对于普通用户来说,这可能是根本不会注意到的延迟。但许知然不是普通用户,她是产品体验官。

她的工作,就是找茬。

许知然放下杯子,手指在桌面上轻轻敲了两下。她想起入职培训时前辈说过的话:在星辰,开发组有两个公认的规矩。第一,不要惹架构师;第二,不要和陈序争bug。前者是因为架构师掌握核心代码,后者是因为陈序掌握真理。

据说陈序驳回bug的理由永远只有三种:无法复现、设计如此、建议优化测试环境。而被他驳回的bug,百分之九十不会再被提起。

许知然看了眼时间,十一点五十。她站起身,没有去食堂,而是走向了茶水间旁边的测试设备柜。

下午两点,陈序的电脑屏幕上弹出了一条新通知。

【bug编号1001】状态更新:已重新激活。激活人:许知然。附言:证据链已补充,请重新审核。

陈序敲代码的手指顿了一下。他点开bug详情,发现下面多了一个附件包。

第一个文件:对比视频。视频被分成左右两半,左边是星辰App的操作录屏,右边是某头部竞品的操作录屏。同样的点击动作,同样的网络环境,竞品的按钮在手指触屏的瞬间就变了颜色,星辰的按钮却肉眼可见地慢了半拍。视频右下角标注了毫秒级的时间轴,延迟数据清晰可见。

第二个文件:用户行为数据分析截图。截图上显示,在首页停留超过10秒的用户中,有63%会点击“立即体验”按钮。而在这部分用户中,又有一部分人在点击后快速返回了首页。数据标注:可能存在点击后反馈延迟导致的误操作。

第三个文件:测试环境说明。许知然详细列出了她使用的设备型号、系统版本、网络类型、信号强度,甚至包括了当时的手机温度。最后附了一句话:如需更多信息,我可以携带设备前往开发组,当面复现。

陈序盯着屏幕,眉头微微收紧。

旁边工位的何照探过头来:“哟,陈哥,看什么呢这么认真?”

陈序没理他。

何照自己凑近了看,一看就乐了:“这不是上午你驳回的那个bug吗?许知然……这名字有点耳熟啊。”他想了想,“哦对,新来的产品体验官,听说人长得挺漂亮,就是特别较真。你这是碰上对手了?”

陈序还是没说话,但他点开了那个对比视频,又看了一遍。

何照在旁边啧啧两声:“人家这证据链做的,比测试组还专业。你打算怎么办?继续驳回?”

陈序终于开口,声音平淡:“她用的是公司Wi-Fi?”

何照愣了一下:“啊?我看看……哦,是公司Wi-Fi。怎么,问题出在Wi-Fi上?”

陈序没有回答。他盯着屏幕又看了几秒,然后移动鼠标,在bug处理页面敲下了一行字。

下一秒,全开发组的电脑屏幕上同时弹出了一条实时通知。

“【bug编号1001】状态更新:已重新领取。处理人:陈序。附言:工位403,现在过来。”

何照一口水差点喷出来。

他扭头看向陈序,表情像是看到了什么稀罕物:“陈哥,你这是……投降了?我认识你三年,你第一次主动约产品当面聊bug。”

陈序靠在椅背上,目光还停在屏幕上:“她的数据有问题。”

“什么问题?”

“证明bug存在,但原因找错了。”陈序说,“不是代码的事。”

何照还想再问,就看见一个身影穿过开放办公区的过道,正朝403工位走过来。

是个年轻女人。白衬衫,深灰色长裤,头发松松地扎在脑后。五官生得温和,但眼神清亮,步子不快不慢,完全没有第一次来开发组的拘谨。

许知然。

她在陈序的工位旁边站定,目光扫过他的电脑屏幕,最后落在他脸上:“陈工?”

陈序点点头,没有起身,只是把旁边的椅子往外推了推:“坐。”

许知然坐下来,从包里拿出自己的测试机,放在桌上:“需要我复现一遍吗?”

“不用。”陈序说,“视频我看过了。你连的是公司Wi-Fi?”

“对。”

“换4G试试。”

许知然愣了一下,随即明白了他的意思。她关掉Wi-Fi,打开4G网络,重新点击那个按钮。

这一次,反馈几乎是瞬间的。

许知然又点了两下,然后抬起头,对上陈序的目光。

陈序的表情没有任何变化,但许知然分明从他眼里看到了一丝极淡的——她不确定那是不是得意。

“问题不在代码,”陈序说,“在公司Wi-Fi的某个模块上。兼容性问题。”

许知然沉默了两秒,然后点点头:“你说得对。”

陈序正准备开口说什么,就听见她继续说下去。

“但用户不会知道问题出在Wi-Fi上。”许知然的声音依然平静,像是在陈述一个事实,“他们只会觉得是App卡。他们会想,为什么我点这个按钮的时候,它总是慢半拍?为什么别的App不这样?然后他们可能会截图发微博,可能会给应用商店打一星,可能会在卸载之前留下最后一句话:星辰的App真难用。”

陈序没有说话。

许知然看着他,语气里没有指责,只有认真:“陈工,这个bug的根因确实不在你的代码。但用户感知到的延迟是真实存在的。作为产品体验官,我的工作是发现问题,不是追责。至于这个问题该由网络组解决,还是由你们前端通过优化交互来兜底,那是后续的讨论。”

她说完,站起身,把手机收回包里:“谢谢你的时间。如果还需要我配合测试,随时找我。”

她转身要走,却被陈序叫住。

“等等。”

许知然回过头。

陈序已经转回去盯着屏幕,手指在键盘上敲着什么。过了几秒,他才开口,声音比刚才低了一点:“把你的手机给我。”

许知然把手机递过去。

陈序接过来,连上数据线,打开了一个许知然看不懂的界面。他操作了大概两分钟,然后把手机拔下来还给她:“再试试。”

许知然点开App,点了一下那个按钮。

这一次,即使在Wi-Fi环境下,反馈也几乎是瞬时的。

她抬起头,看向陈序。

陈序已经转回去继续敲代码了,像是刚才什么都没发生。但他的耳尖,在办公区的灯光下,有一点微微的泛红。

“我加了一层兜底逻辑,”他说,声音淡淡的,“如果检测到网络请求延迟超过阈值,前端强制提前渲染反馈状态。治标不治本,但能让用户感觉不卡。”

许知然看着他的侧脸,忽然觉得这个人有点意思。

她回到工位的时候,bug系统又弹出了一条通知。

【bug编号1001】状态更新:已修复。修复人:陈序。处理附言:问题已处理。下次这种情况——

许知然等着看后面的话。

附言显示完整了:“下次这种情况,直接来工位找我。”

她盯着那行字看了好几秒,然后端起杯子喝了口水。水是凉的,但她的心跳好像快了半拍。

旁边工位的苏桐探过头来:“看什么呢,脸都红了?”

“谁脸红了。”许知然放下杯子,“看bug呢。”

“哟,你那个被驳回的bug?”苏桐凑过来看屏幕,看完之后意味深长地哦了一声,“陈序让你直接去找他?”

“他说的是下次这种情况。”许知然纠正她。

“下次这种情况。”苏桐重复了一遍,语气更暧昧了,“他处理的bug没有一千也有八百,怎么就你的需要‘下次直接来’?”

许知然没接话,但她的目光又落在那行附言上。

直接来工位找我。

她想起刚才在他工位旁边,他接过她手机时指尖无意中碰到她的手背。想起他低着头操作时,她不小心瞥见的睫毛弧度。想起他把手机还给她,说“再试试”的时候,耳尖那一点可疑的红。

许知然轻轻弯了弯嘴角。

对面开发组的方向,隔着半个办公区,她好像感觉到有人在看这边。

但她没有抬头。

许知然拿着测试机站起身的时候,明显感觉到四周的目光。

不是那种明目张胆的注视,而是键盘声突然变得稀疏、余光纷纷偏移的微妙变化。她穿过开放办公区,沿着过道往开发组的方向走,一路上遇到的人都会多看她一眼——新面孔,长得不错,方向是403工位,那是陈序的位置。

开发组的办公区比产品那边更安静,只有密集的键盘敲击声。但当她拐进通往403的通道时,那些键盘声齐刷刷地顿了一下。

何照第一个抬起头,脸上挂着那种看热闹不嫌事大的笑容:“来了来了,许老师来了。”

旁边几个人跟着抬头,目光齐刷刷落在许知然身上。

许知然脚步没停,脸上也没什么表情变化,径直走到陈序工位旁边。陈序背对着她,正盯着屏幕,像是完全没注意到身后的动静。

但许知然看见了。他的手指停在键盘上方,没有敲下去。

“陈工。”

陈序这才转过身,目光在她脸上停了一秒,然后移向她手里的测试机。他点了点头,把旁边的椅子往外推了推:“坐。”

许知然坐下来。这个工位比她从远处看时感觉更挤,桌上两台显示器,中间夹着一个机械键盘,旁边散落着几本技术书和一个保温杯。她坐下的时候,手肘差点碰到他的胳膊,于是不动声色地往旁边挪了挪。

陈序没看她,目光落在她的测试机上:“开始吧。”

许知然打开手机,点进App,找到那个按钮。她的动作很慢,确保每一步都在他的注视下完成。点击,等待,点击,等待。

按钮反馈正常。延迟消失了。

许知然抬起头,正好看见陈序嘴角有一个极淡的弧度,那弧度只出现了一秒,如果不是她盯着看,根本注意不到。

她没说话,继续点击。第二次,第三次,第四次。每一次反馈都是正常的。

旁边的何照凑过来,压低声音对旁边的人说:“看来真是环境问题,陈哥赢了。”

陈序靠在椅背上,目光终于从手机屏幕移开,落到许知然脸上。他没说话,但那眼神分明在说:你还有什么要说的?

许知然放下手机,抬起头迎上他的目光。

“陈工,”她的声音很平静,“能借一下你的热点吗?”

陈序愣了一下。

许知然解释道:“你工位旁边这个Wi-Fi信号,和我那边不太一样。我想试试用你的手机热点,模拟一下弱网环境。”

陈序看了她两秒,从桌上拿起手机,解锁,递给她。

许知然接过手机,连上热点,重新点开App。这一次,在点击按钮的瞬间,那个熟悉的延迟出现了。

0.3秒。肉眼可见的卡顿。

许知然又点了两次,每次都是同样的结果。然后把手机递还给陈序,语气平淡:“看来不是我的环境问题,是你这个位置Wi-Fi信号比较好。”

周围突然安静了。

何照张了张嘴,想说什么又咽了回去。旁边几个人交换了一个眼神。

陈序盯着自己的手机屏幕,上面还显示着热点连接成功的提示。他沉默了几秒,然后抬起头,对上许知然的目光。

许知然没有躲开。她的眼神很干净,没有得意,也没有挑衅,只是在陈述一个事实。

“看来是公司Wi-Fi某个模块的兼容性问题,”她说,“与你的代码无关。”

陈序没有说话。

许知然继续道:“但作为用户,他不会知道问题出在Wi-Fi上。他只会觉得是App卡。他会在加载的时候多等那0.3秒,然后想,这App真慢。他可能会因此少点一次那个按钮,可能会在应用商店给个三星,可能会在卸载的时候写一句:星辰的App体验越来越差了。”

她说这些话的时候语气始终平静,像是在做一个例行的工作汇报。但每一个字都落得很实。

陈序看着她,忽然发现她的睫毛很长,说话的时候会轻轻颤动。

“问题我记下了,”他开口,声音比平时低了一点,“我会看看底层网络请求库的逻辑,加一层兜底处理。”

许知然点点头:“需要配合测试的话随时找我。”

她站起身准备离开,陈序却伸手拦了一下:“手机给我。”

许知然把手机递过去。

陈序接过来,连上数据线,打开一个满是代码的界面。他操作的时候,许知然就站在旁边等着。距离很近,她能闻到他身上淡淡的洗衣液味道,能看见他敲键盘时手指的骨节分明。

大概两分钟后,陈序把手机还给她:“试试。”

许知然点开App,点击按钮。延迟消失了。她又换回自己的位置试了一次,依然流畅。

她抬起头,正想说谢谢,却发现陈序的耳朵尖有一点红。不是很明显,但刚好被她看见了。

陈序已经把脸转向屏幕,语气恢复了平时的淡漠:“加了层预渲染,治标不治本。网络组那边我会去找他们沟通。”

许知然看着他的侧脸,忽然觉得这个人有点意思。

“谢谢陈工,”她说,“那我先回去了。”

陈序嗯了一声,没看她。

许知然转身离开。走出几步,她听见身后何照压低声音说:“陈哥,你刚才是用热点给人测bug?你不是从来不让别人连你热点吗?上次李姐想蹭一下你都说流量不够……”

后面的话她没听清,因为陈序好像说了什么,何照就闭嘴了。

许知然回到工位,刚坐下,屏幕右下角就弹出了bug系统的通知。

【bug编号1001】状态更新:已修复。

处理人:陈序。

处理附言:问题已处理。下次这种情况,直接来工位找我。

许知然盯着那行字看了好几秒。

下次这种情况。直接来工位找我。

她想起刚才在他工位旁边,他接过手机时指尖无意中碰到她的手背。想起他把手机还给她时,耳尖那一点可疑的红。想起何照说的那句话:你不是从来不让别人连你热点吗?

苏桐的脑袋从旁边探过来:“看什么呢,脸都红了?”

“谁脸红了。”许知然移开目光,顺手端起杯子喝水。

苏桐凑到屏幕前看了一眼,然后意味深长地哦了一声:“陈序让你直接去找他?”

“他说的是下次这种情况。”

“下次这种情况。”苏桐重复了一遍,拖长了尾音,“他处理的bug没有一千也有八百,怎么就你的需要下次直接来?”

许知然没接话,目光又落回那行附言上。

直接来工位找我。

这句话怎么看都像是标准的开发组套话,但她总觉得有什么不一样。也许是因为他说话时的语气,也许是因为他接过手机时那一瞬间的停顿,也许是因为他耳尖那一点红。

也许只是她想多了。

对面开发组的方向,隔着半个办公区,许知然忽然感觉到有目光落在自己身上。她抬起头,正好看见陈序的背影。他背对着她,正在跟何照说什么,何照笑得前仰后合。

许知然垂下眼,嘴角轻轻弯了一下。

第二天上午,许知然的屏幕上弹出一条用户反馈。

“在购物车页面连续增减商品数量,再快速点击结算,有时候会跳转到空白页。试了好几次,不是每次都能复现,但出现过三次。”

她立刻打开测试机,按照用户描述的步骤操作。第一次,正常。第二次,正常。第三次,还是正常。

许知然没有放弃,她把操作速度放慢,又在每个环节增加了随机停顿。第十五次尝试时,屏幕一闪,跳出了一个空白页面。

她截图,录屏,在笔记本上记下完整的操作路径:进入购物车—增加商品数量—减少商品数量—再次增加—三秒内点击结算。整个过程需要控制在七秒以内,操作间隔不能超过零点五秒。

复现成功后,她打开bug系统,开始填写。

【bug编号】1007

【严重级别】P2

【bug描述】购物车页面特定操作路径下,快速点击结算跳转空白页

【复现步骤】1.进入购物车页面;2.连续增减同一商品数量至少三次;3.在两秒内点击结算按钮;4.观察页面跳转结果

【复现概率】约6.7%(尝试15次复现1次)

【附件】录屏文件、操作轨迹截图

她点击提交,看了眼处理人默认分配——后端开发组,陈序。

许知然盯着那个名字看了两秒,然后端起杯子喝了口水。

二十分钟后,bug系统弹出通知。

【bug编号1007】状态更新:已领取。处理人:陈序。附言:步骤复杂,文字描述容易遗漏。能否来开发组一起复现?

许知然看着“一起复现”三个字,嘴角轻轻弯了一下。

她起身往开发组走,这次比上周更熟门熟路。穿过开放办公区时,她注意到有几个工位的人抬头看她,目光里带着某种她读得懂却不想深究的意味。

403工位近在眼前时,她看见何照正凑在陈序旁边说话,声音不大不小刚好能飘过来。

“陈哥,你现在的服务态度这么好了?以前你不是最烦产品来工位吗?上次小李想来跟你当面确认bug,你说什么来着——‘文字描述能说清的事,为什么要见面’?”

陈序没理他,但许知然看见他握着鼠标的手指紧了一下。

她走过去,在工位旁边站定:“陈工。”

陈序转过身,目光在她脸上停了一瞬,然后移向旁边的椅子。椅子这次被拉得更开一些,位置也更靠外,像是特意给她留的空间。

“坐。”他说。

许知然坐下。这次的距离比上次更近,她落座时,手肘差点碰到他的手臂。她下意识往旁边让了让,却发现椅子已经到了边缘,再挪就要出去了。

陈序没看她,目光落在她的手机上:“开始吧。”

许知然点开App,按步骤操作。第一次,正常。第二次,正常。第三次,还是正常。

她听见旁边键盘敲击的声音,余光看见陈序正在盯着屏幕上的实时日志。密密麻麻的代码行快速滚动,她完全看不懂,但他看得很专注。

“继续。”他说。

许知然继续操作。第四次,第五次,第六次。她的肩膀偶尔会碰到他的手臂,每一次碰触都能感觉到他身体微微的僵硬。第七次时,她闻到了一股淡淡的洗衣液味道,很清爽,混着他身上原本就有的、属于代码和键盘的气息。

然后她发现,他敲键盘的节奏乱了。

不是那种明显的停顿,而是手指在空中多停留了零点几秒。如果不是她正用余光关注着他,根本不会注意到。

第八次操作,屏幕一闪,空白页出现了。

“停。”陈序的声音比平时快了一拍,“就这个路径,别动。”

许知然保持着手握手机的姿势,侧头看他。陈序盯着屏幕上的日志,眉头微微皱起,手指快速敲击键盘,一串串命令输入进去。

大概两分钟后,他松开眉头,靠进椅背里。

“找到了。”他说,语气里有一丝极淡的放松,“并发冲突。购物车的状态更新和结算请求几乎同时发出,后端接收到了两次请求,但缓存里的商品数据还没刷新。极短的时间窗口,难怪复现率低。”

许知然凑过去看他的屏幕,上面是她完全看不懂的代码和日志。但她的注意力不在那些字符上,而在他的侧脸。他认真工作的时候,嘴唇会微微抿着,睫毛在屏幕光线下投下一小片阴影。

“能修吗?”她问。

陈序点头,已经开始敲代码。许知然没有离开,就安静地坐在旁边看。她看不懂他在写什么,但能看出他敲键盘的动作很快,几乎没有停顿,像是在说话一样流畅。

工位周围突然安静下来。许知然这才注意到,刚才那些窸窸窣窣的键盘声、同事交流声,不知道什么时候变小了。何照在不远处假装盯着自己的屏幕,但余光分明往这边瞟。

她收回目光,继续看陈序写代码。

大概五分钟后,她突然开口:“你代码写得真干净。”

陈序的手指在空中顿住。

那个停顿很明显,明显到连不远处假装专注的何照都抬起了头。

许知然看着陈序的耳朵,从耳垂开始,一点一点染上红色。那红色蔓延得很慢,但很坚决,最后连耳廓都透着淡淡的粉。

他没抬头,声音压得很低:“还好。”

然后他继续敲代码,但速度明显慢了,像是每个字符都需要多思考一秒。许知然看着他的耳尖,嘴角忍不住弯了一下。

代码写完,陈序点击保存,然后打开模拟器测试。第一次,正常。第二次,正常。连续十次,全部正常。

“修好了。”他说,目光依然盯着屏幕,“我再加个注释,以后这种并发问题可以提前规避。”

许知然站起身:“谢谢陈工,那我先回去了。”

陈序嗯了一声,还是没看她。

许知然转身离开,走出几步后,她回头看了一眼。陈序正对着屏幕,但手指没动,像是盯着某个地方在发呆。何照已经凑到他旁边,嘴巴一张一合在说什么。

她听不见内容,但看见陈序的耳朵又红了一点。

回到工位,许知然刚坐下,苏桐就探过头来。

“去了这么久?”苏桐的语气意味深长,“一个bug复现要四十分钟?”

许知然面不改色:“bug复杂。”

“是吗?”苏桐拖长了尾音,“那你怎么脸红了?”

“谁脸红了。”许知然端起杯子喝水。

苏桐笑了一声,没再追问,但那个笑容让许知然觉得自己被看穿了什么。

她放下杯子,目光落在电脑屏幕上。bug系统里,那个1007号bug的状态已经变成了“已修复”,处理附言里写着:并发问题已处理,后续会优化相关逻辑。

很简单的一句话,和所有修复bug的附言没什么两样。

但许知然盯着它看了很久。

对面开发组的方向,何照正趴在陈序工位旁边。

“陈哥,”他压低声音,语气贱兮兮的,“你觉得许老师怎么样?”

陈序盯着屏幕,手指放在键盘上,半天没动。

何照等了几秒,又问一遍:“问你呢,许知然怎么样?”

陈序开口,声音很平:“她提的bug质量很高。”

何照翻了个白眼。

“谁问bug质量了,”他小声嘀咕,音量刚好能让陈序听见,“我问的是人怎么样。”

陈序没回答。

但那天下午,何照注意到一件事:陈序盯着bug列表发呆的时间,比平时长了至少十分钟。列表上都是已修复的bug,其中五个处理人写的是同一个名字。

许知然。

何照收回目光,默默在心里给自己记了一笔:今晚群里直播素材有了。

许知然盯着手机屏幕,怀疑自己眼花了。

一秒前还在刷购物页面,下一秒屏幕就黑了,然后弹出苹果的崩溃报告界面。她等手机重启,打开App,想复现刚才的操作——同样的页面,同样的步骤,一切正常。

她又试了三次,还是正常。

许知然放下手机,盯着天花板想了想,然后拿起手机,在bug系统上敲下一行字。

【bug编号】1015

【严重级别】P0

【bug描述】App偶发性闪退,无法稳定复现

【复现步骤】无稳定复现路径。事发时正在浏览购物页面,突然闪退。重启后尝试相同操作,未再次出现。

【设备信息】iPhone 14 Pro,iOS 16.3.1,星辰App版本3.2.1

【附件】崩溃日志截图

她犹豫了几秒,还是点了提交。

处理人默认分配:后端开发组,陈序。

三分钟后,开发组群里开始有人说话。

“P0级闪退?无法复现?这怎么修?”

“是不是她手机问题?这种bug也提?”

“许知然?上周提字体那个?她最近bug挺多啊。”

何照看着群消息,又看了看旁边盯着屏幕沉默的陈序,凑过去:“陈哥,这种bug直接驳回就行。没有复现步骤,日志也只有崩溃报告,咱们查不了。”

陈序没说话,目光落在bug标题上。

偶发性闪退,仅在她的设备上出现一次,无法稳定复现。

他点开那个崩溃日志截图,放大,一行一行看过去。何照在旁边等了几秒,见他没反应,又问了一遍:“陈哥?”

陈序终于开口:“先放着。”

何照愣了:“放着?这种bug放两天就得被问进度,到时候更麻烦。”

陈序没理他,继续盯着屏幕。

何照识趣地闭嘴,但目光在陈序和那个bug标题之间来回转了两圈,嘴角慢慢浮起一个意味不明的笑。

中午,许知然收到一条私聊消息。

陈序:手机能借我半天吗?我装个监控日志跑一下。

< 上一章 目录 下一章 >
×
宿山行
连载中帝谛 /