測試分層策略實(shí)踐模型
作者 | 安輝,王瑞鵬
在當(dāng)今企業(yè)推動(dòng)數(shù)字化轉(zhuǎn)型的背景下,如何在提升研發(fā)效率的同時(shí)守住質(zhì)量底線,成為了技術(shù)團(tuán)隊(duì)尤為關(guān)注的話題。軟件測試是確保軟件質(zhì)量的重要實(shí)踐之一,而其中的測試分層策略更是關(guān)鍵。盡管“測試分層策略”這一概念對許多團(tuán)隊(duì)來說還比較陌生,它實(shí)際上是軟件測試中的一個(gè)重要組成部分,決定了團(tuán)隊(duì)如何根據(jù)代碼架構(gòu)的不同,制定相應(yīng)的測試方法。
然而,很多團(tuán)隊(duì)在面對測試分層策略時(shí)存在認(rèn)知缺乏、設(shè)計(jì)不完整、以及與實(shí)際工作脫節(jié)等問題,這直接影響了測試實(shí)踐的效率。本文旨在通過提出一個(gè)模型,幫助團(tuán)隊(duì)建立統(tǒng)一的測試分層策略認(rèn)知,提升測試實(shí)踐的效果。
什么是測試分層策略?
提到的測試分層策略,大家感覺可能是既熟悉又陌生。其實(shí)測試分層策略是測試策略的一部分,對于測試策略,目前業(yè)界的普遍說法是測試策略主要包含的兩個(gè)方面內(nèi)容:
- 測什么?- 指測試的目標(biāo),是功能、是性能、還是安全?
- 怎么測?- 指測試的手段,由誰,在什么時(shí)候,是手動(dòng)還是自動(dòng)?
所以依照上述的特征,為了溝通時(shí)更聚焦,我更喜歡將測試策略分為流程策略和分層策略:
- 流程策略 - 即以時(shí)間為主線確定測試方法。明確產(chǎn)品需求研發(fā)過程中的測試活動(dòng)、角色職責(zé)、門禁標(biāo)準(zhǔn)等。
- 分層策略 - 即以軟件的代碼層次為主線確定測試方法。從技術(shù)的角度,針對被測單元不同的顆粒度,規(guī)劃測試相應(yīng)的測試方法。
在過往的咨詢經(jīng)歷中,我們發(fā)現(xiàn)多數(shù)開發(fā)團(tuán)隊(duì)對測試流程策略相對更了解,因?yàn)樗腿藛T的日常工作密切相關(guān),每個(gè)人都需要知道在什么時(shí)候應(yīng)該和誰協(xié)作來做什么事。但往往詢問起團(tuán)隊(duì)某個(gè)系統(tǒng)的測試分層策略,卻極少有人能夠說清。
分層策略常見的問題
每當(dāng)我們調(diào)研團(tuán)隊(duì)有關(guān)分層策略的問題時(shí),一般會有下面三類典型現(xiàn)象:
- 缺乏統(tǒng)一認(rèn)識 - “什么是測試分層?我不知道??!” 一般團(tuán)隊(duì)中極少有人能夠?qū)F(tuán)隊(duì)的測試分層說得清楚,即使是團(tuán)隊(duì)的技術(shù)或測試負(fù)責(zé)人也只能從團(tuán)隊(duì)實(shí)操層面說明團(tuán)隊(duì)都做了什么,甚至部分人連測試分層的概念都搞不清,不同角色之間更多是關(guān)心自己的一畝三分地,把自己職責(zé)上要做的測試做了就行了。
- 缺少頂層設(shè)計(jì)- “單元測試是開發(fā)團(tuán)隊(duì)做的,和測試團(tuán)隊(duì)沒什么關(guān)系?!?nbsp;有部分團(tuán)隊(duì)的技術(shù)或測試負(fù)責(zé)人可以說清楚對某個(gè)系統(tǒng)都做了哪些測試,比如有單元,接口,UI等,但是各類測試之間是割裂的,缺乏整體設(shè)計(jì)與層次間的配合規(guī)劃。這樣最容易出現(xiàn)的問題就是將原本應(yīng)該是金字塔的策略做成了水桶型,不同層次的測試間做了大量重復(fù)的工作。
- 與實(shí)際工作脫節(jié) - “測試金字塔?在墻上貼著呢。沒啥用,還是該咋做咋做!” 部分有策略意識的團(tuán)隊(duì)有時(shí)會短期突擊梳理系統(tǒng)的測試分層策略,梳理過后大家對實(shí)踐高質(zhì)量信心百倍。進(jìn)入到了具體工作時(shí)大家發(fā)現(xiàn)這東西不知道怎么和實(shí)際的工作結(jié)合起來,慢慢的也就忘記了它的存在,回歸最初的工作方式了。
這三種情況的存在會使團(tuán)隊(duì)的測試實(shí)踐效率低下,團(tuán)隊(duì)即使投入了大量的資源來增強(qiáng)某些測試實(shí)踐也很難達(dá)到好的質(zhì)量保障效果。
分層策略實(shí)踐模型
為了嘗試解決這些問題,我們的構(gòu)想是希望能夠給團(tuán)隊(duì)建立一個(gè)對測試分層策略的統(tǒng)一認(rèn)知與目標(biāo),可視化的管理各個(gè)層次的測試實(shí)踐,并且讓團(tuán)隊(duì)能夠用這個(gè)統(tǒng)一的目標(biāo)來指導(dǎo)自己的工作,所以就產(chǎn)生了本文要給大家介紹的測試分層策略模型。
1.維度設(shè)計(jì)
首先模型定義了縱向與橫向兩個(gè)維度,形成一個(gè)四象限的模型框架。其目的是希望對目標(biāo)被測系統(tǒng)進(jìn)行分類,不同類別的被測系統(tǒng)會有不同的測試策略推薦:
- 縱向維度考量被測系統(tǒng)的“可測試性”:直觀的理解可測試性就是一個(gè)計(jì)算機(jī)程序在各個(gè)層次上能夠被測試的容易程度。我們期望通過可測性維度來體現(xiàn)團(tuán)隊(duì)為該系統(tǒng)添加各層自動(dòng)化測試的成本,測試成本的高低肯定會影響團(tuán)隊(duì)對測試策略的選擇,畢竟無論哪個(gè)團(tuán)隊(duì)的資源都是有限的,需要考慮最合適的投入產(chǎn)出比。
- 橫向維度考量被測系統(tǒng)的“質(zhì)量風(fēng)險(xiǎn)”:我們期望通過“質(zhì)量風(fēng)險(xiǎn)”維度來體現(xiàn)被測系統(tǒng)對質(zhì)量風(fēng)險(xiǎn)的承受能力與團(tuán)隊(duì)現(xiàn)階段的質(zhì)量保障能力,一個(gè)銀行結(jié)算系統(tǒng)的測試覆蓋率肯定要比一個(gè)公司的門戶網(wǎng)站的要求更高一些,同樣一個(gè)各層次自動(dòng)化測試防護(hù)完善的系統(tǒng)肯定也不需要團(tuán)隊(duì)再花太多的精力去做更多的回歸測試。
實(shí)際的使用中這兩個(gè)維度都可以進(jìn)一步拆分成若干個(gè)評分因子,比如下圖例子中藍(lán)色因子代表系統(tǒng)可測性,綠色因子代表系統(tǒng)質(zhì)量風(fēng)險(xiǎn)。不同的系統(tǒng)可以根據(jù)自身情況決定需要采用的因子或者給因子添加權(quán)重。
2.策略推薦
接下來團(tuán)隊(duì)可以根據(jù)自己系統(tǒng)在兩個(gè)維度因子的得分,綜合評定系統(tǒng)在象限中所處的位置,不同的象限會根據(jù)系統(tǒng)不同的特點(diǎn)有相應(yīng)的分層策略原則推薦。
- 理想系統(tǒng) - 1號象限(可測性高,風(fēng)險(xiǎn)低):這個(gè)象限是一個(gè)比較理想的區(qū)間,首先處于這個(gè)維度的系統(tǒng)可測性好,實(shí)施各層測試的成本較低。同時(shí)質(zhì)量風(fēng)險(xiǎn)低意味著系統(tǒng)對缺陷的容忍度高,測試實(shí)踐的基礎(chǔ)較好。這種系統(tǒng)是很多團(tuán)隊(duì)的期望與目標(biāo),所以業(yè)界較為推崇的金字塔分層策略適合這樣的系統(tǒng)。
- 遺留系統(tǒng) - 2號象限(可測性低,風(fēng)險(xiǎn)低):相比1號象限,2號象限的系統(tǒng)的質(zhì)量風(fēng)險(xiǎn)低,但可測性也很低。這樣的情況往往出現(xiàn)在企業(yè)中的一些遺留系統(tǒng),這種系統(tǒng)往往因?yàn)榧夹g(shù)棧的老舊使其添加更細(xì)粒度自動(dòng)化測試成本很高,甚至有些層次無法測試。所以對于這類系統(tǒng)與其固執(zhí)的繼續(xù)高成本的添加細(xì)粒度的自動(dòng)化測試,不如先從成本較低的粗粒度(比如UI)層測試加起形成質(zhì)量防護(hù)網(wǎng),以待后續(xù)系統(tǒng)可測性提高之后再將測試點(diǎn)逐步下移,所以倒三角型的測試策略會更適合2號象限系統(tǒng)的現(xiàn)狀。
- 核心系統(tǒng) - 3號象限(可測性高,風(fēng)險(xiǎn)高):同樣相比1號象限,這個(gè)維度的系統(tǒng)雖然也有著很高的可測性,但是他們也有更高的質(zhì)量風(fēng)險(xiǎn),系統(tǒng)對質(zhì)量的要求更加苛刻。比如一些企業(yè)的核心業(yè)務(wù)系統(tǒng)或者銀行中涉賬業(yè)務(wù)比重較高的系統(tǒng),業(yè)務(wù)的重要性使他們承擔(dān)不起金字塔策略中下移測試點(diǎn)帶來的質(zhì)量妥協(xié),在各層中都要追求更高的測試覆蓋率以保障系統(tǒng)功能的安全。例如我們見到的銀行系統(tǒng)中對于UI端核心交易流程的測試投入明顯要比其他行業(yè)高出許多,所以這類系統(tǒng)在各個(gè)層次上的測試覆蓋率都需要比金字塔要更高些,梯形的測試策略就更適合當(dāng)前象限。
- 遺留核心 - 4號象限(可測性低,風(fēng)險(xiǎn)高):這個(gè)象限的系統(tǒng)基本上綜合了各種不利因素,各層次測試成本高的同時(shí),對質(zhì)量要求又苛刻。團(tuán)隊(duì)的目標(biāo)只能是不顧成本的在各層都竭盡可能的增加測試資源,畢竟高質(zhì)量風(fēng)險(xiǎn)之下的質(zhì)量要求是不可妥協(xié)的。這時(shí)候團(tuán)隊(duì)最應(yīng)該關(guān)注的是需要盡早提升系統(tǒng)的可測性,盡可能的降低測試成本。
2.策略演進(jìn)
使用本模型,一般系統(tǒng)的分層策略的演進(jìn)會分為兩個(gè)階段:
- 第一階段:在明確系統(tǒng)所處的象限之后,對比現(xiàn)狀與該象限的推薦策略,改善系統(tǒng)的測試實(shí)踐使它盡可能符合對應(yīng)象限推薦的原則。
- 第二階段:通過提升系統(tǒng)的可測性與系統(tǒng)的測試基礎(chǔ)降低質(zhì)量風(fēng)險(xiǎn),實(shí)現(xiàn)維度躍遷。讓系統(tǒng)可以具備更科學(xué),性價(jià)比更高的分層策略。
因此最后從演進(jìn)的整體趨勢來看,策略應(yīng)當(dāng)是“從左向右,從下向上”的,一旦你發(fā)現(xiàn)團(tuán)隊(duì)的策略在上面的模型中呈現(xiàn)相反的趨勢,那就需要小心了。配合下一段的實(shí)際案例大家對策略的演進(jìn)應(yīng)該能有一個(gè)更直觀的理解。
實(shí)踐落地過程及案例
模型實(shí)際的落地過程中通常要經(jīng)歷模型定制,評估打分,制定改進(jìn)計(jì)劃與落地實(shí)施4個(gè)環(huán)節(jié),在具體落地實(shí)施的過程中也會對計(jì)劃進(jìn)行迭代調(diào)整。
1.模型定制
在模型定制的過程中,模型的維度(可測性與質(zhì)量風(fēng)險(xiǎn))是固定的,但對應(yīng)拆分出的因子可以根據(jù)實(shí)際的業(yè)務(wù)類型,系統(tǒng)與團(tuán)隊(duì)狀況進(jìn)行適當(dāng)?shù)亩ㄖ普{(diào)整。最好能夠與團(tuán)隊(duì)的關(guān)鍵干系人以共創(chuàng)工作坊的形式來定制因子,一方面可以讓關(guān)鍵的干系人更深的了解模型的運(yùn)作原理。同時(shí)也增加他們的參與感,后續(xù)有更強(qiáng)的實(shí)施動(dòng)力。
2.調(diào)研 & 評估階段
調(diào)研評估這一步的目的是收集被測系統(tǒng)的信息得出因子評分,同時(shí)另一個(gè)重要的目的就是需要了解系統(tǒng)的測試基礎(chǔ)現(xiàn)狀。一般建議采用關(guān)鍵角色訪談加實(shí)地調(diào)研的方式來收集信息。僅訪談得到的信息往往容易受其他因素干擾,必須現(xiàn)地現(xiàn)物的看到具體的產(chǎn)出。
3.制定改進(jìn)計(jì)劃
改進(jìn)計(jì)劃的制定基本對標(biāo)策略演進(jìn)的兩階段:
第一階段,對標(biāo)系統(tǒng)所在象限的策略原則建議進(jìn)行改進(jìn)。
圖中的被測系統(tǒng)通過因子打分定位到了第2個(gè)象限,目前系統(tǒng)只有部分自動(dòng)化接口測試。根據(jù)當(dāng)前象限的策略推薦,系統(tǒng)應(yīng)該采用倒三角形策略,又因?yàn)楫?dāng)前是一個(gè)純后端系統(tǒng),沒有UI層測試,所以主要改進(jìn)兩個(gè)方面:完善現(xiàn)有接口測試與增加單元級別自動(dòng)化測試,使當(dāng)前的分層策略更符合推薦的策略。
第二階段,提升可測性,提升測試基礎(chǔ)實(shí)現(xiàn)維度躍遷,進(jìn)一步優(yōu)化分層策略。
通過對架構(gòu)的改造,編碼與持續(xù)集成實(shí)踐的提升,系統(tǒng)實(shí)現(xiàn)維度的遷移,但受制于當(dāng)前系統(tǒng)的實(shí)際情況與技術(shù)棧,無法將可測性提升到最高,目前階段只能采用半紡錘形策略。
改進(jìn)舉措可以和團(tuán)隊(duì)的技術(shù)負(fù)責(zé)人以協(xié)作的方式共創(chuàng)得出,外部教練往往只能從原則方向的角度去引導(dǎo)團(tuán)隊(duì),技術(shù)負(fù)責(zé)人則更清楚實(shí)際的系統(tǒng)狀況,只有與他們協(xié)作才能產(chǎn)出切實(shí)可行的改進(jìn)舉措。
4.策略改進(jìn)實(shí)施
實(shí)施過的團(tuán)隊(duì)中改進(jìn)的具體舉措大都會直接形成技術(shù)債卡片,在日常的迭代中把技術(shù)債逐步消化掉。這樣就需要團(tuán)隊(duì)的技術(shù)負(fù)責(zé)人統(tǒng)籌、管理這些具體的改進(jìn)舉措,把他與技術(shù)債融合統(tǒng)一排定優(yōu)先級。為了更科學(xué)的管理改進(jìn)舉措,我們還會通過類似精益價(jià)值樹的方式將粗顆粒度的改進(jìn)舉措逐層進(jìn)行拆解并制定相應(yīng)的成功度量指標(biāo)(MoS)。
總結(jié)
在實(shí)際輔導(dǎo)客戶團(tuán)隊(duì)的過程中,我們發(fā)現(xiàn):
- 首先,測試分層策略模型能夠幫助團(tuán)隊(duì)建立一個(gè)可視化的頂層設(shè)計(jì),實(shí)現(xiàn)統(tǒng)一規(guī)劃,并明確各層次的測試職責(zé),從而實(shí)現(xiàn)測試點(diǎn)在各層的合理分布,達(dá)到層次間的有效互補(bǔ)與配合。
- 其次,通過分層策略的演進(jìn),團(tuán)隊(duì)可以分析并識別當(dāng)前測試分層的優(yōu)化點(diǎn),規(guī)劃改進(jìn)措施。同時(shí),通過可視化現(xiàn)狀問題,推動(dòng)架構(gòu)改造等具體措施,以提升系統(tǒng)的可測試性。
- 最后,將策略模型與技術(shù)債務(wù)償還的實(shí)際操作結(jié)合,能夠確保測試策略改進(jìn)與實(shí)際工作緊密對接,使測試實(shí)踐與最初設(shè)計(jì)一致,從而實(shí)現(xiàn)測試活動(dòng)的高性價(jià)比。