成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

代碼重構(gòu)!你敢嗎?

新聞
2014年,我從基礎(chǔ)架構(gòu)部門(mén),轉(zhuǎn)調(diào)到業(yè)務(wù)部門(mén)。技術(shù)負(fù)責(zé)人想讓我搞定業(yè)務(wù)系統(tǒng)的穩(wěn)定性問(wèn)題。當(dāng)時(shí)的業(yè)務(wù)系統(tǒng)確實(shí)存在不少問(wèn)題,不過(guò)我初來(lái)乍到,對(duì)整體系統(tǒng)不熟悉,就想在熟悉一段時(shí)間后再動(dòng)手。沒(méi)想到,后面是事情自己找上了門(mén)。

 今天講述一個(gè)代碼重構(gòu)的經(jīng)歷。

2014年,我從基礎(chǔ)架構(gòu)部門(mén),轉(zhuǎn)調(diào)到業(yè)務(wù)部門(mén)。技術(shù)負(fù)責(zé)人想讓我搞定業(yè)務(wù)系統(tǒng)的穩(wěn)定性問(wèn)題。

當(dāng)時(shí)的業(yè)務(wù)系統(tǒng)確實(shí)存在不少問(wèn)題,不過(guò)我初來(lái)乍到,對(duì)整體系統(tǒng)不熟悉,就想在熟悉一段時(shí)間后再動(dòng)手。沒(méi)想到,后面是事情自己找上了門(mén)。

那是一個(gè)周六的早上,我當(dāng)時(shí)不在廣州,而是去了深圳,去一個(gè)同學(xué)家。當(dāng)時(shí)跟我同學(xué)聊的盡興,就一直沒(méi)看手機(jī),間隔了一個(gè)多小時(shí)后,我打開(kāi)微信一開(kāi),工作群里有幾百個(gè)未讀。看到我們技術(shù)負(fù)責(zé)人的頭像一直在閃動(dòng),就意識(shí)到應(yīng)該是出大問(wèn)題了。

原來(lái),是一個(gè)核心的業(yè)務(wù)系統(tǒng)出了一個(gè)bug, 影響到了一個(gè)重要的商戶(hù)。

他們本意是給一個(gè)用戶(hù)推送一條特定消息,消息里面還包含了一些隱私信息。不巧,一個(gè)新來(lái)的同學(xué)因?yàn)橐粋€(gè)新的需求,修改了那部分的代碼,引入了一個(gè)bug , 導(dǎo)致本來(lái)是發(fā)個(gè)一個(gè)特定用戶(hù)的信息,發(fā)給了一堆人。

商戶(hù)相當(dāng)不滿(mǎn),后來(lái)是部門(mén)的公關(guān)出面,才將事情平息下來(lái),經(jīng)理那邊也因?yàn)檫@個(gè)事情,拉我們到辦公室批了一頓。

技術(shù)負(fù)責(zé)人也壓力山大。我們幾個(gè)人,在會(huì)議室里討論了很久,***大家都覺(jué)得如果要比較好的杜絕此類(lèi)的問(wèn)題,除了要加強(qiáng)各種測(cè)試等措施外,還有一個(gè),就是要重構(gòu)現(xiàn)有的代碼。

因?yàn)檫@個(gè)系統(tǒng)是最核心的業(yè)務(wù)系統(tǒng)之一,而且?guī)捉?jīng)易手,當(dāng)時(shí)的代碼已經(jīng)變得極難維護(hù),里面各種if else 的分支,還有長(zhǎng)達(dá)一千行一個(gè)的函數(shù),注釋不全,文檔也不足,要想長(zhǎng)期的維護(hù)下去,這個(gè)技術(shù)債是非償還不可了。

大家面面相覷,雖然知道重構(gòu)是***的解決方案,但大家都不想搞呀。

后來(lái),我考慮到,初來(lái)這里還是要做些事情才能得到大家認(rèn)可的,就硬著頭皮,把重構(gòu)的這個(gè)任務(wù)給接了下來(lái)。

確定重構(gòu)的范圍

接下這個(gè)任務(wù)后,我和項(xiàng)目組的成員就開(kāi)始分析這個(gè)系統(tǒng)。

發(fā)現(xiàn)這個(gè)系統(tǒng)的業(yè)務(wù)流程很長(zhǎng),涉及到幾十個(gè)子系統(tǒng)(微服務(wù)),還依賴(lài)幾個(gè)外部門(mén)的服務(wù)。如果全部重構(gòu)下來(lái),估計(jì)一年都做不完,而且風(fēng)險(xiǎn)極大,重構(gòu)一年的系統(tǒng),然后再上線(xiàn),誰(shuí)敢呀,而且到那時(shí),說(shuō)不定黃花菜都涼了。

覺(jué)得這樣肯定不行。

我們就重新梳理了一遍,把整個(gè)系統(tǒng)劃分成了三個(gè)部分,我們發(fā)現(xiàn)中間部分的修改最頻繁,出問(wèn)題的頻率也***,就決定先重構(gòu)中間流程部分的代碼。

