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

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

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

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

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

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

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

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

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

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

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

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

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

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

  這種測試策略帶來的結(jié)果是相對較少的測試人員。根據(jù)Whittaker的觀點,這也可能是因為“我們很少嘗試一次快速交付很多功能。事實上,我們的目標(biāo)恰恰相反:構(gòu)建一個產(chǎn)品的核心部分,一旦它對很多人有價值,我們發(fā)布這個產(chǎn)品,隨后我們收集反饋,繼續(xù)迭代。”另外一個確保質(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ā)布版??這個版本的產(chǎn)品可供Google內(nèi)部或者公眾使用。

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

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