如果我們以Bill Hetzel提出軟件工程的概念作為軟件測試正式誕生的標志,那么軟件測試發(fā)展到今天已經(jīng)四十余年了。在長久的發(fā)展過程中,軟件測試與軟件開發(fā)的技術(shù)脫節(jié)越來越明顯,漸漸的形成以人力密集型執(zhí)行為主流的局面。這不僅使測試工程師的職業(yè)發(fā)展受到阻礙,更影響到軟件測試的效率,有效性以及靈活性。
如今越來越多的公司,尤其是互聯(lián)網(wǎng)公司開始摒棄傳統(tǒng)的勞動密集型測試,關(guān)注測試人員轉(zhuǎn)型,將測試與開發(fā)的職責整合。想想幾年前絕大多數(shù)公司還堅持著測試與開發(fā)分離的觀點,不禁令人想起一句名言——天下大勢,分久必合,合久必分。對于軟件測試而言,這是一個變革的時代!
變革的目的是提升測試效率,減少純手動測試人力投入,重建與軟件開發(fā)規(guī)律匹配的軟件測試,提升軟件測試的覆蓋與效率。
變革所需要解決的問題主要有:
1.如何重構(gòu)軟件測試的組織形式?
2.如何打造一支符合要求的軟件測試團隊?
3.如何建立自動化的高效平臺與框架?
要解決的首要問題是如何重構(gòu)軟件測試的組織形式,因為這是一個戰(zhàn)略性的規(guī)劃,是保證軟件測試順利開展與執(zhí)行的前提與基礎(chǔ)。本文基于點融的實踐,參考Google等業(yè)內(nèi)公司的分享,對重構(gòu)軟件測試的組織形式進行再思考。
全員測試的意識
在軟件測試漫長的發(fā)展過程中,漸漸形成了測試與開發(fā)涇渭分明的結(jié)構(gòu)。開發(fā)工程師本能的依靠測試工程師完成軟件質(zhì)量的檢測,這種職責的分割導致開發(fā)工程師質(zhì)量意識相對淡薄,并且理所當然的認為測試應該由專門的團隊完成。因此,我們要構(gòu)建新的測試體系,就必須打破這樣的意識認知。
軟件測試的本質(zhì)是種職責,本身就是軟件開發(fā)中不能被割裂的一部分,不應該被團隊的組織架構(gòu)所限制。所以,開發(fā)工程師也應該是測試的執(zhí)行者。我們欣喜的看到,在很多公司這個觀念已經(jīng)得到良好的執(zhí)行。如果我們更進一步,將這個思路擴展到整個產(chǎn)品研發(fā)體系,那么產(chǎn)品經(jīng)理,開發(fā)工程師,測試工程師,UI/UX工程師,甚至于用戶都應該投身于測試中。這樣全員測試的方式將是我們構(gòu)建新測試體系的基礎(chǔ)。
全員測試的意識,并不是一朝一夕可以建立起來的。在意識建立的過程中,必要的規(guī)范,制度以及評估方式作為配套體系必不可少。質(zhì)量管理團隊,測試團隊,測試工程師等在此過程中,應當承擔起指導者的作用。

以測試工程師為中樞的項目測試組織
當眾多角色參與到測試中來,測試工作如何管理?這就需要測試工程師發(fā)揮作用了。在這個體系中,測試工程師的不僅僅進行測試用例設計和執(zhí)行,他們將是測試策略的制訂者,測試活動的規(guī)劃者,測試過程的管理者,測試結(jié)果的驗收者。
請注意:測試結(jié)果的驗收不等同于驗收測試。測試結(jié)果驗收是指對測試結(jié)果進行評審驗收,關(guān)注于測試結(jié)果的完整性及結(jié)論。
結(jié)合這個思路,我們可以定義出產(chǎn)品團隊或者一個項目團隊軟件參與角色的基本職責。核心思想是將功能測試執(zhí)行工作分散到不同的角色,由測試工程師進行協(xié)調(diào)跟進,因此項目團隊中測試工程師人數(shù)不必多,以目前的實踐經(jīng)驗,測試工程師與開發(fā)工程師的比例做到1:10是沒有問題的,這樣大大減少了專職手動測試人員的數(shù)量。
對于系統(tǒng)級的專項測試,例如性能測試,壓力測試等,仍然由項目測試工程師負責。如果在企業(yè)內(nèi)部已經(jīng)建立測試中心并提供專項測試服務,那么項目測試工程師負責向中心提交測試請求并跟進測試結(jié)果。

