加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

代码重构!你敢吗?

发布时间:2019-04-04 01:35:19 所属栏目:移动互联 来源:大飞码字
导读:本日报告一个代码重构的经验。 2014年,我从基本架构部分,转调到营业部分。技能认真人想让我搞定营业体系的不变性题目。 其时的营业体系确实存在不少题目,不外我初来乍到,对整系一切不认识,就想在认识一段时刻后再下手。没想到,后头是工作本身找上了
副问题[/!--empirenews.page--]

本日报告一个代码重构的经验。

2014年,我从基本架构部分,转调到营业部分。技能认真人想让我搞定营业体系的不变性题目。

其时的营业体系确实存在不少题目,不外我初来乍到,对整系一切不认识,就想在认识一段时刻后再下手。没想到,后头是工作本身找上了门。

那是一个周六的早上,我其时不在广州,而是去了深圳,去一个同窗家。其时跟我同窗聊的纵情,就一向没看手机,隔断了一个多小时后,我打开微信一开,事变群里有几百个未读。看到我们技能认真人的头像一向在闪动,就意识到应该是出大题目了。

代码重构!你敢吗?

原本,是一个焦点的营业体系出了一个bug, 影响到了一个重要的商户。

他们本意是给一个用户推送一条特定动静,动静内里还包括了一些隐私信息。不巧,一个新来的同窗由于一个新的需求,修改了那部门的代码,引入了一个bug , 导致原来是发个一个特定用户的信息,发给了一堆人。

商户相等不满,其后是部分的公关出头,才将工作平息下来,司理何处也由于这个工作,拉我们到办公室批了一顿。

技能认真人也压力山大。我们几小我私人,在集会会议室里接头了好久,最后各人都认为假如要较量好的杜绝此类的题目,除了要增强各类测试等法子外,尚有一个,就是要重构现有的代码。

由于这个体系是最焦点的营业体系之一,并且几经易手,其时的代码已经变得极难维护,内里各类if else 的分支,尚有长达一千行一个的函数,注释不全,文档也不敷,要想恒久的维护下去,这个技能债长短送还不行了。

各人面面相觑,固然知道重构是最好的办理方案,但各人都不想搞呀。

其后,我思量到,初来这里照旧要做些工作才气获得各人承认的,就硬着头皮,把重构的这个使命给接了下来。

确定重构的范畴

接下这个使命后,我和项目组的成员就开始说明这个体系。

发明这个体系的营业流程很长,涉及到几十个子体系(微处事),还依靠几个外部分的处事。假如所有重构下来,预计一年都做不完,并且风险极大,重构一年的体系,然后再上线,谁敢呀,并且到当时,说不定黄花菜都凉了。

认为这样必定不可。

我们就从头梳理了一遍,把整个体系分别成了三个部门,我们发明中间部门的修改最频仍,出题目的频率也最大,就抉择先重构中间流程部门的代码。

项目筹划部门,我们对项目举办了分期,中间部门的重构作为第一期,其他两部门可以作为二期,三期项目来做。一个是可以极大地镌汰压力,使得的工作越发轻易掌握,另一个是隔断一段时刻有产出也能给团队带来信念。

计划好验证的方法

当确认好重构的范畴后,接下来的工作,就是要思量怎样来验证重构后的代码了。

这个是重构代码最重要的一个部门,假如没步伐验证重构代码的正确性,你是不敢上线的,就算硬上了,也会睡欠好觉。

一样平常重构代码的验证,可以回收测试代码,测试用例包围的要领。(这部门可以参考 《重构》)。但我们发明,我们要重构的这个部门,不能回收这种方法来验证。

由于营业逻辑很伟大,并且涉及到太多的外围体系,一个是测试用例很难包围全面,其它一个是没有步伐可以很好的断绝外部体系的依靠。

我们说明白整个体系,发明这个体系的成果是,接管商户过来一个哀求,然后举办各类权限,脚色等的判定,再按照各个参数去各个依靠体系拉取数据,最后组装出一个新的包,再把这个新的包发送到隔邻部分的下流体系。

其后,我们想了双流程验证的方案。

我们将重构部门的代码,所有封装起来,然后提供一个新的接口,一个哀求进来后,我们别离执行旧的营业逻辑,也将哀求发给新接口。在流程的最后,我们将新旧流程结构出的字段,举办逐个字段的比拟。新流程只验证正确性,不做现实的输出。

为了担保验证的结果,验证要在线长举办,以是还要再团结后头的灰度流程。

尽统统全力,搞清重构代码的逻辑

当我们确定好验证方法后,接下来就是正式的事变了,重构代码。重写代码自己是不难的,但碰着的贫困是,险些没有文档,,注释也很少,通过看代码只是搞懂了百分之五十阁下的逻辑,尚有一大部门的逻辑,无法理清晰。

其后,我们想到一个步伐,把代码版本打点体系的log 所有拉出来。通过log我们找到了各部门逻辑不清楚的代码的认真人,然后一个一个的去跟他们聊,跟他们求教。命运好的是,大部门的职员都还在,中间还跟产物司理聊了不少,终于,把整个的逻辑搞懂了百分之九十几。

由于有了上面的双流程验证和下面灰度逻辑,我们认为,可以开始上线验证了。

灰度,必然要灰度

接下来,就要开始我们的灰度验证流程了。由于妨碍的影响很大,以是我们灰度的出格警惕。

我们内部有灰度体系,但内部体系的灰度粒度较量大,为了保险我们必要更小粒度的灰度,以是我们本身写了灰度的逻辑代码,直接嵌入到了体系内里。

一开始的时辰,十分警惕,险些是一个商户,一个商户灰度的。灰度完后,我们每隔断一段时刻,就说明一遍log和监控,看看有没有潜匿的题目。

最终,我们确其实这个灰度的进程中,发明白不少的题目,不外由于涉及的用户很少,都没有造成大的影响。

这种极小范畴的灰度,或许一连了一周阁下的时刻,后头逐步加速了灰度的速率。或许花了一个月的时刻,包围了所有的用户。

中间进程,险些没有呈现什么大的题目,可以说是较量乐成的一次重构。

节制好各方预期

最后一个点,跟技能无关,是关于相干职员的预期,包罗上级的预期,同级的预期,部属的预期。

我其时知道这个项目有难度,本身内心也没底,以是跟上级说去试一试,其后谈成可以在进程接管两次中等妨碍。虽然最后功效比预期好,没有一次中等妨碍,只有过两次小妨碍。

同级这块,也是跟各人说,极力去试试,不外确实不是很有掌握,也算是低落了他们的预期。

对付下面的兄弟,我是跟各人说,这是一件可以稳定我们团队职位的工作,搏命也要拿下这一仗。后头各人都很同心,一路完成了这个在其时看来挺难的一个使命。

这个计策,是我第一年岁情的时辰,我导师汇报我的,内紧外松。这样表面临你的预期是较量低,内部却很冒死的做,最后的功效,每每较量轻易超出各人的预期。

我认为这是一个很好的计策。

结语

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读