拨云见日 第3节(2/3)
作品:《拨云见日》
bug。他看着乔云,叹了口气,拍了拍对方的肩,“没事儿,就是……”想到乔云上个礼拜后半经常趴在桌上的样子,又补充了一句“就是你好像病刚好,又要加班了。”然后他看到乔云眼中迅速闪过的差点被忽略了的一丝感激与感动。
“嗯,我先去整理下关于这次bug的报告和log。谢谢。”乔云说完便转过身去对着电脑,最后那句谢谢有些若有似无。
但是穆林森听到了,删了生活必备动作片周末过得特别寂寥和憋屈的穆林森,豁然开朗,用繁忙的工作来解压与疗伤未尝不是一件好事,更何况搭档还是乔云。
打开电脑屏幕,果不其然八卦天王杨刚发了条飞鸽过来。
“怎么了?老板叫过去好像不是什么好事吧?”
“嗯,会计出大bug了。”
“那怎么办?”
“能怎么办,加班呗,限期48小时内。”
“你最近印堂发黑。”
“黑妹!干活去了!”
“注意身体。”
靠!!!杨刚你大爷的,你是故意的吗?哥最近就是身体机能欠佳啊!你丫故意刺激我的么嗷嗷嗷!!——好久没咆哮的穆林森内心的小人经过一阵宣泄,穆林森精神抖擞地打开了会计项目文件夹。
作者有话要说:我发现每次比标题还坑爹的是我的内容提要(???ゝ?)?
☆、bug不是你想跳想跳就能跳
穆林森打开了会计项目的文件夹,配置好文件,装上了项目结束后便卸载了的客户端,打开了刚才截图中的那个界面,开始发泄般的一阵猛点。
从第一个控件开始从上点到下,一切正常。从下回跳到上,依旧正常。隔着跳对着跳点兵点将跳摩尔运动跳,横跳竖跳变着法子的瞎跳,bug就是没出来,程序一切正常,写进数据库的数据也非常正常。穆林森迷茫了,回头看了一眼临桌,乔云正打开俞正和刚转发来的客户暴怒告状邮件with罪证。
穆里森别过头看着乔云打开修正点管理文档,迅速地将客户邮件内容剔除了发怒部分,整理成了简短的客户要求,预留出给穆林森填修正内容的空间。然后打开项目进度控制表,在顺排第283位记录上了这次bug修正,期限上填写上了4月25日0点,并在期限上标了血红。最后转而去下载客户的log文件。
穆林森偷偷看着乔云行云流水般的操作,反观自己刚刚如同乌龟啃大麦似的抓瞎,简直天壤之别。穆林森原本焦躁的情绪忽然在惭愧中平静下来,然后又从心角落里生出一丝庆幸与安心,仿佛有乔云在,一切都能拨云见日。平静下来的穆林森也打开了邮箱,点开老板转发的客户邮件,绕过客户的发怒内容,直接下载了log文件并打开了它。
由于客户把将近一天的运行log都打包过来了,整个log文件将近10m,加上刚才穆林森又一时心急打开了项目工程,于是穆林森的电脑华丽丽的卡死了。卡死期间不能雪上加霜,空等又觉得时间虚度,于是穆林森又回头看向了临桌,总是忍不住偷偷看临桌的行为让穆林森怀念起小学初中时的自己偷偷从背后45度角看暗恋女生的少年情怀。“唉……”暗自叹了口气,穆林森觉得自己越活越回去了。回过头又顾上自己电脑的穆林森,余光中好像扫到乔云左手撑了下额头,穆林森心中笃定乔云一定又皱上眉头了。
全文档搜索errorlog,很快便找到了出bug的地方,根据穆林森的经验,应该是光标在离开某控件作判断的时候,判断flag出现了不必要的赋值,导致数值型出现了错误。表面上看log,这真是个应该在单体测试时候便被发现解决完全不该留到连接测试的大bug,真是阴沟里翻船。可是穆林森知道这部单体程序的复杂程度,为了满足客户的输入习惯和要求,硬生生把spread(制表插件)回车后只能往右移动的限制给打破了,定义了一个静态变量和一大堆的判断flag用来控制光标的走向,第一格回车向右第二格回车向下第三格回车回到上一行右最后一格回车后新建一行……整个程序代码如同曲线救国一般,庞大而且紊乱。穆林森当时笃定自己一定会从项目开始跟到项目结束,所以这个复杂的单体程序自单体开发开始到一遍一遍的修改都由穆林森亲力亲为,反正是写给自己看的也不会有其他人来改动,穆林森便懒了一懒也没有给代码上加很多的注释,所有判断flag的取名都和等差数列一般f1,f2,f3以此类推,后来又因为各种各样的修正等差数列中也有了断层。如今过了将近一个多月再捡起来看,特别是要检查一个事件十七八个flag中出错的到底是哪一个,简直如同大海捞针,况且现在根本不知道是怎样的契机才能点出那个bug。
哦漏!我当初给这些flag取名都该和葫芦娃一样才对啊啊啊啊!!——穆林森内心的小人悔不当初。
作者有话要说:=a=其实我还没想好那bug到底怎么跳出来。。。因为三年多木有编过码了tat所以也许我在对代码之类的描述上会出现bug。。。大家看到bug就当木有看到吧跪谢!
=================项目注释分割线===============
刚刚写了1000字的注释啊。框框死啦吞拉没拉!于是我现在就简单的写一下
穆林森与乔云参与的会计程序是一个客户端+服务器端的程序,前期准备工作不算在内(因为lz也木有做过项目经理所以对综合设计不懂),从开发开始分为程序架构(打地基),大规模单体开发(造房子),连接测试(看看房子门窗是不是都安对了),综合测试(看看房子水电煤是不是都通了),第一次交货(毛胚),交货后大规模对应(装修),最终交货(商品房),交货后质保(售后服务)这几个步骤,穆林森与乔云刚认识的时候是在交货后大规模修正阶段。然后现在就是到了售后阶段,因为售后阶段bug一般来说比较少,对应也不需要花太多人力,所以到这个阶段项目组一般就剩下一到两个人,其余人都进入别的项目进行开发。
=================名词解释分割线===============
bug:程序中的错误
error框:比姨妈红还要血腥的红色错误框,程序出大bug又没有被代码中设置好的小警察(catch)抓住的话,就会甩出个血腥大框框。
log:代码中埋下的打log代码,好比程序运行时的心电图,是给开发人员检查程序用的。
flag:就好比程序的某个地方安插了一个小警察,程序如果走到这个小警察面前了,小警察就看看它接下来该走哪条路,给它头上插面旗子(就是文中提到的赋值),到下一个分叉路口就按照头上那面旗子指示的路去走。
spread:当年我开发程序时候用到的最为棘手的插件,和excel一样是个表格插件,和excel一样,按回车光标只能向右跳(excel是回车过后光标向下跳),然后客户要求表格里两行一个单元,在这个单元里光标要从上到下再从左到右跳,也就是说客户规定了一条光标移动的线路,而表格插件不允许,这个时候就要程序代码作出判断,那个判断就是靠上面所提到的flag小旗子来实现的。
注释暂时那么多tat不知道大家能不能看懂。
☆、危情24小时
所谓吃一堑长一智,因为注释量不达十行一注释的标准而导致程序维护时期看到的代码一团混乱没有头绪,穆林森决定重新理一遍程序并勤恳地给紊乱的代码加上注释。在加注释加到头晕脑胀的时候,又如同疏解情绪般胡点程序,期盼画面上能跳出那个猩红猩红的error框。就这么循环往复的干着活儿,等到穆林森觉得腹中饥饿难忍抬起头来的时候,整个开发室,应该说整个公司就只剩下了他和临桌的乔云两人,穆林森才留意到右下角的系统时间已经是晚上十点半左右。
穆林森又偷偷回转身去看了一眼乔云,见他左手扶着额头,右手一会儿用鼠标点点程序,一会儿又切换成回车进行控件间的光标移动,等界面上完成一整套输入动作后,他便切换至数据库刷一遍刚输入的数据,对比过后调出一个excel表单,在某项测试case后打了个勾。穆林森发现那个测试case表单是乔云做的鼠标点击与回车搭配输入排列组合表,刚才乔云打勾的case已经是这个表单的第35个case,但是表单旁边的滚动条还处在四分之一处,穆林森知道乔云也是看了log之后发现flag赋值的问题,比起自己一心依仗天眷顾的瞎点,他采用了排查的方式来寻找出错的契机。
穆林森心中五体投地与感恩戴德之情搅合在一起,似乎加快了胃动力,他的肚子打破了开发室的安静,幽幽的叫了一声。穆林森没想到乔云会仿佛回过神来般突然回过头来,对上乔云的眼时,他好像偷窥被抓现行那般尴尬无比。
“呃,饿了么?”穆林森下意识地避开了乔云的目光,假装寻找钱包。
“嗯……还好。”
“我去公司楼下的全家买点吃的上来。”穆林森逃避般的拽着钱包急急起身,抬眼间又看到了乔云电脑屏幕里那张长长的case表,“你把case邮我一份,我从最后那个往前查,我们一起查能快点。”说完便转身向门口走去。
“嗯,好!”已经快拐出门口的穆林森没有看到乔云的嘴角浅笑。
人间四月天的深更半夜还是有些微凉,穆林森刚才一时逃的急,忘记给自己裹上外套,刚踏出公司所在的办公大楼,冷风搜搜地无孔不入,他忍不住一连打了好几个喷嚏。
脑子被接连的喷嚏弄得有些缺氧的穆林森,一边靠着本能抱着胸哆嗦着走向全家,一边想着乔云今天一天给自己带来的踏实与感动,就这么一个对项目理解度极高,做事又一丝不苟的人怎么就会走上“卖肉”的道路呢?想到这里,穆林森脑中又若隐若现《职场初恋》的片段,神情恍惚中穆林森走进了全家,无视店员的“欢迎光临”径直走向便当和饭团柜台,伸手一扫而空,在结账等待便当与饭团加热时,又噌噌噌从热饮柜里把咖啡与咖啡型饮料一扫而空,当他抱着一堆粮食又回到冷风中的时候,才从炽热的回想中回过神来。真是见鬼了,穆林森晃了晃脑袋,迅速从冷风中窜回了办公大楼窜上了公司。
用身体顶开开发室大门的穆林森,被眼前一幕惊地目瞪口呆,差点把手中抱着的食物直接喂给了地面。
作者有话要说:狗血天天有。。。
☆、情不自禁
顶开开发室大门的穆林森看到乔云正弯着纤腰撅着屁股背对着他,一手撑着办公桌面,另一只手向前不知在摆弄些什么,他那个角度看不出个究竟,但是这活生生的《职场初恋》单人场景,让穆林森的饥饿症状一下从胃窜上了脑门。
刚刚甩在冷风中的一丝丝臆念又随着开发室内的暖意回归,牵引着穆林森抱着食物呆愣呆愣地走向乔云身后,站定,把加热过又抱在怀中保暖了一路的热烘烘的食物放在了乔云撅起的屁股上。
“啊!”乔云被这突如其来的“偷袭”惊吓到,仅仅靠单手支撑着的前身失去了平衡,倾斜向右边,一直到一听咖啡啪唧滚落地上,穆林森才从粉红冒泡的脑内状态恢复正常,手忙脚乱地抱住还未来得及滑到地面上的食物们,避开正在努力维持身体平衡的乔云探来的疑惑的目光,把食物转移到了自己的办公桌上。
穆林森内心的小人焦急地为刚在的异常举动寻找着理由,内外温差太大脑髓瞬间融化?对不起我把你白衣黑裤衬托下的平整腰线看成办公桌了!?对不起想给你晚餐一时没拿住摔你撅起的屁股上了!!?……nonono……穆林森为自己的一时意乱情迷纠结了忧伤了难以自拔了……忽然手臂处传来温温的金属触感,穆林森难堪的回过头,对上乔云坦荡的视线,视线下移,原来乔云是捡起了刚才滚落地上的咖啡碰了下自己的手臂。
“给……掉地上了。”乔云见穆林森呆滞着没有接过咖啡,便伸手把咖啡放在了他桌上,而穆林森的肚子又在此刻幽幽地叫了一声。
穆林森第一次这么庆幸与感激这安静环境中自己肚子的一声吼,掩盖尴尬的最好方式便是制造另一个尴尬,穆林森扯开嘴皮尴尬一笑,对着乔云说:“饿了吧,先补充点再干活。”完全把刚才的尴尬给抛了开去。
“嗯,好。”乔云也用一抹微笑掩饰了尴尬,拖过凳子坐在了穆林森身旁。穆林森把刚才混乱中放下的食物们稍微整了整往乔云面前推了推,然后挑了盒便当便闷头啃了起来,啃饭间隙间开了一听咖啡咕咚咕咚喝两口。乔云也不再客气,确实一天的脑力劳动与精神消耗,在看到食物的那刻他也确实感觉到饥肠辘辘,于是挑了几个饭团就着奶咖吃了起来。
吃完后,穆林森把桌上还剩下的咖啡与食物放在了两桌中间,便于一会儿睡虫袭脑时提神之用,然后拿了个垃圾袋开始收拾桌上的残局。手中麻利地收拾着,脑中却又开始了小遐想,回过头去看了眼临桌,发现乔云又恢复到了他进门时的那个姿势,这次他看清乔云是在摆弄显示器后面的连接线。
“怎么了?”
乔云停下手上的动作回头道:“刚才看着看着表单觉得屏幕有些色偏,我想大概是连接线松了。”说完又继续刚才那个姿势拨弄着连接线。
觉得乔云那个纤腰翘臀实在太挑战自己的理智,穆林森把手中的垃圾袋丢进了身旁的垃圾桶,抬脚走到了乔云身旁。
乔云只觉得自己右边的光线忽然被一个高大的身影遮住,然后有一只资深鼠标手朝自己伸了过来……
作者有话要说:=△=感情戏弱项tat1000多点儿的字憋了我一个上午
☆、出bug的不仅仅是程序
“我来吧。”穆林森伸手捏住了连接线,乔云慢慢从显示器与办公桌挡板之间的缝隙间抽回手,不经意地碰到了穆林森,穆林森下意识地在那手退开前就避开了,又急忙掩饰般地将手往里伸向了连接线插口位置,稍弯下腰开始摸索起来。
因为电脑已经有些旧,连接线连接屏幕的插口位置已经被灰封住了,虽然之前乔云已经用纸巾擦过,但也许因为背光老化的问题,要松动或者旋紧都有些困难,穆林森想怪不得乔云摸索了半天旋不开,自己粗手粗脚地也旋得很费劲,磕磕碰碰地总算是帮乔云调整好了屏幕。
“好了。”终于不用再对着那身姿想入非非了,“干活吧。”穆林森对着乔云笑了笑,便回到自己座位上。新邮件提示有封来自乔云的邮件,打开一看是刚刚自己下去寻食前拜托乔云发的测试case表,在乔云的一声“谢谢”中,穆林森抖擞了精神开始下半夜的加班。
深夜两三点,瞌睡虫已经绕着穆林森的脑袋360旋舞了几周,穆林森面前桌上也堆了好几个空咖啡罐,手中的case表却只解决掉了四分之一,按照这个速度加上乔云的战斗力,点完所有case可以直接迎接早晨老板的巡查。而且越点穆林森就越灰心,他一边想快点点完所有case完成任务,一边又怕case全部点完bug缺还没跳出来,如果是这样他该
拨云见日 第3节(2/3),点击下一页继续阅读。