參與測試的用戶有幾種情況:預發(fā)布階段的內(nèi)測用戶,灰度發(fā)布時的真實用戶,云服務商提供的眾測資源,執(zhí)行驗收測試的業(yè)務用戶,執(zhí)行用戶體驗測試的選定用戶。參與產(chǎn)品測試的用戶務必保證來自該產(chǎn)品研發(fā)團隊之外。
這里重點說明一下測試策略的意義。測試策略是要解決測什么,怎么測,以及如何評估測試結(jié)果這三個問題。測試策略是所有測試活動的靈魂和核心,對于待測系統(tǒng),其價值類似于隆中對之于劉備,農(nóng)村包圍城市之于中國革命。遺憾的是盡管有很多業(yè)內(nèi)人士在不斷吶喊,但對于測試策略的重視程度仍然遠遠不足。測試策略需要很強的專業(yè)領(lǐng)域知識與測試經(jīng)驗,是測試工程師的重要價值所在。
對于功能測試,盡管分散到不同角色進行,但整個過程仍需在測試工程師的引導??梢詫⒐δ軠y試劃分為兩個級別:模塊功能測試,系統(tǒng)功能測試,測試設計與用例仍然由測試工程師提供。
功能測試級別
執(zhí)行角色
說明
模塊功能測試
開發(fā)工程師
開發(fā)工程師的功能測試仍然信賴于測試用例,測試用例的提供仍然是測試工程師的職責
系統(tǒng)功能測試
測試工程師
云測服務商
用戶如果與云測服務商合作,可以提供用例由其眾測人員開展系統(tǒng)功能測試。
在產(chǎn)品正式發(fā)布上線前,組織一定數(shù)量的用戶進行內(nèi)部測試是有效手段。
這些職責并不是不可調(diào)整的,例如對于接口測試,測試工程師當然也可以參與進去,又如測試工程師提供測試策略,取決于測試工程師的技能與經(jīng)驗,也可以由測試工程師協(xié)調(diào)團隊共同完成,或者由產(chǎn)品團隊外的測試中心團隊完成。
下面讓我們用一副圖來說明軟件測試各角色的協(xié)作關(guān)系:
圖中的測試中心將在后文中有詳細說明。明顯的,測試工程師成為軟件測試的樞紐,指導測試過程,協(xié)調(diào)不同角色開展測試,對測試結(jié)果進行匯總審核。
對于UAT和發(fā)布前的用戶內(nèi)測,一般建議對于內(nèi)部To B系統(tǒng)邀請業(yè)務方進行UAT,To C系統(tǒng)邀請真實用戶進行發(fā)布前內(nèi)測。
通常UAT及發(fā)布前內(nèi)測的協(xié)調(diào)組織是產(chǎn)品經(jīng)理的職責,因為產(chǎn)品經(jīng)理始終面對用戶,是最合適的人選。用戶體驗測試由UI/UX團隊進行組織的原因在于,UI/UX團隊的專業(yè)能力能夠使用戶體驗測試的效果能夠得到最大程度保證。而測試工程師需要在整個過程中提供技術(shù)及流程方面的指導。

中心化與分散化
在上一章節(jié)中說明的是一個產(chǎn)品,或者一個項目內(nèi)的測試組織。這是測試工程師的分散化運作。僅憑這樣的組織形式,還有很多問題無法解決,例如:通用的測試框架與工具,指導各項目的測試工程師,實踐經(jīng)驗的全局化分享與改進等等。
在項目管理中,往往通過PMO來對各項目進行規(guī)范,協(xié)調(diào)和指導,讓我們借鑒項目管理與PMO的方法,引入測試中心這個概念。測試中心的職責在于:
1.為各項目的測試工作提供規(guī)范及指導。
為了使測試工作能夠在統(tǒng)一的標準下開展,需要由測試中心提供規(guī)范和流程指引。與此同時,測試中心根據(jù)各項目測試工程師反饋的數(shù)據(jù)進行分析統(tǒng)計,從了解全局測試情況,及時糾正或者改進測試工作。
測試中心擁有資深的測試專業(yè)人士,對于測試方法,開發(fā)技術(shù),軟件架構(gòu),工具,業(yè)務等均有足夠的經(jīng)驗,這使之可以成為一個指導或求助的平臺,前面提到的測試策略就是一個例子。
2.接收各項目的測試平臺或測試框架需求,部署統(tǒng)一的開發(fā),并提供統(tǒng)一測試服務。
如果我們想減少勞動密集型的測試工作,提升測試效率,自動化的平臺和框架是必須的。各項目情況各異,需要有統(tǒng)一的抽象與整合。對于有價值的技術(shù)建設成果,需要進行有效推廣。此類技術(shù)性工作將是測試中心的重點工作之一。
對于一些專項測試,例如性能測試,壓力測試等,測試中心可以提供統(tǒng)一的工具,環(huán)境,技術(shù)等支持,甚至可以由測試中心完成通用的測試。
另一方面,對于測試中心而言,需要收集各個項目的需求,了解其實踐,以產(chǎn)品化的思維去規(guī)劃真正能夠用于提升測試覆蓋及效率的自動化產(chǎn)品。
3.協(xié)調(diào)測試資源,包括人力,硬件,環(huán)境等。
項目測試工程師的委派,測試工程師的人力協(xié)調(diào),測試框架和工具的開發(fā)或選型,外部服務(例如云測)等,如果由各項目獨立進行則會引發(fā)很多混亂。因此,測試中心需要承擔起這部分職責。

