你為什么不敢重構(gòu)代碼?

源 /頂級(jí)程序員 文/ 黑石
一、你為什么不敢發(fā)代碼?
通過(guò)代碼還原當(dāng)時(shí)完整的產(chǎn)品邏輯太難了



沒(méi)有自測(cè)用例
沒(méi)有測(cè)試同學(xué)跟進(jìn)
沒(méi)有穩(wěn)定發(fā)布方案
時(shí)間回到年初你剛剛接到重構(gòu)任務(wù)的時(shí)候。
二、尋求組織保障
三、劃分重構(gòu)頁(yè)面優(yōu)先級(jí)

復(fù)雜高頻頁(yè)面:重兵壓上,細(xì)致還原原始需求,摳代碼,拉測(cè)試同學(xué)一起整理測(cè)試用例,按照測(cè)試用例自測(cè),測(cè)試同學(xué)回歸所有功能。但其實(shí)這部分頁(yè)面中,也可以分為兩種頁(yè)面: 編輯頁(yè)面:這樣的頁(yè)面是風(fēng)險(xiǎn)最高的頁(yè)面,一旦因?yàn)楹蠖私涌跊](méi)有做完整的數(shù)據(jù)校驗(yàn),就會(huì)編輯出臟數(shù)據(jù),或者錯(cuò)誤的數(shù)據(jù)被保存,導(dǎo)致線上運(yùn)行異常,這種后果將是不堪設(shè)想的,即使非常短的時(shí)間內(nèi)回滾,也會(huì)造成難以挽回的故障,因此必須要像新需求一樣測(cè)試到位。 展示頁(yè)面:這樣的頁(yè)面不會(huì)影響運(yùn)行時(shí),不會(huì)產(chǎn)生臟數(shù)據(jù),是風(fēng)險(xiǎn)相對(duì)低一點(diǎn)點(diǎn)的頁(yè)面,本著不麻煩合作方的原則,畢竟資源有限,可以讓測(cè)試幫你出完整的用例,然后你自己自測(cè),或者多找?guī)讉€(gè)同學(xué)幫你自測(cè)。 高頻簡(jiǎn)單頁(yè)面:自測(cè),當(dāng)然最好是能綁架幾個(gè)經(jīng)常用這個(gè)功能的開發(fā),來(lái)幫你點(diǎn)點(diǎn),但是自己測(cè)總是會(huì)有可能會(huì)有遺漏,因此就需要下面的步驟來(lái)保證了。 低頻運(yùn)維頁(yè)面:選擇性重構(gòu),因?yàn)楹芏囗?yè)面基本上不會(huì)有迭代,且使用頻率較低,基本上不需要重構(gòu),即使是有新的需求,也可以在做新需求的時(shí)候順便重構(gòu)下,以為并不能占用太多時(shí)間。

四、單測(cè)
當(dāng)下的收益不高。 相比后端接口的單測(cè),前端單測(cè)寫起來(lái)相對(duì)復(fù)雜。 前端更多是面向 UI 的編程,但 UI 變動(dòng)大,難以使用 TDD (測(cè)試驅(qū)動(dòng)開發(fā)) 的開發(fā)模式。 沒(méi)有寫單測(cè)的習(xí)慣,可能是因?yàn)閱螠y(cè)增加了工作量,且沒(méi)有寫純函數(shù)的意識(shí),不利于測(cè)試。 單測(cè)的工具難學(xué)又難用。


describe('utils', () => {
it('流程圖:轉(zhuǎn)換為提交的數(shù)據(jù) transformForm', () => {
const result = transformForm(canvasData);
expect(result).toEqual(settingData);
});
it('流程圖:轉(zhuǎn)換為需要的數(shù)據(jù) parseRuleSetData', () => {
const [result] = parseRuleSetData(settingData, rules);
expect(result).toEqual(canvasData);
});
it('流程圖:反復(fù)轉(zhuǎn)換 transformForm - parseRuleSetData', () => {
const [result] = parseRuleSetData(visualSettings, rulesData);
const newResult = transformForm(result);
expect(newResult).toEqual(visualSettings);
});
});
復(fù)制代碼
五、測(cè)試用例
六、自測(cè)
七、回歸測(cè)試
八、灰度發(fā)布
配置用戶或者用戶組 配置老路由和新路由 配置灰度狀態(tài)提示 新老頁(yè)面的自動(dòng)打點(diǎn)


L1:所有項(xiàng)目開發(fā),測(cè)試,設(shè)計(jì)師,內(nèi)部運(yùn)營(yíng)人員 L2:核心用戶,建立釘釘群,觀察用戶反饋,及時(shí)解決用戶問(wèn)題。 L3:適當(dāng)加入更多用戶,直到全量后,刪除灰度策略的配置。

九、全量上線
十、總結(jié)
Double Check:讓其他人參與進(jìn)來(lái),多一個(gè)人就能幫你發(fā)現(xiàn)更多問(wèn)題。重構(gòu)面前,不要相信自己,相信伙伴。 邏輯無(wú)死角:不要還有不懂的代碼,不清楚的邏輯,按照程序員的第六感,不確定的都會(huì)出大問(wèn)題。 集中注意力:重構(gòu)不能碎片化進(jìn)行,要集中大塊時(shí)間來(lái)做,并一做到底,不然過(guò)個(gè)幾天,你自己的代碼都會(huì)不認(rèn)識(shí)。 一跟到底:開發(fā)完成不是重點(diǎn),全量上線,并下掉老的頁(yè)面才是結(jié)束。

好文推薦

因故意引入漏洞,整所大學(xué)被禁止為L(zhǎng)inux內(nèi)核做貢獻(xiàn),回應(yīng)來(lái)了!

今天,我的電腦被勒索了,嘿嘿嘿!

好家伙!30% 國(guó)外程序員每天“摸魚”四五個(gè)小時(shí),國(guó)內(nèi)似乎更嚴(yán)重…
— 完 —
一鍵三連「分享」、「點(diǎn)贊」和「在看」
技術(shù)干貨與你天天見~
評(píng)論
圖片
表情
