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

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

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

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

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

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

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

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

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

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

  在公司級(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)”,測(cè)試是其中大的一塊。EP包括:

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

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

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

  這種測(cè)試策略帶來(lái)的結(jié)果是相對(duì)較少的測(cè)試人員。根據(jù)Whittaker的觀點(diǎn),這也可能是因?yàn)椤拔覀兒苌賴(lài)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)??還沒(méi)有做好發(fā)布準(zhǔn)備的代碼

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

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

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

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

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