七牛雲工程效率部測試服務如何為 70 萬+ 客戶保駕護航?
七牛雲發展至今,累積已服務於 70 多萬家客戶,產品矩陣愈發清晰豐富,圍繞富媒體場景推出了對象存儲、融合 CDN 加速、容器雲、大數據平臺、深度學習平臺、智能日誌分析平臺等產品,並提供一站式智能視頻雲解決方案。而如何保障這些產品的質量,是七牛雲工程效率部測試服務一直從事和探索的問題。接下來,我將簡要的介紹下我們的具體實踐以及一些方向上思考,希望對大家有所幫助。
?
整體的測試策略,我們主要落實到四個方向:?
?
? 保障基礎代碼質量
? 構建業務測試覆蓋
? 增加質量監測環節
? 普及與改進流程規範
?
保障基礎代碼質量
?
首先明確,產品質量並不是簡單的測出來的,它依賴於軟件生命周期中的各個環節,且越是早期進行質量保證活動,效果會越好。所以在提測之前的基礎代碼質量上,我們非常看重。在把控上,我們會重點參與到三個交付物環節的 review,具體包括需求評審、架構評審,以及我們的測試設計評審,確保產品從規劃、實現和驗收標準上就符合整個團隊的預期。
同時我們也在推廣和探索測試技術應如何更好的自動化保障基礎代碼。比如我們會通過靜態掃描周期性的檢查所有代碼庫,為開發人員提供反饋,讓其知道哪裏做的有問題。同時通過收集語言層面的編程規範,推廣 code review 最佳實踐。當然,單元測試層面也會重點強化基礎服務建設。
?
在七牛雲,核心業務庫的單測覆蓋達到了 80%+,比如核心糾刪碼存儲系統,自研 HTTP 緩存服務等。同時我們會把單測覆蓋率統計自動化做到每個 github PR 的統計上,讓大家清晰的看到,本次提交的覆蓋率詳情如何,為研發和 code review 人員提供清晰指引:
?
?
?
構建業務測試覆蓋
?
有了基礎代碼的質量保障,我們還要從業務角度關註產品質量到底怎麽樣,做好質檢和驗收。
先說叠代模式,我們在接到研發的提測需求時,首先會檢查這一階段的準入標準,比如單測是否符合標準,代碼是否有人 review 過,不符合標準會被打回,符合標準的,就會進入待測試階段。之後會在充分把握需求的同時,對具體技術實現細節,進行深入理解和分析,在此基礎上進行具體測試場景的設計或者補充,再到最終的測試執行。之後研發在拿到我們輸出的驗收結論時,也要 review 這個結果,是否有明顯遺漏。通過這種互相檢查機制,再加上深入到代碼細節的白盒測試,確保整個交付的質量嚴格把控。
?
其次在測試執行的具體策略,也是遵循分層理念,不光驗收單個服務的接口行為,還要確保多個服務之間的集成測試,以及最終系統層面的場景驗收通過。
當然除了常規測試手段,在雲服務測試上,還有幾個點是我們比較看重的。
?
?
常態化並發場景下的測試驗收
?
雲服務一般都是分布式,高可用架構,我們在測試一個接口時,一次請求沒問題,不代表這個接口就沒問題。很多時候,問題都需要在並發場景,一定壓力下才會暴漏。所以在平時的測試驗收上,這一點需要特別註意。當然在過往的經驗中,我們也積累較多的 go 語言並發模型及相關測試框架的使用經驗,能讓我們在平時的叠代中,輕松自如的做到這一點。?
?
?
高可用測試
?
常規的測試驗收是保證系統在正常的情形下做正確的事,而高可用測試,考量的則是如果服務所依賴的環境不符合預期了,系統還能正常工作嗎?實踐發現,在面對多機房,海量機器的場景下,雲計算基礎設施出問題的概率是非常大的。比較常見的如磁盤損壞、網絡故障、機器宕機等等,可能時時刻刻都在發生,每一種故障都有可能引發數據丟失、系統雪崩等重大災難,對業務造成難以估量的損失。所以雲服務的高可用測試尤其重要。
?
有一個很典型的例子,就是我們在驗證七牛雲存儲核心存儲引擎的刪除回收功能時,需要在測試環境不間斷的模擬各種文件的上傳與下載,以及隨機刪除請求,同時還要對整個存儲系統註入各種隨機的異常場景,如服務掛掉,磁盤損壞等,然後在這樣的場景下,連續不間斷的測試一個月以上,確保所有預期數據不丟失,不損壞,方才算驗收通過。其標準之苛刻,可見一斑。
?
?
盡可能提高測試覆蓋率
?
雲服務都是服務海量用戶,任何的嚴重錯誤都是不可容忍的。但是我們知道測試矩陣又是無窮盡的,在有限的測試人力下,不能盲目地投入到無限測試中去。所以在如何提高測試覆蓋率方向上,我們也是一直在探索。目前主要從兩大方向著手。一是精準測試,我們內部研發了 go 語言的系統測試覆蓋率統計系統,能夠精確從源碼層面反應測試覆蓋程度,來輔助我們日常的叠代。另一方面,通過復制線上真實流量來驗收每一個版本叠代,確保無回歸問題。這一方案,已運用在七牛雲 CDN 緩存系統的常規質量保障上,效果顯著。
?
質量監測體系
?
前面我們從代碼質量和業務驗證角度,描述我們如何保障質量。但實踐中發現,還有些場景和問題,上述場景並不能很好的覆蓋到。比如句柄泄露,內存泄露等問題,這種問題需要一定的時間的發酵,且單純的從業務角度,感知也不會太明顯。而質量監測體系就幫我們解決這個問題,所以我們將業務質量的監測結果提升到常規的叠代驗收層面。
?
在平時,我們不僅驗收服務的對外行為,還需要關註業務調用鏈是否健康,服務的自身運行時是否有問題,業務性能指標是否有退化等等。通過這些手段,盡可能的在測試階段就檢出更多的問題,減少問題遺漏到線上的幾率。如果說業務驗收從用戶角度來考慮,那麽業務質量監測就是從整個系統端來度量。各有各的優勢,在質量保證體系裏,二者缺一不可。
?
流程規範普及與改進
?
技術在不同階段總有其局限性,任何環節出問題,影響產品最終服務客戶的質量都是不可容忍的。所以在常規的技術保障之外,我們也會推動和普及一定的流程規範, 確保全流程,各個環節的質量有效把控,比如典型的叠代規範,發布和線上操作規範,以及事故處理流程等等。
?
?
?
牛人說
?
「牛人說」專欄致力於技術人思想的發現,其中包括技術實踐、技術幹貨、技術見解、成長心得,還有一切值得被發現的內容。我們希望集合最優秀的技術人,挖掘獨到、犀利、具有時代感的聲音。
?
?
七牛雲工程效率部測試服務如何為 70 萬+ 客戶保駕護航?