本文分享一些技術(shù)改進(jìn)類項(xiàng)目(以下簡(jiǎn)稱“技改項(xiàng)目”)的質(zhì)量保障思路。
1. 技改項(xiàng)目的質(zhì)量挑戰(zhàn)
何為技改項(xiàng)目? 即目標(biāo)是服務(wù)于技術(shù)改進(jìn)或架構(gòu)升級(jí),而非服務(wù)于常規(guī)的業(yè)務(wù)功能更新。常見的技改項(xiàng)目有:大規(guī)模的前端重構(gòu)或后端重構(gòu)、技術(shù)架構(gòu)升級(jí)、數(shù)據(jù)庫(kù)拆分、數(shù)據(jù)遷移、系統(tǒng)上云和云遷移、非對(duì)客的支撐性項(xiàng)目等。(非對(duì)客:不直接面對(duì)前端用戶的功能,通常是系統(tǒng)的支撐性需求)
為什么這類項(xiàng)目的質(zhì)量保障思路值得單獨(dú)討論? 區(qū)別于常見的業(yè)務(wù)功能更新,這類項(xiàng)目往往都是在保持原有業(yè)務(wù)的基礎(chǔ)上進(jìn)行的底層支持或改造,與以往業(yè)務(wù)功能測(cè)試的角度不同,更多的是針對(duì)非功能需求的測(cè)試。而團(tuán)隊(duì)整體缺乏業(yè)務(wù)視角,或?qū)Ψ枪δ苄枨蟮馁|(zhì)量認(rèn)知不足,可能會(huì)引發(fā)大量的質(zhì)量風(fēng)險(xiǎn)或缺陷,破壞已有功能的正常運(yùn)轉(zhuǎn)。
另外,技改項(xiàng)目面臨的情況往往比較復(fù)雜,缺失的大量業(yè)務(wù)上下文,難以償還的技術(shù)債遺產(chǎn),項(xiàng)目人員往往面臨著一邊做技改、一邊理業(yè)務(wù)的困境。難上加難的是,還可能同步進(jìn)行著現(xiàn)有業(yè)務(wù)的擴(kuò)充或變更,這就更為技術(shù)改進(jìn)類項(xiàng)目的質(zhì)量保障過程雪上加霜。
因此,這類項(xiàng)目的質(zhì)量保障任重而道遠(yuǎn),需要特別對(duì)待,從長(zhǎng)計(jì)議。
2. 兵馬未動(dòng),策略先行
? 風(fēng)險(xiǎn)驅(qū)動(dòng)整個(gè)過程
技改項(xiàng)目好比暗潮涌動(dòng)的平靜海面,平時(shí)不出事,一出就是大事。因此,風(fēng)險(xiǎn)分析和干預(yù)應(yīng)貫穿始終。
常見的質(zhì)量風(fēng)險(xiǎn)盤點(diǎn)如下:
1)低估工作量或研發(fā)過程中的工作量膨脹,不能如期上線
2)上線過程不可逆,有失敗風(fēng)險(xiǎn)
3)破壞既有穩(wěn)定功能
4)影響外部集成系統(tǒng)
5)不可抗力導(dǎo)致上線時(shí)間變動(dòng),提前或延后
6)質(zhì)量較差造成的大量返工
我們把這些風(fēng)險(xiǎn)放到風(fēng)險(xiǎn)狀態(tài)矩陣中,可針對(duì)不同等級(jí)的風(fēng)險(xiǎn)制定不同程度的干預(yù)或響應(yīng)機(jī)制。

風(fēng)險(xiǎn)狀態(tài)矩陣:盡早分析 Over 走一步看一步
? 構(gòu)建質(zhì)量防護(hù)網(wǎng)
按理來說技改類的代碼變動(dòng),類比重構(gòu),應(yīng)保證原有功能不被破壞。但現(xiàn)實(shí)往往是“動(dòng)一行、掛一片”,“動(dòng)兩段,修半年”。
在做大規(guī)模的技改前,構(gòu)建質(zhì)量防護(hù)網(wǎng)尤為重要。 設(shè)計(jì)良好的自動(dòng)化測(cè)試能被頻繁執(zhí)行,這就構(gòu)成了質(zhì)量保障的基礎(chǔ)。我們?cè)嵅∮谧詣?dòng)化測(cè)試的投資回報(bào)率低,通常是因?yàn)橛缅e(cuò)了地方。自動(dòng)化測(cè)試應(yīng)用于需要大量回歸測(cè)試的場(chǎng)景,如業(yè)務(wù)變量較少的技改類項(xiàng)目,會(huì)比應(yīng)用于頻繁開發(fā)新功能的場(chǎng)景更見效也更經(jīng)濟(jì)。
除了自動(dòng)化測(cè)試給代碼質(zhì)量的保障,還需要人工干預(yù)的流程保障。 測(cè)試人員應(yīng)堅(jiān)守質(zhì)量門禁,即使是一張技術(shù)卡或任務(wù)卡,也要像對(duì)待用戶故事一樣,堅(jiān)持開結(jié)卡的流程,明確驗(yàn)收標(biāo)準(zhǔn)和完成定義,確保已經(jīng)做了的事情都是有效且高質(zhì)量的。

