git
七牛雲發展至今,累積已服務於 70 多萬家客戶,產品矩陣愈發清晰豐富,圍繞富媒體場景推出了對象存儲、融合 CDN 加速、容器雲、大數據平臺、深度學習平臺、智能日誌分析平臺等產品,並提供一站式智能視頻雲解決方案。而如何保障這些產品的質量,是七牛雲工程效率部測試服務一直從事和探索的問題。接下來,我將簡要的介紹下咱們的具體實踐以及一些方向上思考,但願對你們有所幫助。
總體的測試策略,咱們主要落實到四個方向:
• 保障基礎代碼質量
• 構建業務測試覆蓋
• 增長質量監測環節
• 普及與改進流程規範
github
首先明確,產品質量並非簡單的測出來的,它依賴於軟件生命週期中的各個環節,且越是早期進行質量保證活動,效果會越好。因此在提測以前的基礎代碼質量上,咱們很是看重。在把控上,咱們會重點參與到三個交付物環節的 review,具體包括需求評審、架構評審,以及咱們的測試設計評審,確保產品從規劃、實現和驗收標準上就符合整個團隊的預期。
同時咱們也在推廣和探索測試技術應如何更好的自動化保障基礎代碼。好比咱們會經過靜態掃描週期性的檢查全部代碼庫,爲開發人員提供反饋,讓其知道哪裏作的有問題。同時經過收集語言層面的編程規範,推廣 code review 最佳實踐。固然,單元測試層面也會重點強化基礎服務建設。
在七牛雲,核心業務庫的單測覆蓋達到了 80%+,好比核心糾刪碼存儲系統,自研 HTTP 緩存服務等。同時咱們會把單測覆蓋率統計自動化作到每一個 github PR 的統計上,讓你們清晰的看到,本次提交的覆蓋率詳情如何,爲研發和 code review 人員提供清晰指引:

編程
有了基礎代碼的質量保障,咱們還要從業務角度關注產品質量到底怎麼樣,作好質檢和驗收。
先說迭代模式,咱們在接到研發的提測需求時,首先會檢查這一階段的准入標準,好比單測是否符合標準,代碼是否有人 review 過,不符合標準會被打回,符合標準的,就會進入待測試階段。以後會在充分把握需求的同時,對具體技術實現細節,進行深刻理解和分析,在此基礎上進行具體測試場景的設計或者補充,再到最終的測試執行。以後研發在拿到咱們輸出的驗收結論時,也要 review 這個結果,是否有明顯遺漏。經過這種互相檢查機制,再加上深刻到代碼細節的白盒測試,確保整個交付的質量嚴格把控。
其次在測試執行的具體策略,也是遵循分層理念,不光驗收單個服務的接口行爲,還要確保多個服務之間的集成測試,以及最終系統層面的場景驗收經過。
固然除了常規測試手段,在雲服務測試上,還有幾個點是咱們比較看重的。
七牛雲存儲
雲服務通常都是分佈式,高可用架構,咱們在測試一個接口時,一次請求沒問題,不表明這個接口就沒問題。不少時候,問題都須要在併發場景,必定壓力下才會暴漏。因此在平時的測試驗收上,這一點須要特別注意。固然在過往的經驗中,咱們也積累較多的 go 語言併發模型及相關測試框架的使用經驗,能讓咱們在平時的迭代中,輕鬆自如的作到這一點。
緩存
常規的測試驗收是保證系統在正常的情形下作正確的事,而高可用測試,考量的則是若是服務所依賴的環境不符合預期了,系統還能正常工做嗎?實踐發現,在面對多機房,海量機器的場景下,雲計算基礎設施出問題的機率是很是大的。比較常見的如磁盤損壞、網絡故障、機器宕機等等,可能時時刻刻都在發生,每一種故障都有可能引起數據丟失、系統雪崩等重大災難,對業務形成難以估量的損失。因此雲服務的高可用測試尤爲重要。
有一個很典型的例子,就是咱們在驗證七牛雲存儲核心存儲引擎的刪除回收功能時,須要在測試環境不間斷的模擬各類文件的上傳與下載,以及隨機刪除請求,同時還要對整個存儲系統注入各類隨機的異常場景,如服務掛掉,磁盤損壞等,而後在這樣的場景下,連續不間斷的測試一個月以上,確保全部預期數據不丟失,不損壞,方纔算驗收經過。其標準之苛刻,可見一斑。
網絡
雲服務都是服務海量用戶,任何的嚴重錯誤都是不可容忍的。可是咱們知道測試矩陣又是無窮盡的,在有限的測試人力下,不能盲目地投入到無限測試中去。因此在如何提升測試覆蓋率方向上,咱們也是一直在探索。目前主要從兩大方向着手。一是精準測試,咱們內部研發了 go 語言的系統測試覆蓋率統計系統,可以精確從源碼層面反應測試覆蓋程度,來輔助咱們平常的迭代。另外一方面,經過複製線上真實流量來驗收每個版本迭代,確保無迴歸問題。這一方案,已運用在七牛雲 CDN 緩存系統的常規質量保障上,效果顯著。
架構
前面咱們從代碼質量和業務驗證角度,描述咱們如何保障質量。但實踐中發現,還有些場景和問題,上述場景並不能很好的覆蓋到。好比句柄泄露,內存泄露等問題,這種問題須要必定的時間的發酵,且單純的從業務角度,感知也不會太明顯。而質量監測體系就幫咱們解決這個問題,因此咱們將業務質量的監測結果提高到常規的迭代驗收層面。
在平時,咱們不只驗收服務的對外行爲,還須要關注業務調用鏈是否健康,服務的自身運行時是否有問題,業務性能指標是否有退化等等。經過這些手段,儘量的在測試階段就檢出更多的問題,減小問題遺漏到線上的概率。若是說業務驗收從用戶角度來考慮,那麼業務質量監測就是從整個系統端來度量。各有各的優點,在質量保證體系裏,兩者缺一不可。
併發
技術在不一樣階段總有其侷限性,任何環節出問題,影響產品最終服務客戶的質量都是不可容忍的。因此在常規的技術保障以外,咱們也會推進和普及必定的流程規範, 確保全流程,各個環節的質量有效把控,好比典型的迭代規範,發佈和線上操做規範,以及事故處理流程等等。
框架
「牛人說」專欄致力於技術人思想的發現,其中包括技術實踐、技術乾貨、技術看法、成長心得,還有一切值得被發現的內容。咱們但願集合最優秀的技術人,挖掘獨到、犀利、具備時代感的聲音。
分佈式