aj4,代码重构!你敢吗?| 技能头条,独坐敬亭山

作者 | 大飞

本文经授权转大飞码字

今日叙述一个代码重构的阅历。

2014年,aj4,代码重构!你敢吗?| 技能头条,独坐敬亭山我从根底架构部分,转调到事务部分。万门大学技aj4,代码重构!你敢吗?| 技能头条,独坐敬亭山术负责人想让我搞定事务体系的安稳性问题。

其时的事务体系的确存在不少问题,不过我初来乍到,谌安军对全体体系不了解,就想在了解一段时刻后再着手霰弹枪。没想到,后边是作业自己找上了门。

那是一个周六的早上,我其时不在广州,而是去了深圳,去一个同学家。其时跟我同学聊的尽兴,就一向没看手机,距离了一个多小时后,我翻开微信一开,工我的朋友很少作群里有几百个未读。看到四合院图片咱们技能负责人的头像一向在闪烁,就意识到应该是出大问题了。

本来,是一个中心的事务体系出了一个bug, 影响到了一个重要的商户。

他们原意是给一大日如来个用户推送一条特定音讯,音讯里边还包含了一些隐私信息。不巧,一个新来的同学由于一个新的需求,修正了那部分的代码,引入了一个bug , 导致本来是发个一个特定用户的信息,发给了一堆人。

商户适当不满,后来是部分的公关出头,才将作业停息下来,司理那儿也由于这个作业,拉咱们到办公室批了一顿。

技能负责人也压力山大。咱们几个人,在会议室里评论了好久,终究咱们都觉得假如要比较好的根绝pencil此类的问题,除了要加强各种测验等方法外,还有一个,便是要重构现有的代码。

由于这个体系是最中心的事务体系之一,并且几经转手,其时的代码现已变得极难保护,里边各种 if else 的分支,还有长达一千行一个的函数,注释月亮和六便士不全,文档也缺乏,要想长时刻的保护下去,这个技能债对错归还不可了。

咱们面面相觑,尽管知道重构是最好的解决计划,但咱们都不想搞呀。

后来,我考虑到,初来这儿仍是要做些作业才干得到咱们认可的,就硬着头皮,把重构的这个使命给接了下来。

承认重构的规模

接下这个任谁是卧底词语务后,我和项目组的成员就开端剖析这个体系。

发现这个体系的业aj4,代码重构!你敢吗?| 技能头条,独坐敬亭山务流程很长,触及到几十个子体系(微效劳),还依靠几个外部分的效劳。假如悉数重构下来,估量一年都做不完,并且危险极大,重构一年的体系,然后再上线,谁敢呀,并且到那时,说不定黄花菜都凉了。

觉得这样必定不可。

咱们就从头梳理了一遍,把整个体系区分成了三个部分,咱们发现中心部分的修正最频频,出问题的频率也最大,就决议先重构中心流程部分的代码。

项目规划部分,胃酸过多咱们对项目进行了分期,中Sao8080间部分的重构作为第一期,其他两部分能够作为二期,结尾三期项目来做。软件管家aj4,代码重构!你敢吗?| 技能头条,独坐敬亭山一个是能够极大地削减压力,使得的作业愈加简单掌握,另一个是距离一段时刻有产出也能给团队带来决心。

设计好验证的方法

当承认好重构的规模后,接下来的作业,便是要考虑如何来验证重构后的代码了。

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

一般重构代码的验证,能够选用测验代码,测验用例掩盖的方法。(这部分能够参阅 《重构》)。但咱们发现,咱们要重构的这个部分,不能选用这种方法来验证。

由于事务逻辑很杂乱,并且触及到太多的外围体系,一个是测验用例很难掩盖全面,别的一个是没有方法能够很好的阻隔外部体系艳妇孔菲的依靠。

咱们剖析了整个体系,发现这个体系的功用是,承受商户过来一个恳求,然后进行各种权限,人物等封神英雄榜第二部的判别,再依据各个参数去各个依靠体系拉取数据,终究组装出一个新的包,再把这个新的包发送到近邻部分的下流体系。

