林晚荣兴奋至极,心脏砰砰直跳,几乎要跃出胸腔。
那个BUG,状态机切换时序问题,他前世也遇到了,但是当时初来乍到,完全不熟悉指纹,拖了三天之后,求助了SH研究所的一个同事,最后解决了问题。也正是因此,以为白菜价招到大神的铲车渐渐开始对他怀疑,五次三番的失败后终于耐心耗尽。重活一世,如今的他在程序猿的基本功上也许和前世没什么两样,但指纹这一块的业务逻辑至少已经吃得七七八八。这个问题有必现路径,也就是程序中必然会出现问题的那个场景;难点在于从纷繁的现象中找到这个路径,进而确认这个问题的原因。这个新手任务,可以说是十拿九稳了。
林晚荣连上手机USB,飞快的按照前世记忆中的必现路径操作着,设置指纹快捷支付,连续的黑屏解锁,然后指纹支付,再亮屏解锁……
果不其然,在一连串复杂而看似毫无逻辑可言的操作中,随着林晚荣最后一锤定音在power键上的一按,手机彻底黑屏,然后无论如何也无法再用指纹解锁了。
林晚荣轻车熟路的进行分析,然后给出解决方案,整个时间只花费了十分钟。
往任务完成度上一看,完成度已经达到了15%。
“不对不对,还缺了什么?前世,那个SH的同事最后就是给出了这个方案,新增了一个状态,解决了问题的。这个方案提出来,完成度怎么只有15%?”
林晚荣兴奋的心脏如同被打了一锤,一瞬间漏跳了两拍:“哦,对了,这个HAL层状态机的时序问题确实是存在的,但是问题的发起点来自KeyGuard的性能优化,导致接口调用不当……”
他仔细回忆着前世直到两个月之后才偶然被发现的另一处bug,事实证明,指纹这一块简直稀烂,到处都是篓子。他前世就是被密密麻麻的bug坑死了,如同趟地雷阵的步兵一般粉身碎骨。
飞速的敲打着键盘,将这个HAL层接口调用不当的问题修正过来,林晚荣又看了一眼,果不其然,完成度上涨了10%,达到25%。
“看来,发现了两处问题相关的漏洞,一处是10%的进度,还有5%,应该是先前必现路径的进度。”林晚荣暗忖道:“问题解决的流程,接下来还有代码评审,方案上库,回归验证。”
他想起前世的同事,某位大牛永哥,每次解决bug,都会输出一份详尽的案例。“不知道输出案例有没有完成度?随后完成宣讲培训,然后归档呢?这样算起来,60%的最低完成度应该是够了。”
既然及格线已经稳了,林晚荣的一颗心总算是平复了许多,看看时间,将将过去四十分钟。
“我前世觉得指纹这个模块,bug众多,根因在于KeyGuard关联太多,几个模块,LCD,power,KeyGuard,WM,policy,FIDO,设置,GateKeeper,DevicePolicy……犹如九省通衢。没有善用设计模式,Google原生代码良莠不齐,有众多的标记位,一旦进行性能优化,将串行改为并行,必然出现大量问题。”
林晚荣暗想:“前世的我发觉这一点,已经是一个月后;那时积重难返,直到我穿越回来,也是越改越多,防不胜防。我何不趁这个机会,向组长提议?首先,是可以实施的一些小修改,重构我们订制的KeyGuard代码,把全部订制的方法转移到子类;然后,并发过程中,注意消息阻塞,把Handler调用改为直接调用;然后,适当增加动画时间……这些小改动都治标不治本,最后,把KeyGuard的指纹处理机制改为状态机模式。”
林晚荣摇摇头,这些只能算是提议,他初来乍到,公司也不会允许他做出这样多的修改。甚至后世他看护指纹,也不得不学习了KeyGuard模块,他知道,KeyGuard的处理,最根本的痛处不在这些代码的写法,也不在那些参数,甚至不在于流程是串行还是并行,而是在于整个系统中不得不给它分配了一个特殊的地位。
它不是一个Activity,它是一个特殊的存在。
有特殊存在就代表着系统是混沌的,不可控的,琐碎的;维护者和开发者也许要花费十倍百倍的时间精力在这些特殊存在上面。
此外,对Android框架还算有所了解的林晚荣也知道,各个模块的耦合,是非常紧密的;原生还好,如果加上厂商自己定制的需求,耦合性和不可控性是非常强的。
不过这些不是此时的林晚荣能够去想的,毕竟Android乃是美国人的东西,国内的公司只能是拾人牙慧。
贸然在框架上动干戈,即使改对了,也过不了测试,拿不到资质;更加为下一个大版本的升级造成障碍。
但不妨碍他提点建议。
上午都在整理KeyGuard与指纹的内容,并联系power,display,乃至wm来分析了一下亮灭屏的整体架构,以及指纹到Kernel层子系统的粗略过程,这个HAL层状态机的问题已经彻底水落石出了。林晚荣有点自得,再细细检查一道,抄送全组,任谁也不会想到,这不是他一个上午的成果,而是前世他三个月加班加点,对这一块的认知。看任务进度,随着这份案例的输出,竟骤然上涨到50%。
林晚荣这才知道,问题解决环节中,案例的输出是何等重要,也许前世公司对此毫不在意,但系统对它的看重,甚至和之前整个问题的分析过程相当。——公司的立足点在于解决问题,而系统的立足点在于培养优秀的程序猿。
这份案例凝聚着林晚荣对这一块的全部认知,前世他虽然被种种问题难倒,但烂船三斤钉,何况还耳闻目睹不少小牛在这一块解过的bug案例,提前站在了高个的肩膀。这一世,会是他大展拳脚的开始。
组里很快传来惊叹声,铲车也大吃一惊,道:“不会吧,这个问题还是有点难的啊,之前让小超看了两天,也没看出来。我只是打算让你先熟悉下代码,然后分析看看,如果三天就解决了,就是非常好的结果了,怎么一上午就搞完了,还写了文档?你这个分析不会有问题吧?我看看,我靠,这都是Framework的啊,要不下午给我们讲下?”
林晚荣微微点头,他一上午到现在既没有上过厕所,也没有喝水,这时,嘴巴干涩,而且一股尿意压迫着前·列·腺,只待一泻千里。
几乎是数着秒到了下午,林晚荣强作蛋定,在会议室中,一组人的环绕下侃侃而谈。他结结巴巴,但是越说越流利,谈到了设计模式,谈到了锁屏,谈到了性能,谈到了鲁棒性……
前世他被太多糟糕的需求、粗枝大叶的实现、有意无意的漏洞折磨,这也令他对模块乃至对系统有了一定的了解,这些东西在心中发酵已久,不吐不快。
一众熟无可熟的面目环绕中,林晚荣百感交集。这些伙伴们是前世唯一没有鄙视他的人;因为大家都是一样的菜。前世他疲软无能,被肆意侮辱,却还有很多更菜的小伙伴在寻求他的帮助,对他的话奉为圭臬。
铲车坐在对面,看上去豪爽、霸气,面色有怀疑,也有期许,很难相信以后会因为那些疑难问题而对自己肆意侮辱,更一手将自己逼死在一条看不见尽头的加班之路。
四十分钟很快过去,大家发出惊叹,铲车终于露出欣赏、佩服,乃至捡到宝的表情。
林晚荣还记得前世那张豪爽的面孔所作出的一切尖酸刻薄的姿态;都说菜是程序猿的原罪,一个罪孽缠身之人,呼吸都是罪过。
今生,一切都不一样了。
铲车一副与有荣焉的表情,大力拍着林晚荣的肩膀,道:“可以了,我们四点钟到C座去参加评审会,你就把刚刚的分析再讲一遍,这个修改肯定能审过,好好讲,不要丢我的脸。厉害啊小子!”
林晚荣已完全镇定下来,这时微微一笑。
四点钟的评审会很成功,项目经理、测试经理们都露出佩服的表情。他们有的和前世的林晚荣吵过架,有的侮辱过林晚荣,还有的在林晚荣要求评审的时候拖了三天没有理他。一旦第一步得到了这些人的信任,这一次一定会有不同的结局。
这是一个完美的开始,林晚荣告诉自己。