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

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

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

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

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

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

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

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

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

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