質(zhì)量門禁的意義:破壞引入問題的回路
? 為“不可逆”而設(shè)計(jì)和預(yù)演
試想這樣的場(chǎng)景:常規(guī)的功能發(fā)布,經(jīng)過緊鑼密鼓的上線部署和驗(yàn)證,突然發(fā)現(xiàn)存在重大問題,來不及臨時(shí)修復(fù),只能回滾。于是相關(guān)的服務(wù)回滾后,測(cè)試人員又進(jìn)行了回歸驗(yàn)證,確保服務(wù)回滾不會(huì)造成重大的影響。為了不影響業(yè)務(wù)運(yùn)轉(zhuǎn),往往只能在非工作時(shí)間進(jìn)行部署,折騰完這一圈可能都是后半夜了,好在有驚無險(xiǎn)。大家盯著轉(zhuǎn)危為安的軟件,露出了欣慰的笑容。
如果是技改類項(xiàng)目呢?一樣的過程,上線→發(fā)現(xiàn)問題→回滾?無法回滾!若此時(shí)遇到問題,內(nèi)心只有兩個(gè)字:“絕望”。技改類項(xiàng)目的特點(diǎn)決定了上線過程基本都是不可逆的一錘子買賣,很少具備有多套生產(chǎn)備份或?yàn)?zāi)備的條件。因此,技改類項(xiàng)目的開發(fā)、測(cè)試、部署、基礎(chǔ)設(shè)施、上線過程等等一系列研發(fā)活動(dòng),都需要為“不可逆”而設(shè)計(jì),****并且應(yīng)在類生產(chǎn)環(huán)境進(jìn)行多輪具備多樣性的部署預(yù)演。 不能事后補(bǔ)救,只能事前預(yù)防。
3.業(yè)務(wù)視角不能丟
技術(shù)改進(jìn),并不只是技術(shù)范圍內(nèi)的事。 除非這部分代碼完全不會(huì)在生產(chǎn)環(huán)境運(yùn)行(當(dāng)然這種情況也不需要上線),否則都需要帶著業(yè)務(wù)視角來看待技術(shù)改進(jìn)。在改進(jìn)過程中,如何邊改邊保持業(yè)務(wù)的穩(wěn)定運(yùn)行,如何確保遷移后的數(shù)據(jù)能在業(yè)務(wù)系統(tǒng)里順利流轉(zhuǎn),如何保證非對(duì)客項(xiàng)目的架構(gòu)設(shè)計(jì)滿足業(yè)務(wù)系統(tǒng)的支撐性需求?這些問題的探討都不能獨(dú)立于技術(shù)范圍,而需要更多業(yè)務(wù)側(cè)的輸入。
? 業(yè)務(wù)輸入與業(yè)務(wù)評(píng)審
業(yè)務(wù)人員天然具備業(yè)務(wù)視角,可以從保證業(yè)務(wù)連續(xù)性的角度給技改類項(xiàng)目?jī)深愝斎耄?/strong>一類是業(yè)務(wù)知識(shí)本身,項(xiàng)目背后的業(yè)務(wù)沉淀和業(yè)務(wù)重點(diǎn);另一類是為了保證業(yè)務(wù)連續(xù)性,需要提供的支撐性需求,如可追蹤/留痕、容錯(cuò)性、高可用需求等。
在技改過程中,識(shí)別到任何可能影響本系統(tǒng)業(yè)務(wù)或集成系統(tǒng)業(yè)務(wù)的改動(dòng)內(nèi)容,都需要組織業(yè)務(wù)評(píng)審,充分理解業(yè)務(wù)背景,再評(píng)估改動(dòng)范圍和風(fēng)險(xiǎn)。
? 基于風(fēng)險(xiǎn)的業(yè)務(wù)優(yōu)先級(jí)判斷
資源總是受限,以追求經(jīng)濟(jì)的投資角度來看,應(yīng)基于風(fēng)險(xiǎn)來判斷業(yè)務(wù)優(yōu)先級(jí),**給不同風(fēng)險(xiǎn)等級(jí)的業(yè)務(wù),投入與之匹配的質(zhì)量資源。 **如下圖,呈現(xiàn)了基于業(yè)務(wù)優(yōu)先級(jí)的自動(dòng)化測(cè)試設(shè)計(jì)。

