google測試分享-分層測試
作為網際網路產品來說,我們可以認為產品一直都在beta階段,為什麼這麼說。兩個原因一個是是我們需要使用者的真實體驗來告訴專案團隊這個產品的質量到底怎麼樣,另外一個就是我們一旦發現影響較大的bug,我們可以很快的fix bug,讓產品體驗得到迅速的提升。
在網際網路產品的新專案啟動過程中,google為了讓SET和TE都能在專案中發揮更大的價值,同時為了讓開發人員具有很高的測試意識和質量意識,特意將專案的測試階段分成三個階段:
小型測試:主要包括單元測試、模組測試,使用mock、fake 等技術來完成,這個階段SET通常會參與進來,但是開發人員仍然是測試的主力,TE卻很少參與。測試執行都是自動化測試執行。
中型測試:主要包括元件測試、特殊區域的整合測試、功能互動的整合測試,這個階段部分是自動化測試執行,部分是手工測試執行。
大型測試:主要包括長鏈路的整合測試、系統測試。從真實使用者的角度,使用真實的資料進行使用者體驗性的測試。這個階段的測試耗時較長,大部分是手工測試,考慮整體產品的服務質量。
在專案測試計劃過程中,會對小型、中型、大型測試做一個比較詳細的區分,也就是測試範圍的確定,這三個型別的測試的比例很關鍵,不同專案也是不一樣的,一個判斷是否健康的標準是看程式碼覆蓋率。總體上,70/20/10原則:70%是小型測試、20%是中型測試、10%是大型測試。面向使用者的、基礎平臺的會不一樣。下面詳細的說明在不同型別的測試活動上,開發、SET、TE是如何緊密的合作的。
小型測試階段,開發人員主導測試程式碼的編寫和測試執行。SET和開發人員一起進行單元測試的測試設計,部分功能的測試程式碼編寫,幫助做可測試性上的分析。開發寫程式碼是建立、考慮使用者、使用場景和資料流程上,而測試是破壞、擾亂分離使用者及其資料,所有寫功能程式碼和測試程式碼的思維是不一樣的。CI起來後的小型測試的測試執行也是由開發人員主導的,小型測試在每次code commit後的執行情況都需要開發人員主動去了解並保證所有小型測試的結果都是PASS。其實這裡面還包括code review,每個checkin的程式碼都需要經過SET和開發人員的code review。所以Change list裡面顯示的不僅僅是功能程式碼,還包括測試程式碼。
中型測試階段,SET主導測試程式碼的編寫和測試執行。對於一個產品的CI來說,小型測試和中型測試的測試程式碼持續執行和迴歸由開發人員、SET、TE共同負責,並不是說由某一個角色來負責。其實也就是說TE也會參與中型測試的測試程式碼的維護和執行工作。對於複雜系統來說,中型測試的測試覆蓋率可能會更高,SET參與的力度會更大。這個階段,和我們國內通常做的介面測試有很多相似之處,介面測試其實包含單個重要介面的介面測試和多個介面之間的整合介面測試。對於阿里來說,上層業務基本上就做單個重要介面的介面測試,而針對中心級別的底層系統,更多的是多個介面之間的整合介面測試。
大型測試階段,主要是TE主導系統級別的自動化測試和手工測試。大型測試的優點就是能夠真正的站在使用者的角度去使用產品,體驗產品,總體上把控產品的功能和效能等其他特性(這個正好是TE很擅長的能力)。當然缺點就是發現bug後,精準的找到失敗的原因比較困難;另外一個就是測試資料準備工作比較耗時,很難走到特定的程式碼路徑區域(較多的異常else語句)。需要強調的是這些手工執行的case並不僅僅是TE來執行,專案組的其他成員包括PM、PD、開發人員、SET都會得到手工執行case的執行任務,總體策略和結果分析由TE全程把控。
產品總體質量的dashboard需要展示每次build測試結果、測試進度、自動化測試機構、程式碼覆蓋率。開發人員甚至比SET更加關注CI的結果,而國內的開發人員很少主動關心CI結果,很多時候都是被測試人員通知到,然後還看心情。針對於複雜的系統,我們都需要建立構建依賴規則(記得之前淘寶測試開發了一個dependence系統,將系統之間的依賴關係全部對映出來,跟進code change來實時通知迴歸機制,挺好的事情,不知道後面為啥沒了),通過程式碼變更的地方,來找到本次修改需要run的測試集;比如通用庫上程式碼變更、一個依賴專案上程式碼變更等,使持續整合和錯誤定位更加精準。
這裡面可以發現google的測試階段的劃分和分層和大部分網際網路公司是一致的,但是google會更加強調小型測試階段的投入產出比,使用自動化測試手段來使用程式碼去測試程式碼,增加確定性和持續性,相比於手工測試而言。另外一個不同點就是google的開發對CI後的結果的重視程度也遠超與國內開發人員,最近幾年自動化測試的發展很快,國內很多測試團隊都寫了很多自動化測試程式碼並CI起來了,但是CI結果的利用以及完善和維護沒有跟上來,很多大公司也存在這樣的問題,他們更多的是關心編寫了測試程式碼,關心自己有能力編寫程式碼,而不去關心維護測試程式碼,不去關心測試程式碼有沒有發揮它應有的價值。
個人認為真正的測試架構師可以輕鬆的把任何一個SUT分層測試策略規劃出來,甚至在架構和功能細節上進行細分,讓分層測試更加的有效和合理,從而體現整個產品的質量控制計劃的完美性,當然也會參與需要用到的測試工具的架構技術和思路上的指導。在SET和TE做的都比較不錯的才可以把這個任務做的那麼完美,否則只會寫程式碼的人、只會黑盒系統測試的人都無法對SUT進行徹底的理解,並快速的給出最佳的分層測試方案。
相關文章
- 測試測試測試測試測試測試
- 測試教程分享
- httprunner 介面測試用例分層的疑惑HTTP
- HttpRunner 的測試用例分層機制HTTP
- iOS打測試包與分發測試iOS
- Google 單元測試框架Go框架
- 介面測試框架接入效能測試實踐分享框架
- 軟體驗收測試之α測試和β測試分別是什麼?
- 《Google軟體測試之道》 第一章google軟體測試介紹Go
- LoadRunner測試Google SuggestGo
- 為什麼要做介面測試?可做介面測試的軟體測試公司分享
- 軟體測試——三、軟體測試的分類
- 當面試說起分層測試如何進行時......面試
- 四個類搞定分層自動化測試框架框架
- 微信分享測試步驟
- Golang 單元測試 - 介面層Golang
- 軟體功能測試的測試流程有哪些?軟體測試公司排名分享
- Spring Boot單元測試之服務層測試總結Spring Boot
- 滲透測試對app安全測試實戰過程分享APP
- 乾貨分享▏軟體效能測試包括哪些測試內容?
- 【分享】軟體測試企業面試試卷面試
- 軟體測試分類
- App測試、Web測試和介面測試一般測試流程APPWeb
- 介面測試測試流程
- 發現深層次的bug——業務測試 1、業務測試簡介
- 軟體測試為什麼需要自動化測試框架?權威軟體測試公司分享框架
- 讓測試事半功倍軟體壓力測試工具分享,壓力測試報告怎麼收費?測試報告
- 介面測試工具好物分享,讓你的軟體測試事半功倍
- 軟體測試培訓分享:效能測試的目的是什麼
- Flutter 學習之路 - 測試(單元測試,Widget 測試,整合測試)Flutter
- 介面測試,負載測試,併發測試,壓力測試區別負載
- Golang 單元測試 - 邏輯層Golang
- Golang 單元測試 - 資料層Golang
- 黑盒測試、白盒測試、單元測試、整合測試、系統測試、驗收測試的區別與聯絡...
- 測試CMS同步測試CMS同步測試CMS同步
- (一)效能測試(壓力測試、負載測試)負載
- 認識軟體測試步測試測試 (轉)
- 軟體測試工程師如何從功能測試轉成自動化測試?經驗分享篇工程師