測試中心的構(gòu)成
如果要使測試中心發(fā)揮實際作用,那么在測試中心內(nèi)部可以建立四個團隊:
1.測試架構(gòu)
類似于開發(fā)架構(gòu)師的作用,測試架構(gòu)師是資深的測試專家,熟悉專業(yè)領(lǐng)域知識,了解開發(fā)技術(shù),能夠?qū)y試對象進行策略及框架等全方位的指導。
技術(shù)選型,工具選型,外部合作商評估等,也是測試架構(gòu)團隊的職責。
2.標準化團隊
制訂測試規(guī)范,統(tǒng)一模板,流程,評估標準等。通過對項目測試工程師反饋的數(shù)據(jù)進行分析,提供全局的測試狀態(tài),并不斷進行改進。
對于各項目實踐經(jīng)驗的分享,框架及工具的推廣等,也是標準化團隊的工作內(nèi)容。
3.測試開發(fā)團隊
測試開發(fā)團隊的主要職責是開發(fā)標準化的測試框架,以及旨在提升效率的測試工具。團隊交付的框架工具,不僅服務于測試工程師,同時也可以服務于開發(fā)團隊。
測試開發(fā)團隊由具備測試思想和經(jīng)驗,同時又兼具軟件開發(fā)能力的技術(shù)人員組成。為了避免閉門造車,與實際需求脫節(jié),測試開發(fā)團隊有必要跟隨項目進行開發(fā)工具,只有這樣才能真正理解實際需求,提供有價值的交付。
另一方面,框架和工具的開發(fā),需要具備產(chǎn)品化的思維,由專門的人員用做產(chǎn)品的方式收集用戶需求(來源于項目組,開發(fā)人員及項目測試工程師等),編寫產(chǎn)品需求,并根據(jù)產(chǎn)品計劃進行開發(fā)。
在很多公司,已經(jīng)取消軟件測試工程師這一職位,取而代之的是測試開發(fā)工程師。但軟件測試的不同目的決定了測試人員有不同的能力方向要求,至少在現(xiàn)階段完全用測試開發(fā)工程師完全取代測試工程師的做法并不是完全有效的。關(guān)于這個話題,有機會我們另文討論。
4.統(tǒng)一測試服務
軟件測試中有一些通用的測試,如果各個項目各自建設,則重復造輪子,浪費人力物力。例如性能測試,可以提供一套標準化的環(huán)境,在此環(huán)境上實施測試。
對于某些行之有效的測試框架,甚至于內(nèi)部云測,均可以提供統(tǒng)一的測試服務,由測試中心的測試服務團隊進行維護,大大減少重復建設的浪費,提升效率。
此處討論的是管理團隊之外的執(zhí)行團隊,對于人力及軟硬件資源的協(xié)調(diào),無疑需要由測試中心的管理團隊來完成。

兵無常勢,水無常形
至此,本文已經(jīng)完整闡明我們對軟件測試組織方式的思考。與任何一種思想和理論一樣,本文的觀點也是基于對已知樣本的再抽象,但具體到一個企業(yè),一個公司,組織形式仍然需要因地制宜的分析,正所謂兵無常勢,水無常形。
例如,測試框架建設或者工具建設的工作,條件允許的情況下由開發(fā)工程師完成也未嘗不可。再以測試開發(fā)團隊為例,是一個由各不同項目的測試工程師構(gòu)成的虛擬團隊,還是一個專職的團隊,也是可以根據(jù)實際情況調(diào)整的。
又如,是建立公司級統(tǒng)一的測試中心,還是建立產(chǎn)品線維度的測試中心,又或者建立統(tǒng)一標準化團隊+多中心的組織,也是因公司實際情況進行的不同選擇。
后記
任何一種組織形式的確立,既取決于公司的決心,又取決于執(zhí)行與實踐。即使我們確立了滿足當前需要的組織形式,也不斷需要進行改進與調(diào)整,從這個意義上來講,最優(yōu)化的組織形式始終處于探索中,我們始終在路上。我們需要有知行合一的精神,不斷思考,實踐,再思考。
面對大時代的變遷,面對軟件測試的變革,我們期待與業(yè)界同仁一起努力,一起推動軟件測試向更光明的方向發(fā)展。
在暫時解決軟件測試如何組織的問題之后,我們需要去解決新型的軟件測試團隊如何構(gòu)建的問題,留待另文討論。
衷心感謝閱讀本文的每一位朋友。
本文作者:陳明(點融黑幫),現(xiàn)任職于點融網(wǎng)成都研發(fā)中心,長期從事軟件測試,質(zhì)量管理,項目管理等領(lǐng)域工作。