項(xiàng)目規(guī)劃部分,我們對(duì)項(xiàng)目進(jìn)行了分期,中間部分的重構(gòu)作為***期,其他兩部分可以作為二期,三期項(xiàng)目來(lái)做。一個(gè)是可以極大地減少壓力,使得的事情更加容易把握,另一個(gè)是間隔一段時(shí)間有產(chǎn)出也能給團(tuán)隊(duì)帶來(lái)信心。

設(shè)計(jì)好驗(yàn)證的方式

當(dāng)確認(rèn)好重構(gòu)的范圍后,接下來(lái)的事情,就是要考慮如何來(lái)驗(yàn)證重構(gòu)后的代碼了。

這個(gè)是重構(gòu)代碼最重要的一個(gè)部分,如果沒(méi)辦法驗(yàn)證重構(gòu)代碼的正確性,你是不敢上線(xiàn)的,就算硬上了,也會(huì)睡不好覺(jué)。

一般重構(gòu)代碼的驗(yàn)證,可以采用測(cè)試代碼,測(cè)試用例覆蓋的方法。(這部分可以參考 《重構(gòu)》)。但我們發(fā)現(xiàn),我們要重構(gòu)的這個(gè)部分,不能采用這種方式來(lái)驗(yàn)證。

因?yàn)闃I(yè)務(wù)邏輯很復(fù)雜,而且涉及到太多的外圍系統(tǒng),一個(gè)是測(cè)試用例很難覆蓋全面,另外一個(gè)是沒(méi)有辦法可以很好的隔離外部系統(tǒng)的依賴(lài)。

我們分析了整個(gè)系統(tǒng),發(fā)現(xiàn)這個(gè)系統(tǒng)的功能是,接受商戶(hù)過(guò)來(lái)一個(gè)請(qǐng)求,然后進(jìn)行各種權(quán)限,角色等的判斷,再根據(jù)各個(gè)參數(shù)去各個(gè)依賴(lài)系統(tǒng)拉取數(shù)據(jù),***組裝出一個(gè)新的包,再把這個(gè)新的包發(fā)送到隔壁部門(mén)的下游系統(tǒng)。

后來(lái),我們想了雙流程驗(yàn)證的方案。

我們將重構(gòu)部分的代碼,全部封裝起來(lái),然后提供一個(gè)新的接口,一個(gè)請(qǐng)求進(jìn)來(lái)后,我們分別執(zhí)行舊的業(yè)務(wù)邏輯,也將請(qǐng)求發(fā)給新接口。在流程的***,我們將新舊流程構(gòu)造出的字段,進(jìn)行逐個(gè)字段的對(duì)比。新流程只驗(yàn)證正確性,不做實(shí)際的輸出。

為了保證驗(yàn)證的效果,驗(yàn)證要在線(xiàn)上進(jìn)行,所以還要再結(jié)合后面的灰度流程。

盡一切努力,搞清重構(gòu)代碼的邏輯

當(dāng)我們確定好驗(yàn)證方式后,接下來(lái)就是正式的工作了,重構(gòu)代碼。重寫(xiě)代碼本身是不難的,但遇到的麻煩是,幾乎沒(méi)有文檔,注釋也很少,通過(guò)看代碼只是搞懂了百分之五十左右的邏輯,還有一大部分的邏輯,無(wú)法理清楚。

后來(lái),我們想到一個(gè)辦法,把代碼版本管理系統(tǒng)的log 全部拉出來(lái)。通過(guò)log我們找到了各部分邏輯不清晰的代碼的負(fù)責(zé)人,然后一個(gè)一個(gè)的去跟他們聊,跟他們請(qǐng)教。運(yùn)氣好的是,大部分的人員都還在,中間還跟產(chǎn)品經(jīng)理聊了不少,終于,把整個(gè)的邏輯搞懂了百分之九十幾。

因?yàn)橛辛松厦娴碾p流程驗(yàn)證和下面灰度邏輯,我們覺(jué)得,可以開(kāi)始上線(xiàn)驗(yàn)證了。

灰度,一定要灰度

接下來(lái),就要開(kāi)始我們的灰度驗(yàn)證流程了。因?yàn)楣收系挠绊懞艽螅晕覀兓叶鹊奶貏e小心。

我們內(nèi)部有灰度系統(tǒng),但內(nèi)部系統(tǒng)的灰度粒度比較大,為了保險(xiǎn)我們需要更小粒度的灰度,所以我們自己寫(xiě)了灰度的邏輯代碼,直接嵌入到了系統(tǒng)里面。

一開(kāi)始的時(shí)候,極度小心,幾乎是一個(gè)商戶(hù),一個(gè)商戶(hù)灰度的。灰度完后,我們每間隔一段時(shí)間,就分析一遍log和監(jiān)控,看看有沒(méi)有隱藏的問(wèn)題。

最終,我們確實(shí)在這個(gè)灰度的過(guò)程中,發(fā)現(xiàn)了不少的問(wèn)題,不過(guò)因?yàn)樯婕暗挠脩?hù)很少,都沒(méi)有造成大的影響。