后来,咱们想了双流程验证的计划。

咱们将重构部分的代码,悉数封装起来,然后供给一个新的接口,一个恳求进来后,咱们别离履行旧的事务逻辑,也将恳求发给新接口。在流程的终究,咱们将新旧流程构造出的字段,进行逐一字段的比照。新流程只验证正确性,不做实践的输出。

为了确保验证的作用,验证要在线上进行,所以还要再结合后边的灰度流程。

尽悉数极力,搞清重构代码的逻辑

当咱们承认好验证方法后,接下来便是正式的作业了,重构代码。重写代码自身是不难的,但遇到的费事是,几乎没有文档,注释也很少,经过看代码仅仅搞懂了百分之五十左右的逻辑,还有一大部分的逻辑,无法理清楚。

后来,咱们想到一个方法,把代码版别办理体系的log 悉数拉出来。经过log咱们找到了各部分逻辑不明晰的代码的负责人,然后一个一个的去跟他们聊,跟他们讨教。命运好的是,大部分的人员都还在,中心还跟产品司理聊了不少,总算,把整个的逻辑搞懂了百分之九十几。

由于有了上面的双流程验证和下面灰度逻辑,咱们觉得,能够开端上线验证了。

灰度,一定要灰度

接下来,就要开端咱们的灰度验证流程了。由于毛病的影响很安室奈美惠大,所以咱们灰度的特别当心。

咱们内部有灰度体系,但内部体系的灰度粒aj4,代码重构!你敢吗?| 技能头条,独坐敬亭山度比较大,为了稳妥咱们需求更小粒度的灰度,所以咱们自己写了灰度的逻辑代码,直接嵌入到了体系里边。

一开端的时分,极度当心,几乎是一个商户,一个商户灰度的。灰度完后,咱们每距离一段时刻,就剖析一遍log和监控,看看有没有躲藏的问题。

终究,咱们的确在这个灰度的进程中,发现了不少的问题,不过由于触及的用户很少,都没有造成大的影响。

这种极小规模的灰度,大约继续了一周左右的时刻,后边渐渐加快了灰度的速度。大约花了一个月的时刻,掩盖了悉数的用户。

中心进程,几乎没有呈现什么大的问题,能够说是比较成功的一次重构。

操控好各方预期

终究一个点,跟技能无关,是关于相关人员aj4,代码重构!你敢吗?| 技能头条,独坐敬亭山的预期,包含上级的预王尼玛期,同级的预期,部属的预期。

我其时知道这个项目有难度,自己心里也没底,所以跟上级说去试一试,后来谈成能够在进程承受两次中等毛病。当然终究成果比预期好,没有一次中等毛病,只有过两次小毛病。

同级这块,也是跟咱们说,极力去试试,不过的确不是很有掌握,也算是下降了他们的预期。

关于下面的兄弟,我是跟咱们说,这是一件能够安定咱们团队位置的作业,拼死也要拿下这一仗。后边咱们都很训练组织同心,一同完成了这个在其时看来挺难的一个使命。

这个战略,是我第一年作业的时分,我导师告诉我的,内紧外松。这样外面临你的预期是比较低,内部却很拼命的aj4,代码重构!你敢吗?| 技能头条,独坐敬亭山做,终究的成果,往往比较简单超出咱们的预期。

我觉得这是一个很好的战略。

结语

终究,咱们顺利完成了这次的重构使命,也做出了咱们在新团队的影响力。后边再来回忆,发现咱们做对了不少的作业。没有一上来就开干,由于决心缺乏,反而是小早报网心翼翼,也由于决心不太足,在不断的下降外界的预期,终究一步一步,紧遵流程,获得了不错的成果。

作者:大飞。十年互联网人,资深架构师,技能leader。

声明:版权归作者一切,如需转载请联络原作者。