一淘網測試架構師黃利在他的博客上發布了翻譯的一個專題系列文章:《谷歌如何測試》,整個系列文章從全局到局部地介紹了谷歌有關測試的情況。
譯者黃利在《譯者序》中闡述了在軟件開發模式(尤其是互聯網)中,近幾年的快速迭代發布,以Beta版本線上運行,讓大家對測試產生了一些誤解:
這些應用沒有經過很好地測試,好多功能使用上都有問題; 測試水平比較有限,沒有能及時的發現潛在問題; 測試本身沒有太多的技術,基本上是功能確認,點點鼠標、搭建環境驗證下就可以; 只要認真仔細,有責任心就可以做好測試;
這些誤解讓很多人特別是應屆生,都不會把測試作為職業規劃來考慮,黃利表示:“想通過這個系列的討論,讓大家清楚測試工作如果做好,方法其實并不是想象中的那么簡單和表面上的膚淺,是非常好有挑戰的。”
關于《谷歌如何測試》,黃利已經翻譯了六篇:
• 第一篇:介紹谷歌工程生產力部門構成,以及這種測試人員的項目分離和匯報組織結構的優點與缺點。
谷歌沒有真正的測試部門,測試依托在各個產品部門里,即“工程生產力”,這個部門由以下幾個團隊組成:工具產品團隊(負責內部和外部開源的促進生產力的工具開發與維護);服務團隊(給產品部門提供一些專業的建議,包括一系列工具、文檔、測試、發布管理、培訓等方面,這些專家建議涵蓋可靠性、安全、國際化等,甚至包括產品團隊面對的功能問題);嵌入式的工程師(在需要的時候被產品部門高效地“借”去使用)。
在測試人員的這種項目分離和匯報組織結構中,其優點是開發和測試將具有相同的地位,缺點則由于測試人員被看做外部資源,產品部門團隊不能對測試人員有太多的依賴,他們自己必須要合理地控制產品質量。
• 第二篇:為了讓開發人員效率提升,特別是在質量方面的提升,在傳統的軟件開發人員的之上,增加了幾個角色,特別是需要工程技術方面的特殊角色。
將工程師的角色細分為:軟件開發工程師【SWE,Software Engineer】, 就是傳統的開發人員;軟件測試開發工程師【SET or Software Engineer in Test】,和軟件開發工程師一樣是開發工程師,主要負責軟件的可測試性;軟件測試工程師【Test Engineer】,和軟件測試開發工程師【SET】恰恰相反,主要工作是做測試而不是開發。
從質量的角度來看,軟件開發工程師對功能開發和質量負有全責,軟件測試開發工程師是提供測試支持的開發人員,軟件測試工程師的職責就是最終用戶級別的測試。
• 第三篇:質量不等于測試,“質量不是被測出來的”。
最簡單的辦法是不要區分開發和測試,不要把他們當成對立的活動。測試和開發【注,兩種行為,不是人】最好能手牽手的并行,寫一點代碼就立刻進行測試,寫的越多,測的就要越多。最好是,在編碼的同時,甚至在編碼之前,就考慮清楚這些代碼將如何被測試。測試不是一個單獨的工作,測試就是開發的一部分。所以,質量并不等同于測試,當把開發和測試混在一起,攪拌直到分不清他們彼此的時候,就得到了質量。
對于質量來說,預防問題比發現問題本身更重要。質量是開發人員的問題,而不是測試人員的問題。通過把測試工作融入到開發過程中,我們能降低那些富產 Bug的人的出錯機會,不僅可以避免了大量最終用戶的使用問題,而且還可以極大地降低測試人員報無效Bug的數量。在谷歌軟件測試工程師的工作目標就是檢查這種預防措施是否有效,軟件測試工程師不停地尋找一些證據來證明作為bug的作者和預防者的“軟件開發工程師-軟件測試開發工程師”組合是否存在問題,一旦發現任何不正常,就會拉響警笛。
•第四篇:從爬到走、走到跑的模式,在一個產品的核心模塊被開發后,如果有一定數量的受益人群就立刻發布,然后不斷的得到用戶反饋再迭代開發新功能。
這樣爬、走、跑的模式對分析也有益處。例如,發現了一個bug,測試人員可以根據這個bug創建一個測試用例,并針對所有的每一個版本都運行這個測試用例,從而可以驗證這個 bug fix是否在所有的版本中都真正得到了修復。
• 第五篇:測試范圍的定義,以及自動化測試和手動測試。
“哪些需要被測試及測試范圍的確定,這是一個動態變化的過程,在不同的產品之間會有比較大的差異。谷歌更傾向于頻繁發布,從產品的外面用戶那里得到反饋之后再迭代開發。”
“自動化測試和手動測試,對于所有的三種類型測試【小規模、中等規模、大規模測試】來說當然更喜歡前者。如果能夠被自動化,而且不需要任何人智力和直覺判斷,那就應該把它變成自動化的。只有在特別需要人為判斷的時候,例如用戶的界面是否漂亮、或暴漏一些涉及用戶隱私的內容時,在這些情況下應該保留手動測試。
對于谷歌來說非常重要的是仍然使用了大量的手動測試,不管是使用文本記錄的方式還是使用探索性測試,雖然有些已經進入了自動化測試的視線。業界使用的錄制技術將手動測試轉變成自動化測試,可以在每個版本后自動地重復運行,這樣保證了最少的回歸工作,并把手動測試的重點放在新問題上。而且,谷歌已經將提交BUG的過程和一些手動測試的日常工作也自動化了。
人類智慧的最后一英寸”體現在測試設計上,谷歌的下一代測試工具也正在這個方向上努力嘗試,將其自動化。
• 第六篇:軟件測試開發工程師【SET】的生命
“軟件測試開發工程師【Software Engineers in Test】是軟件工程師,專注在測試實現。首先,軟件測試開發工程師是開發角色”
“通常來說,軟件測試開發工程師不會在早期設計階段就介入。”
“當我說“測試”時,并不是僅僅意味著單純的檢查驗證代碼路徑。測試人員不是從開始就參與進來的,但“測試”卻至始至終都有。實際上,一個開發嘗試去check in代碼的時,測試人員的影響力在這個時刻可能就已經顯現出來了。”
這個系列的文章還沒有完結,也歡迎大家繼續關注黃利的博客分享,并通過InfoQ網站及InfoQ微博等方式參與討論。