基于業(yè)務(wù)優(yōu)先級(jí)的自動(dòng)化測(cè)試設(shè)計(jì)
? 業(yè)務(wù)集成要趁早
如有可能,盡早集成。 應(yīng)從設(shè)計(jì)時(shí)就進(jìn)行思考,驗(yàn)收時(shí)依賴的內(nèi)部服務(wù)盡量不用mock。盤點(diǎn)改進(jìn)點(diǎn)或遷移數(shù)據(jù)的業(yè)務(wù)含義;所需覆蓋的業(yè)務(wù)場(chǎng)景,盡量以端到端的視角去做技改部分的驗(yàn)證。如果早期不考慮集成相關(guān)的問題,后期可能面臨的就是大量返工,甚至推倒重來。這個(gè)沉沒成本是不情愿也不應(yīng)該付出的。
4.技術(shù)實(shí)現(xiàn),應(yīng)知其所以然
? 深入技術(shù)細(xì)節(jié)
因技改類項(xiàng)目需維持業(yè)務(wù)連續(xù)性,且通常底層變化難以從外部觀測(cè),可測(cè)性不高,因此在做技改類項(xiàng)目的測(cè)試和質(zhì)量評(píng)估時(shí),需要深入技術(shù)細(xì)節(jié),對(duì)具體的實(shí)現(xiàn)過程刨根問底。只有深入技術(shù)細(xì)節(jié),才能有效避免“錯(cuò)誤的輸入經(jīng)由處理后,陰差陽錯(cuò)地返回了正確的、或看上去正確的輸出”。
? 重視非功能需求
非功能需求,也稱跨功能需求或支撐性需求(Non/Cross-functional requirement),是指按照一些條件判斷系統(tǒng)運(yùn)作情形或其特性,而不是針對(duì)系統(tǒng)特定業(yè)務(wù)行為的需求。——維基百科
測(cè)試非功能需求的兩大質(zhì)量目標(biāo):一是保證系統(tǒng)穩(wěn)定運(yùn)行,二是保證系統(tǒng)可持續(xù)發(fā)展。
- 運(yùn)行質(zhì)量:可在系統(tǒng)運(yùn)行時(shí)觀察到的質(zhì)量,如安全、性能、可用性等
- 發(fā)展質(zhì)量:與軟件系統(tǒng)結(jié)構(gòu)和開發(fā)過程有關(guān)的質(zhì)量,如可維護(hù)、可擴(kuò)展等
技改類項(xiàng)目應(yīng)更加重視非功能需求: 整個(gè)改進(jìn)過程是否破壞了系統(tǒng)原本支持的非功能需求;干系人或用戶對(duì)改進(jìn)后系統(tǒng)的非功能需求預(yù)期是否發(fā)生了變化;對(duì)已經(jīng)捕捉到的非功能需求,應(yīng)能清晰描述驗(yàn)收標(biāo)準(zhǔn)和期望的系統(tǒng)運(yùn)行狀態(tài)。

非功能需求示例:針對(duì)不同系統(tǒng)特性,應(yīng)形成相應(yīng)的非功能需求重點(diǎn)
5.一些經(jīng)驗(yàn)教訓(xùn)
? 1+1<2
由于技改類項(xiàng)目的特殊性,承擔(dān)這類項(xiàng)目研發(fā)工作的大都是研發(fā)骨干,這對(duì)項(xiàng)目經(jīng)理提出管理上的挑戰(zhàn)。需警惕“1+1<2”的陷阱,避免頻繁陷入漫無邊際的無意義的技術(shù)討論中。同時(shí)兼顧技術(shù)決策的投資回報(bào)和改進(jìn)效率,以及核心骨干人員的工作體驗(yàn)。陷于類似困境的同事們都能深刻意識(shí)到團(tuán)隊(duì)梯隊(duì)的重要性,全是資深同事并不利于工作的快速推進(jìn)和高效管理。
? 全局視角
影響技改或被其影響的干系方很多,技改類項(xiàng)目需要更宏觀的全局視角。不只關(guān)注技術(shù),更關(guān)心業(yè)務(wù);不只關(guān)心自己的業(yè)務(wù),也關(guān)心是否影響外部集成方的業(yè)務(wù);不僅關(guān)注當(dāng)下的運(yùn)行質(zhì)量,也關(guān)心未來的業(yè)務(wù)或架構(gòu)演進(jìn)。一句話總結(jié),這個(gè)全局視角需要橫跨技術(shù)和業(yè)務(wù)、團(tuán)隊(duì)和干系人,還有時(shí)間上的現(xiàn)在和未來。
? 業(yè)務(wù)沉淀的必要性
具備高業(yè)務(wù)復(fù)雜度的項(xiàng)目一定要做好知識(shí)管理,再忙也別忘了抽空做業(yè)務(wù)沉淀和知識(shí)傳遞。業(yè)務(wù)沉淀的必要性就好比人的軟實(shí)力,平時(shí)可能看不出差距,持續(xù)做也似乎成效甚微。但凡遇到復(fù)雜度上升或面臨艱難挑戰(zhàn),管理人員就會(huì)發(fā)現(xiàn),在平時(shí)點(diǎn)點(diǎn)滴滴的實(shí)踐過程中,業(yè)務(wù)上下文的構(gòu)建和業(yè)務(wù)視角的賦能,已經(jīng)在團(tuán)隊(duì)中悄無聲息的完成了。關(guān)鍵時(shí)刻方見奇效。