James Whittaker是Google的測試總監(jiān),曾任微軟構(gòu)架師,也是“實(shí)用軟件測試指南”系列圖書中好幾本書的作者。他近寫了一系列的博文,介紹Google是如何進(jìn)行測試。Google把開發(fā)和測試緊密結(jié)合在一起,測試人員相對(duì)較少,每個(gè)產(chǎn)品在正式上線前都要經(jīng)過好幾個(gè)不同的版本。

  Google保證產(chǎn)品質(zhì)量的方法和很多公司是不一樣的。Google沒有一個(gè)龐大的測試部門,相反,部分測試工作委派給了開發(fā)人員。Whittaker寫道:

  測試和開發(fā)同時(shí)進(jìn)行。編寫一些代碼,馬上進(jìn)行測試和構(gòu)建。接著,編寫更多的代碼,繼續(xù)測試。更好的是,在你編碼的時(shí)候或者編碼之前,計(jì)劃好你的測試。測試不是一個(gè)獨(dú)立分開的過程,它是開發(fā)的一部分。質(zhì)量不等同于測試;要想有高質(zhì)量的產(chǎn)品,要把開發(fā)和測試緊密捆綁在一起,直到不分彼此。

  這是因?yàn),Google認(rèn)為要保證質(zhì)量,預(yù)防勝于檢查:

  質(zhì)量來自開發(fā),而不是測試。為了拓寬開發(fā)環(huán)節(jié),我們可以把測試融入到開發(fā)中去。我們已經(jīng)建立了一個(gè)超高效的增量流程,只要有一個(gè)增量被證明缺陷太多,我們可以回滾這些錯(cuò)誤。我們不僅預(yù)防了很多產(chǎn)品級(jí)問題,還大大地減少了那些為確保消除“召回級(jí)別”缺陷而安排的測試人員的人數(shù)。

  因此,在Google,測試人員不用做測試是眾所周知的,他們只要“確保他們「開發(fā)人員」有自動(dòng)框架和相關(guān)流程”進(jìn)行測試即可。開發(fā)人員進(jìn)行必要的測試,他們對(duì)他們的代碼質(zhì)量負(fù)責(zé)。這其實(shí)是強(qiáng)調(diào)了一點(diǎn):“質(zhì)量的重?fù)?dān)落在那些負(fù)責(zé)交付正確產(chǎn)品的開發(fā)人員的肩上!睘榱藢(shí)現(xiàn)他們的質(zhì)量哲學(xué),Google有三種類型的工程師,Whittaker解釋道:

  ● SWE或者軟件工程師是傳統(tǒng)的開發(fā)角色。SWE編寫終交付給客戶的功能代碼。他們編寫設(shè)計(jì)文檔,設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)以及整體架構(gòu),花絕大部分時(shí)間編寫和審查代碼。SWE會(huì)編寫很多測試代碼,包括測試驅(qū)動(dòng)設(shè)計(jì),單元測試,以及在未來的幾篇博文中我們會(huì)具體解釋的,如何參與到簡單、中等甚至復(fù)雜的測試集成中去。SWE們對(duì)他們參與的一切的質(zhì)量負(fù)責(zé),不管是他們編寫的、修復(fù)的或者是修改的。

  ● SET或者測試軟件工程師(Software Engineer in Test)也是開發(fā)角色,只是他們專注于易測性。他們審查設(shè)計(jì),密切關(guān)注代碼質(zhì)量和風(fēng)險(xiǎn)。他們重構(gòu)代碼,讓代碼更加易于測試。SET需要編寫單元測試框架和自動(dòng)化測試。他們的代碼也會(huì)提交到SWE所工作的代碼庫(code base),但是他們更加關(guān)注提高質(zhì)量和測試覆蓋率,而不是增加新功能或者提高性能。

  ● TE或者測試工程師則跟SET恰恰相反。他們這個(gè)角色會(huì)把測試放在首位,而把開發(fā)放其次。很多Google的TE會(huì)花很多時(shí)間來編寫模擬了實(shí)際使用場景甚至是模擬了用戶的自動(dòng)化腳本和代碼。他們也整理SWE和SET的測試工作,解讀測試結(jié)果從而驅(qū)動(dòng)測試,他們也會(huì)在項(xiàng)目后期參與到項(xiàng)目中去,來強(qiáng)力推動(dòng)項(xiàng)目發(fā)布。TE是產(chǎn)品專家,質(zhì)量顧問也是風(fēng)險(xiǎn)分析員。

  換句話說,SWE負(fù)責(zé)軟件功能特性和它們的質(zhì)量。SET提供代碼支持,從而使SWE能測試這些產(chǎn)品特性。TE快速地測試系統(tǒng)或者再次檢查那些被開發(fā)人員忽略的主要缺陷。并且,他們協(xié)助用戶測試,還進(jìn)行性能、安全以及其他類似的測試。

  在公司級(jí)別,Google有幾個(gè)關(guān)注域(Focus Areas)??搜索、廣告、應(yīng)用程序、移動(dòng)服務(wù)、操作系統(tǒng)等等。其中有一個(gè)關(guān)注域是工程生產(chǎn)力(Engineering Productivity,EP),它包括了一些“橫向和縱向的工程規(guī)范(horizontal and vertical engineering disciplines)”,測試是其中大的一塊。EP包括:

  1、產(chǎn)品團(tuán)隊(duì)??為整個(gè)Google的所有工程師提供能提高生產(chǎn)力的工具,包括開源項(xiàng)目,比如“代碼分析器、IDE、測試用例管理系統(tǒng)、自動(dòng)測試工具、構(gòu)建發(fā)布系統(tǒng)、版本控制系統(tǒng)、代碼審查安排系統(tǒng)、缺陷數(shù)據(jù)庫!

  2、服務(wù)團(tuán)隊(duì)??為任何Google員工提供關(guān)于可靠性,安全,國際化等領(lǐng)域的專業(yè)知識(shí),包括“工具、文檔、測試、發(fā)布管理、培訓(xùn)”等等。

  3、派遣式的工程團(tuán)隊(duì)(Embedded Engineers Team)??在Google,測試人員會(huì)被借調(diào)去不同的產(chǎn)品團(tuán)隊(duì)。他們可以選擇為一個(gè)團(tuán)隊(duì)服務(wù)很多年,但公司鼓勵(lì)他們?nèi)ゲ煌膱F(tuán)隊(duì)輪崗,從而能夠“在產(chǎn)品知識(shí)和新鮮視野之間”保持一個(gè)良好的平衡。這些測試人員參與到產(chǎn)品團(tuán)隊(duì)中的很多不同的關(guān)注域,但是從組織關(guān)系上來說,他們匯報(bào)給EP管理層。這樣做的理由是能夠建立一個(gè)“讓測試人員共享知識(shí)和信息的論壇。好的測試想法在EP內(nèi)部很容易傳播開來,從而使所有測試人員,不管他們?yōu)槟膫(gè)產(chǎn)品服務(wù),都能夠了解到公司內(nèi)好的技術(shù)。”

  這種測試策略帶來的結(jié)果是相對(duì)較少的測試人員。根據(jù)Whittaker的觀點(diǎn),這也可能是因?yàn)椤拔覀兒苌賴L試一次快速交付很多功能。事實(shí)上,我們的目標(biāo)恰恰相反:構(gòu)建一個(gè)產(chǎn)品的核心部分,一旦它對(duì)很多人有價(jià)值,我們發(fā)布這個(gè)產(chǎn)品,隨后我們收集反饋,繼續(xù)迭代!绷硗庖粋(gè)確保質(zhì)量的關(guān)鍵元素是使用多重版本。Whittaker以Chrome為例,介紹了四種不同的版本:

  1、金絲雀版(Canary Channel)??還沒有做好發(fā)布準(zhǔn)備的代碼

  2、開發(fā)版??開發(fā)人員使用的版本

  3、內(nèi)部測試版(Test Channel)??為了準(zhǔn)備beta發(fā)布的版本

  4、測試(beta)或者發(fā)布版??這個(gè)版本的產(chǎn)品可供Google內(nèi)部或者公眾使用。

  產(chǎn)品發(fā)布以后,如果發(fā)現(xiàn)了一個(gè)缺陷,我們會(huì)編寫一個(gè)測試,并且在所有的版本中進(jìn)行驗(yàn)證,看看這個(gè)缺陷是不是已經(jīng)在某個(gè)版本里面被修復(fù)了。

  簡單來說,這是Google用來測試他們的產(chǎn)品、確保代碼質(zhì)量的流程和組織結(jié)構(gòu)。