James Whittaker是Google的測試總監,曾任微軟構架師,也是“實(shí)用軟件測試指南”系列圖書(shū)中好幾本書(shū)的作者。他最近寫(xiě)了一系列的博文,介紹Google是如何進(jìn)行測試。Google把開(kāi)發(fā)和測試緊密結合在一起,測試人員相對較少,每個(gè)產(chǎn)品在正式上線(xiàn)前都要經(jīng)過(guò)好幾個(gè)不同的版本。
Google保證產(chǎn)品質(zhì)量的方法和很多公司是不一樣的。Google沒(méi)有一個(gè)龐大的測試部門(mén),相反,部分測試工作委派給了開(kāi)發(fā)人員。Whittaker寫(xiě)道:
測試和開(kāi)發(fā)同時(shí)進(jìn)行。編寫(xiě)一些代碼,馬上進(jìn)行測試和構建。接著(zhù),編寫(xiě)更多的代碼,繼續測試。更好的是,在你編碼的時(shí)候或者編碼之前,就計劃好你的測試。測試不是一個(gè)獨立分開(kāi)的過(guò)程,它是開(kāi)發(fā)的一部分。質(zhì)量不等同于測試;要想有高質(zhì)量的產(chǎn)品,就要把開(kāi)發(fā)和測試緊密捆綁在一起,直到不分彼此。
這是因為,Google認為要保證質(zhì)量,預防勝于檢查:
質(zhì)量來(lái)自開(kāi)發(fā),而不是測試。為了拓寬開(kāi)發(fā)環(huán)節,我們可以把測試融入到開(kāi)發(fā)中去。我們已經(jīng)建立了一個(gè)超高效的增量流程,只要有一個(gè)增量被證明缺陷太多,我們就可以回滾這些錯誤。我們不僅預防了很多產(chǎn)品級問(wèn)題,還大大地減少了那些為確保消除“召回級別”缺陷而安排的測試人員的人數。
因此,在Google,測試人員不用做測試是眾所周知的,他們只要“確保他們【開(kāi)發(fā)人員】有自動(dòng)框架和相關(guān)流程”進(jìn)行測試即可。開(kāi)發(fā)人員進(jìn)行必要的測試,他們對他們的代碼質(zhì)量負責。這其實(shí)就是強調了一點(diǎn):“質(zhì)量的重擔落在那些負責交付正確產(chǎn)品的開(kāi)發(fā)人員的肩上!睘榱藢(shí)現他們的質(zhì)量哲學(xué),Google有三種類(lèi)型的工程師,Whittaker解釋道:
SWE或者軟件工程師是傳統的開(kāi)發(fā)角色。SWE編寫(xiě)最終交付給客戶(hù)的功能代碼。他們編寫(xiě)設計文檔,設計數據結構以及整體架構,花絕大部分時(shí)間編寫(xiě)和審查代碼。SWE會(huì )編寫(xiě)很多測試代碼,包括測試驅動(dòng)設計,單元測試,以及在未來(lái)的幾篇博文中我們會(huì )具體解釋的,如何參與到簡(jiǎn)單、中等甚至復雜的測試集成中去。SWE們對他們參與的一切的質(zhì)量負責,不管是他們編寫(xiě)的、修復的或者是修改的。
SET或者測試軟件工程師(Software Engineer in Test)也是開(kāi)發(fā)角色,只是他們專(zhuān)注于易測性。他們審查設計,密切關(guān)注代碼質(zhì)量和風(fēng)險。他們重構代碼,讓代碼更加易于測試。SET需要編寫(xiě)單元測試框架和自動(dòng)化測試。他們的代碼也會(huì )提交到SWE所工作的代碼庫(code base),但是他們更加關(guān)注提高質(zhì)量和測試覆蓋率,而不是增加新功能或者提高性能。
TE或者測試工程師則跟SET恰恰相反。他們這個(gè)角色會(huì )把測試放在首位,而把開(kāi)發(fā)放其次。很多Google的TE會(huì )花很多時(shí)間來(lái)編寫(xiě)模擬了實(shí)際使用場(chǎng)景甚至是模擬了用戶(hù)的自動(dòng)化腳本和代碼。他們也整理SWE和SET的測試工作,解讀測試結果從而驅動(dòng)測試,他們也會(huì )在項目后期參與到項目中去,來(lái)強力推動(dòng)項目發(fā)布。TE是產(chǎn)品專(zhuān)家,質(zhì)量顧問(wèn)也是風(fēng)險分析員。
換句話(huà)說(shuō),SWE負責軟件功能特性和它們的質(zhì)量。SET提供代碼支持,從而使SWE能測試這些產(chǎn)品特性。TE快速地測試系統或者再次檢查那些被開(kāi)發(fā)人員忽略的主要缺陷。并且,他們協(xié)助用戶(hù)測試,還進(jìn)行性能、安全以及其他類(lèi)似的測試。
在公司級別,Google有幾個(gè)關(guān)注域(Focus Areas)——搜索、廣告、應用程序、移動(dòng)服務(wù)、操作系統等等。其中有一個(gè)關(guān)注域是工程生產(chǎn)力(Engineering Productivity,EP),它包括了一些“橫向和縱向的工程規范(horizontal and vertical engineering disciplines)”,測試是其中最大的一塊。EP包括:
產(chǎn)品團隊——為整個(gè)Google的所有工程師提供能提高生產(chǎn)力的工具,包括開(kāi)源項目,比如“代碼分析器、IDE、測試用例管理系統、自動(dòng)測試工具、構建發(fā)布系統、版本控制系統、代碼審查安排系統、缺陷數據庫!
服務(wù)團隊——為任何Google員工提供關(guān)于可靠性,安全,國際化等領(lǐng)域的專(zhuān)業(yè)知識,包括“工具、文檔、測試、發(fā)布管理、培訓”等等。
派遣式的工程團隊(Embedded Engineers Team)——在Google,測試人員會(huì )被借調去不同的產(chǎn)品團隊。他們可以選擇為一個(gè)團隊服務(wù)很多年,但公司鼓勵他們去不同的團隊輪崗,從而能夠“在產(chǎn)品知識和新鮮視野之間”保持一個(gè)良好的平衡。這些測試人員參與到產(chǎn)品團隊中的很多不同的關(guān)注域,但是從組織關(guān)系上來(lái)說(shuō),他們匯報給EP管理層。這樣做的理由是能夠建立一個(gè)“讓測試人員共享知識和信息的論壇。好的測試想法在EP內部很容易傳播開(kāi)來(lái),從而使所有測試人員,不管他們?yōu)槟膫(gè)產(chǎn)品服務(wù),都能夠了解到公司內最好的技術(shù)!
這種測試策略帶來(lái)的結果就是相對較少的測試人員。根據Whittaker的觀(guān)點(diǎn),這也可能是因為“我們很少?lài)L試一次快速交付很多功能。事實(shí)上,我們的目標恰恰相反:構建一個(gè)產(chǎn)品的核心部分,一旦它對很多人有價(jià)值,我們就發(fā)布這個(gè)產(chǎn)品,隨后我們收集反饋,繼續迭代!绷硗庖粋(gè)確保質(zhì)量的關(guān)鍵元素是使用多重版本。Whittaker以Chrome為例,介紹了四種不同的版本:
金絲雀版(Canary Channel)——還沒(méi)有做好發(fā)布準備的代碼
開(kāi)發(fā)版——開(kāi)發(fā)人員使用的版本
內部測試版(Test Channel)——為了準備beta發(fā)布的版本
測試(beta)或者發(fā)布版——這個(gè)版本的產(chǎn)品可供Google內部或者公眾使用。
產(chǎn)品發(fā)布以后,如果發(fā)現了一個(gè)缺陷,我們會(huì )編寫(xiě)一個(gè)測試,并且在所有的版本中進(jìn)行驗證,看看這個(gè)缺陷是不是已經(jīng)在某個(gè)版本里面被修復了。
簡(jiǎn)單來(lái)說(shuō),這就是Google用來(lái)測試他們的產(chǎn)品、確保代碼質(zhì)量的流程和組織結構。
文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/