本文是從 How Google Tests Software - Part Two 這篇文章翻譯而來。本文作者 James Whittaker, 前微軟架構(gòu)師,是“How to Break Software”系列圖書中好幾部書的作者,現(xiàn)任Google測試工程主管,近他寫了一系列的關(guān)于谷歌如何測試軟件的文章,本文為其系列的第二部分。

  為了實(shí)現(xiàn)”誰的屁股誰自己擦”這句名言所說的那樣,在傳統(tǒng)的軟件開發(fā)人員的之上,有必要增加了幾個(gè)角色,特別是需要工程技術(shù)方面的特殊角色,這種角色可以讓開發(fā)更高效低做測試。在谷歌,這樣角色的職責(zé)是讓其他人工作的更有效率,這樣的工程師通常會(huì)把自己當(dāng)做測試人員,但他們真正的使命是提高生產(chǎn)力/生產(chǎn)率。他們的存在是為了讓開發(fā)人員效率提升,特別是在質(zhì)量方面的提升,因?yàn)楫a(chǎn)品質(zhì)量是生產(chǎn)率中重要的一部分。這里是這些角色的總結(jié):

  軟件開發(fā)工程師, 是傳統(tǒng)的開發(fā)人員。軟件工程師實(shí)現(xiàn)一些功能代碼并把終產(chǎn)品提供給用戶使用,他們創(chuàng)建設(shè)計(jì)文檔、設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)和總體的架構(gòu)搭建,他們大多數(shù)時(shí)間都在寫代碼和評審代碼。同時(shí),他們也會(huì)寫很多的測試代碼,包括測試驅(qū)動(dòng)設(shè)計(jì),單元測試,并參與后面的文章會(huì)講到的小、中、大型測試的創(chuàng)建工作。軟件工程師需要對他們自己寫的代碼、修復(fù)缺陷的代碼、改進(jìn)的代碼,只要是他們接觸過的代碼的質(zhì)量負(fù)責(zé)。

  軟件測試開發(fā)工程師,和軟件開發(fā)工程師一樣是開發(fā)工程師,主要負(fù)責(zé)軟件的可測試性。他們參與設(shè)計(jì)評審,近距離地關(guān)注代碼質(zhì)量和風(fēng)險(xiǎn),對代碼做重構(gòu)為了系統(tǒng)有更好的可測試性,同時(shí)他們負(fù)責(zé)寫單元測試框架和自動(dòng)化測試的框架。在代碼級(jí)別上他們和軟件開發(fā)工程師是合作伙伴,但如果和增加新功能或提升性能相比較,他們更關(guān)心產(chǎn)品的質(zhì)量和測試覆蓋率的提升。

  軟件測試工程師,和軟件測試開發(fā)工程師恰恰相反,他得主要工作是做測試而不是開發(fā)。許多谷歌的軟件測試工程師會(huì)花很多的時(shí)間在寫測試代碼上,包括自動(dòng)化腳本、使用場景的代碼、甚至模擬終用戶的操作方面的代碼。他們對軟件開發(fā)工程師和軟件測試開發(fā)工程師的測試工作做一些組織安排,解釋測試結(jié)果、驅(qū)動(dòng)測試的執(zhí)行,特別是在項(xiàng)目即將發(fā)布的后期將起到非常重要的作用。軟件測試工程師既是產(chǎn)品專家也是質(zhì)量顧問更是風(fēng)險(xiǎn)分析師。

  從質(zhì)量的角度來看,軟件開發(fā)工程師對功能開發(fā)和質(zhì)量負(fù)有全責(zé)。同時(shí),他們還負(fù)責(zé)容錯(cuò)設(shè)計(jì)、故障恢復(fù)、TDD、單元測試、和在軟件測試開發(fā)工程師的幫助下寫測試代碼,這些測試代碼會(huì)驗(yàn)證開發(fā)的功能。

  軟件測試開發(fā)工程師是提供測試支持的開發(fā)人員。他們提供一種能夠?qū)⑿绿砑拥拇a通過模擬其依賴的方式做功能驗(yàn)證的技術(shù)框架,并應(yīng)用在代碼提交之前的提交隊(duì)列管理之中【注,這樣可以在代碼check in 的時(shí)候保證新代碼的功能完備】?梢赃@樣說,軟件測試開發(fā)工程師是為了讓軟件工程師可以測試他們的功能代碼,所有真正的測試都是軟件開發(fā)工程師完成的,軟件測試開發(fā)工程師是保證這些功能有很好的可測試性,這樣可以讓軟件開發(fā)工程師很積極地參與到測試用例代碼的編寫中去。

  現(xiàn)在所有的一切很清楚了,軟件測試開發(fā)工程師是服務(wù)人員,他們的主要職責(zé)讓開發(fā)人員很方便簡單的做測試并保證模塊級(jí)別的產(chǎn)品質(zhì)量。讀者可能已經(jīng)意識(shí)到一個(gè)問題,在這樣的研發(fā)流程下,使用軟件的終用戶會(huì)怎樣?

  在谷歌,軟件測試工程師的職責(zé)是終用戶級(jí)別的測試。如果軟件開發(fā)工程師和軟件測試開發(fā)工程師很好地做了模塊級(jí)別的功能測試,下一個(gè)工作是看許多功能集成和數(shù)據(jù)的組合是否能夠滿足終用戶的使用需求。軟件測試工程師在這里是扮演一個(gè)雙重確認(rèn)開發(fā)工程師測試工作的角色,任何明顯的缺陷都會(huì)說明之前一輪的開發(fā)自測不夠或比較草率,如果沒有出現(xiàn)這種情況之后,軟件測試工程師會(huì)將注意力轉(zhuǎn)移到普通用戶的使用場景測試上,保證性能、安全、國際化等方面沒有問題。軟件測試工程師們需要做大量的測試工作,并在測試工程師、測試合同工、吃狗糧的嘗鮮者、beta測試用戶、早期終用戶之間做很多溝通交流的工作,他們會(huì)和基礎(chǔ)設(shè)計(jì)、功能復(fù)雜度、避免錯(cuò)誤的方法等方面遇到問題的人做確認(rèn)。一旦軟件測試工程師開始介入,總是會(huì)沒完沒了。

  好了,現(xiàn)在大家對這些角色應(yīng)該有比較好的理解了,接下來我會(huì)在他們之間是怎么分工合作做更詳盡的剖析。下次再聊。。。謝謝您的關(guān)注。