這種極小范圍的灰度,大概持續(xù)了一周左右的時(shí)間,后面慢慢加快了灰度的速度。大概花了一個(gè)月的時(shí)間,覆蓋了全部的用戶(hù)。

中間過(guò)程,幾乎沒(méi)有出現(xiàn)什么大的問(wèn)題,可以說(shuō)是比較成功的一次重構(gòu)。

控制好各方預(yù)期

***一個(gè)點(diǎn),跟技術(shù)無(wú)關(guān),是關(guān)于相關(guān)人員的預(yù)期,包括上級(jí)的預(yù)期,同級(jí)的預(yù)期,下屬的預(yù)期。

我當(dāng)時(shí)知道這個(gè)項(xiàng)目有難度,自己心里也沒(méi)底,所以跟上級(jí)說(shuō)去試一試,后來(lái)談成可以在過(guò)程接受兩次中等故障。當(dāng)然***結(jié)果比預(yù)期好,沒(méi)有一次中等故障,只有過(guò)兩次小故障。

同級(jí)這塊,也是跟大家說(shuō),盡力去試試,不過(guò)確實(shí)不是很有把握,也算是降低了他們的預(yù)期。

對(duì)于下面的兄弟,我是跟大家說(shuō),這是一件可以穩(wěn)固我們團(tuán)隊(duì)地位的事情,拼死也要拿下這一仗。后面大家都很齊心,一起完成了這個(gè)在當(dāng)時(shí)看來(lái)挺難的一個(gè)任務(wù)。

這個(gè)策略,是我***年工作的時(shí)候,我導(dǎo)師告訴我的,內(nèi)緊外松。這樣外面對(duì)你的預(yù)期是比較低,內(nèi)部卻很拼命的做,***的結(jié)果,往往比較容易超出大家的預(yù)期。

我覺(jué)得這是一個(gè)很好的策略。

結(jié)語(yǔ)

***,我們順利完成了這次的重構(gòu)任務(wù),也做出了我們?cè)谛聢F(tuán)隊(duì)的影響力。后面再來(lái)回顧,發(fā)現(xiàn)我們做對(duì)了不少的事情。沒(méi)有一上來(lái)就開(kāi)干,因?yàn)樾判牟蛔悖炊切⌒囊硪恚惨驗(yàn)樾判牟惶悖诓粩嗟慕档屯饨绲念A(yù)期,***一步一步,緊遵流程,獲得了不錯(cuò)的結(jié)果。

責(zé)任編輯:武曉燕 來(lái)源: 大飛碼字
相關(guān)推薦

2021-05-05 22:37:20

比特幣資產(chǎn)美元

2010-12-03 11:32:22

IT業(yè)

2013-07-19 10:27:00

2020-09-29 10:09:43

Python文字識(shí)別編程語(yǔ)言

2019-09-04 09:42:25

人工智能金融機(jī)器人

2018-05-08 15:33:38

機(jī)器人AI殯葬智能殯葬

2015-12-02 18:02:56

2015-08-11 09:39:25

重構(gòu)提高代碼質(zhì)量

2021-03-03 23:15:53

數(shù)據(jù)分析就業(yè)辭職

2013-11-08 10:21:13

2023-06-26 08:06:39

重構(gòu)代碼冗余

2014-06-19 11:30:48

天翼云

2018-05-03 15:46:04

微服務(wù)獨(dú)立交付

2021-03-03 07:28:58

ReviewAuthor代碼

2018-08-24 21:25:02

編程語(yǔ)言代碼重構(gòu)GitHub

2021-08-03 08:13:48

重構(gòu)API代碼

2012-07-27 10:30:12

重構(gòu)

2015-07-17 10:02:48

寫(xiě)代碼

2018-04-17 11:47:06

if代碼參數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美二三区 | 国产一级黄色网 | 狠狠亚洲| 亚洲欧美一区二区三区国产精品 | 中文字幕在线视频观看 | 久久精品这里精品 | 久色一区| 午夜精品久久 | 亚洲欧美精品 | 国产精品毛片久久久久久久 | 91av在线影院| 欧美一区二区三区四区视频 | 天天操天天射综合网 | 欧美一区 | 国产精品高清在线 | 成人黄色电影在线观看 | 国产高清精品在线 | 国产精品69毛片高清亚洲 | 中文字幕一区二区不卡 | 久久久女女女女999久久 | 先锋av资源在线 | 国产免费一区二区 | 黄色毛片免费视频 | 亚洲免费三区 | 久久av一区二区三区 | av一区二区在线观看 | 在线中文字幕第一页 | 国产精品国产馆在线真实露脸 | 色综合天天综合网国产成人网 | 精品久久九九 | 一区二区三区四区在线视频 | 91人人视频在线观看 | 日韩精品视频一区二区三区 | 成人免费黄视频 | 日韩电影一区 | 欧美一级欧美三级在线观看 | 九九热免费在线观看 | 欧美国产一区二区三区 | 国产精品毛片久久久久久 | 9久9久9久女女女九九九一九 | 亚洲综合一区二区三区 |