摘要:單元測試是方法級別的測試,是保證代碼質量的基礎,一般由開發同學自行完成。但接口測試和測試無法覆蓋所有測試需求,比如算法。
摘要: 質量是企業長遠生存的根基,是企業競爭的免死金牌。作為質量控制團隊的一員,保障和提高所負責系統的質量,是工作的核心。而完善的測試覆蓋,是保證質量的有效手段。
寫在前面
質量是企業長遠生存的根基,是企業競爭的免死金牌。作為質量控制團隊的一員,保障和提高所負責系統的質量,是工作的核心。而完善的測試覆蓋,是保證質量的有效手段。
測試按類型來分,分為功能測試和性能測試。功能測試,按照測試金字塔模型,又分為三種:單元測試、接口測試和 UI 測試。單元測試是方法級別的測試,是保證代碼質量的基礎,一般由開發同學自行完成。接口測試和 UI 測試是端到端的測試,需要覆蓋完整的業務場景,一般由測試同學通過自動化的方式來完成覆蓋,并加入持續集成中,保證所有提交的代碼都不會影響產品的正常功能。
但接口測試和 UI 測試無法覆蓋所有測試需求,比如算法。算法作為機器學習和人工智能的基礎,其有效性至關重要,特別是在集團智能化運維的大潮下,各種算法層出不窮,尋找有效的方法對算法的優劣進行評測就成了測試團隊的職責。但是算法不需要驗證接口,也不需要測試 UI,而是需要建立一套有針對性的評測指標,并想辦法得到被測算法的各項指標值來對算法進行評價。
算法測試
算法測試的流程其實很簡單,只有三步:
構造輸入
使用構造的輸入來運行算法
獲得輸出,并使用算法的輸出來計算各項指標值,對算法做出評價
把算法作為一個黑盒,測試需要做的就是完成第一步和第三步。其中最重要的又是第一步,因為輸入確定了,輸出基本就是確定的,不同點只是在于你如何分析而已。那么如何構造輸入呢?有兩種方法,一是手工構造數據集,優點是較簡單,可以隨意構造,缺點是無法反應線上的真實情況,會出現大量的漏測場景。還有一種方式是直接使用線上的數據,優點是場景覆蓋全面,缺點是數據收集較為耗時。如果能構造一個測試系統,使得線上數據的收集=》算法運行=》輸出評價成為一個完全自動化的流程,那么可以極大的提高算法測試的效率和有效性。
下面將以無人值守發布系統的算法測試為例,介紹一下上述測試思路的一種實現方法。
無人值守發布
無人值守發布(RiskFree)著力與解決快速分析新版本的應用的各項指標以識別異常,攔截有問題的發布,降低發布導致的故障率。無人值守發布系統的輸入主要有三個:ali360 的系統監控和基礎監控數據、sunfire 的業務監控數據、a3 的日志分析數據。通過算法對這三個系統的輸入數據進行分析,得到異常分,對于異常分較高的應用觸發攔截。
故障回放測試
要對無人值守發布系統進行測試,除了保證其基本功能外,最重要的是要對其算法的有效性進行驗證,主要落在兩個指標上:準確率和召回率:
準確率 = 有效攔截 (潛在故障)/ 所有攔截
召回率 = 有效攔截 / 所有應該攔截的發布單
測試需要構造一個數據集,使得通過該輸入得到的輸出可以正確的反映算法的準確率和召回率。給開發一個準確的參考,驗證自己的優化是否有效。
輸入數據集由各個監控系統的輸出數據構成。且不說監控系統輸出的數據量大且復雜,手工構造數據效率底下且工作量大。就算是最后手工成功構造了數據集,也無法保證數據的有效性和覆蓋率。在測試流程里的準確率和召回率高,并不意味著在線上可以有效攔截故障,這就使測試的價值大打折扣。
所以最有效的方法就是直接錄制線上的監控數據,并用該數據集做回放來驗證算法的效果。而且為了提高測試效率,解放雙手,需要將數據的選擇、收集、回放、結果展示做成一個自動化流程,使得開發可以一鍵觸發,選擇任意想要的數據集進行回放。
對于無人值守發布系統來說,一次發布對應一個 plan。所以基本思路就是錄制該 plan 運行過程中三個監控系統產生的所有數據,并分別存放在三個表中。然后調用 riskfree 提供的通過 planId 觸發分析的回放接口,返回對應的錄制數據,完成回放。最后在 plan 分析結束后收集結果,進行展示。下面將錄制和回放模塊分開做詳細講解。
錄制流程
第一步是選擇想要錄制的 plan。本文中選擇的是所有在發布過程中觸發了攔截的 plan。為了計算回放之后的準確率和召回率,需要對這些 plan 進行打標,標記哪些是有效攔截,哪些是誤攔截。標記標準為:無人值守觸發攔截 && 發布單被手工關閉或回滾=有效攔截,其他的都是誤攔截。這種方法理論上可以保證標記的準確性。該任務由定時任務來完成,在每天的零點對前一天的發布單進行過濾,通過對無人值守發布和海狼的數據庫的數據分析,計算出需要選擇的 plan 和對應的標記,存儲到本地的數據庫中。
選好 plan 之后,需要將該 plan 分析過程中獲取的三個監控系統的數據拉取下來并分別保存。流程很簡單,只要把在分析過程中獲取到的監控數據全部保存下來即可。由 riskfree 提供錄制接口,通過 planId 來重新觸發分析,在分析過程中將得到的監控數據通過錄制模塊提供的 API 存儲到錄制模塊的 DB 中。因為監控系統會存儲一個月左右的歷史數據,所以只要錄制及時,所有對應得監控數據都可以獲取到。錄制和回放可以使用同一個接口,通過配置項來判斷本次觸發是錄制還是回放。當然錄制模塊需要做好冪等操作,確保不會有重復得數據被插入到數據集中。
錄制模塊提供了兩種觸發錄制的方式。一是定時任務,會在每天的凌晨一點將第一步中篩選出的 plan 的監控數據收集下來;二是接口觸發方式,可以指定某些 plan 或某個時間段內的 plan 進行錄制,主要是重新錄制在定時任務中錄制失敗的 plan。
回放流程
1.錄制完成以后,本地的 DB 里會包含各個 plan 對應的所有監控數據,回放時只要將這些數據準確的返回給 riskfree 系統即可。為了完全擬合對監控系統的調用方式,需要提供一個 mock 層,分別 mock 對基礎監控、業務監控和日志監控接口的調用。同樣的輸入,mock 接口和線上真實接口返回的數據必須完全一致。實際回放時,在 aone 的配置項里將監控系統的 URL 替換成 mock 層的 URL 即可。
2.riskfree 的上層是運行層。運行層封裝了各種回放模式,包括按 planId 回放、按監控類型回放、按時間段回放、快速回放等等。開發可以通過接口對各種回放模式進行一鍵觸發。運行層的底層是一個并發層,可以配置并發回放 Plan 的個數。通過并發的方式不僅可以壓縮回放時間,提高測試效率。而且可以驗證在高并發的情況下算法的性能表現。
3.最上面一層是展示層,展示方式包括釘釘提醒、測試報告和趨勢圖。每一次回放的開始和結束時會有釘釘提醒,結束時的釘釘提醒包含測試報告的鏈接。測試報告分為概述和詳細信息兩個部分。概述部分包括回放工單總數、有效攔截數、誤攔截數、漏攔截數、準確率和召回率,六個指標,每一個指標都是一個錨點,可以直接跳轉到詳細信息中的對應位置。詳細信息包括五個部分:漏攔截 Plan 詳情、誤攔截 Plan 詳情、與上次回放結果不同的 plan 詳情、與線上運行結果不同的 plan 詳情以及全部回放的 plan 詳情五個部分。每一個詳情部分都是一個表格,包括線上 PlanId、回放后產生的線下 planId、本次運行結果、上次運行結果、本次回放耗時、上次回放耗時、對應發布單狀態等等多個字段。概述信息和詳細信息中的各個對比字段使得開發可以迅速準確的得到本次優化的結果,并快速定位問題。下圖是某次回放結果的部分截圖。
4.為了直觀的展示歷次算法優化的效果,對相同數據集、相同監控類型的回放結果自動生成趨勢圖,并在測試報告中生成對應的鏈接。下圖是歷次對 11-03 到 11-10 時間段的 a3 日志分析數據進行回放的趨勢圖。
寫在最后
算法測試的重中之重是構造數據集,而線上真實的數據集往往比手工構造的數據集更有代表性。上文提到的錄制+回放的方法只需稍加變通即可應用在各個算法評測項目中。只要將錄制和回放串成一個自動化的流程,即可一勞永逸,不必再擔心數據集的構造和更新了。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/8783.html
摘要:作者介紹王藝,百度云智能運維架構研發負責人。年轉向運維方向,作為智能運維架構方向的技術負責人,致力于為百度智能運維平臺和產品提供高性能高可用可擴展的系統架構和基礎設施。持續的數據建設,是智能運維建設的關鍵。 作者介紹王藝,百度云智能運維架構研發負責人。2010年加入百度,先后負責百度鏈接庫、百度志愿計算、百度統一資源管理的研發,經歷過千億級網頁鏈接的洗禮,也調度過數十萬量級的服務器,熱衷于直...
摘要:摘要智能監控是智能運維的子領域,詳細分析。我和我的團隊在阿里內部的分工是橫向去看阿里巴巴業務指標的監控,我們就以這個話題展開。分享分為五個環節,從阿里巴巴不同的業態,特別是新的業態帶來的挑戰講起。 摘要:?智能監控是智能運維的子領域,詳細分析。 showImg(https://segmentfault.com/img/remote/1460000017348788); 作者簡介 王肇...
摘要:從那個時候開始,我就開始用一些機器學習人工智能的技術來解決的運維問題了,有不少智能運維的嘗試,并發表了不少先關論文和專利。而處理海量高速多樣的數據并產生高價值,正是機器學習的專長。也就是說,采用機器學習技術是運維的一個必然的走向。 大家上午好,非常榮幸,能有這個機會,跟這么多的運維人一起交流智能運維。最近這兩年運維里面有一個很火的一個詞叫做AIOps(智能運維)。我本人是老運維了,在2000...
摘要:反正在阿里巴巴,很多的運維人員都說了,我們每年的工作中有一項不用寫的工作就是搬遷。未來我們確實相信阿里巴巴,可能在未來搬遷會相對更少一點,我們認為不能讓搬遷成為阿里巴巴運維團隊的核心競爭力。以上,正是阿里巴巴的運維團隊所覆蓋的五個領域。 隨著大數據、機器學習和 AI 技術的飛速發展,智能化運維成為運維的熱點領域。Gartner 的報告宣稱,到 2020 年,將近 50% 的企業將會在他們的業...
閱讀 2380·2021-11-12 10:34
閱讀 1465·2019-08-29 16:15
閱讀 2678·2019-08-29 15:17
閱讀 1334·2019-08-23 17:09
閱讀 389·2019-08-23 11:37
閱讀 2451·2019-08-23 10:39
閱讀 468·2019-08-22 16:43
閱讀 3107·2019-08-22 14:53