根據IDC全球半年度大數據和分析支出指南的最新預測,到2022年全球大數據和業務分析解決方案的收入將達到2600億美元。在大數據和業務分析解決方案上投資增長最快的行業包括銀行(復合年增長率13.3%)、醫療、保險、證券和投資服務、電信,每個行業復合年增長率都是12.8%。由此可見,大數據類項目在未來的地位將會越發重要,而作為QA,在大數據項目急速擴張的大背景下,也將迎來新的機遇和挑戰。
一、大數據項目的數據特點
大數據項目與傳統交付項目的不同之處在于其關注的重點為數據、算法而不再是用戶操作邏輯、頁面展示等,整個項目將圍繞數據質量和算法結果耗費大量精力。
項目涉及到大量各種格式的數據,如圖像、平面文件、音頻等,其結構和格式不盡相同。與傳統的交付類項目相比,大數據項目的數據量可能會大得多。其數據特點是3 V – Volume,Velocity and Variety:
- 數量:收集的數據量很大,來自不同的來源來自不同的來源,如傳感器,上傳文件,商業交易等。
- 速度:數據以高速創建,必須快速處理。 如RFID標簽,智能電表等儀器可以以前所未有的速度自動生成數據。
- 多樣性:數據有各種格式。它可以是音頻,視頻,數字,文本,電子郵件,衛星圖像,大氣傳感器等。
大數據項目中的測試通常與數據測試,算法測試、功能測試以及性能測試有關。明確大數據項目中測試關鍵點將有助于項目的成功交付。
二、數據質量至關重要
大數據項目中數據流轉是至關重要的一部分,從不同的數據源系統流入至運算操作系統再流出至數據展示系統的過程中都要保障數據質量。
數據質量包括數據的完整性、準確性、一致性、及時性。
- 完整性:指數據記錄是否完整,是否存在缺失的情況。數據缺失包括整條記錄的缺失、某條記錄中字段信息的缺失。數據是否完整直接影響到數據統計結果,是數據質量的基礎。
- 準確性:指數據記錄的信息和數據是否準確,是否存在異常或者錯誤信息。
- 一致性:一般體現在跨度很大的數據倉庫體系中,當體系中存在很多業務數據倉庫分支時,對于同一份數據需要保持一致。比如用戶ID,從在業務庫加工到數據倉庫,再到各個消費節點,必須都是同一種類型,長度也需要保持一致。
- 及時性:對于一些實時系統,甚至一些業務系統可以及時的收集數據、展示數據,給業務決策提供快速的支持和反饋,例如銷售日報。
除了上述四點之外,通常還會根據項目的實際情況進行其他處理以保障數據質量,例如數據去重、無效數據過濾等。
數據在數據系統中的流轉
在多數數據系統中數據以下圖的模式進行流轉,關注數據流轉過程中數據的質量也是QA所面臨的一項重要挑戰:
1.數據從數據源流入到我們所構建的大數據系統
數據從不同的數據源流入大數據系統,一般數據源包括:其他數據系統、CSV或Excel等文件、傳感器、掃描儀、日志等等。在從數據源流入大數據系統前需進行數據清理,以確保得到正確的、需要的數據。在數據量極大的情況下,可能會引入Hadoop(或類似的框架)。無論引入何種框架,都需數據從數據源中以高質量的形式導入至我們所構建的大數據系統中。為驗證此步的數據流轉,需要掌握SQL、Hadoop命令等,這就對QA提出了新的要求。
除此之外,在大數據項目的測試中,由于數據量非常龐大,若非特意進行性能測試,通常只需選取有代表性的少量測試數據集進行測試,以避免每次測試流程都耗費過多時間。所謂有代表性,即這些數據能覆蓋全部的主要計算邏輯和大部分的邊界場景。
2.在大數據系統中進行運算
數據進入系統后,會對數據進一步處理,在處理數據中可能會用到Hive,Python等。作為QA還需掌握以上技能,以便開發腳本來提取和處理數據來進行測試。
大數據系統中對數據的處理會包括邏輯處理和算法挖掘兩種。前者更偏向于業務處理,后者更偏向于數據挖掘或機器學習的算法。例如,假設某系統是對未來三天的天氣進行預測,其用于進行模型訓練的數據包括天氣、溫度、日期、城市等,在開發系統時,開發人員首先將全部數據按照城市進行分組,然后將不同城市的數據輸入到機器學習算法中進行預測。在該系統中“按城市進行分組”即為邏輯處理,“用機器學習算法進行預測”即為算法挖掘。這是一個簡化的例子,通常應用程序會更加復雜,在該系統中對于邏輯處理部分可按照傳統測試方法進行測試,對于算法挖掘部分則需重點關注輸入至算法的數據的正確性以及輸出結果的各項指標表現。
然后將處理后的數據存儲在數據倉庫中。在將數據存儲在數據倉庫中之后,可再次對其進行驗證,以確保它與經過數據系統運算后生成的數據一致。
3.數據結果展示
通常最后一步會將數據暴露給業務人員或下游使用者,通過可視化或者數據接口的形式進行輸出,以便產生業務價值。可能會使用商業智能工具,或者由業務人員使用R、Python等語言進行數據分析,因此有必要對該輸出結果進行驗證。若通過Web頁面將數據以可視化圖表的形式展露給客戶,就需要對Web頁面進行測試,若通過Report的形式報告給客戶,就必須對生成的Report進行測試。此步除了驗證數據的準確性、完整性外,可能還需要驗證數據的及時性。比如直播墻需要對數據統計結果進行實時展示,業務報表可能需要當天或當周進行展示,需滿足系統有不同的時限要求。
以實際項目為例進行簡單介紹
根據項目的不同,以上的架構可能會有細節上的不同,下面以實際項目為例進行簡單的介紹。
例如,在某智慧物流項目中,需對物流訂單進行路徑規劃,將全部的物流訂單(包括接貨訂單和送貨訂單)分配給各個貨車司機,根據訂單的接貨地址和送貨地址以及訂單的時間要求對每個貨車司機的訂單進行路徑規劃。優化的目標是在限制時間內從發貨人手中收取全部貨物并將貨物全部送收貨人手里,且盡可能使路徑總和最小化。其系統結構按照數據流轉可以大致按以下方式劃分:
根據數據在系統中的流轉從左至右來看,測試注意點包括以下幾方面:
- 上傳文件校驗,確保不會有異常數據流入后續的存儲及運算系統中。
- 數據從數據源流入數據庫時的完整性、準確性,確保其從CSV或Excel文件中讀取的數據以正確的格式完整的進入到了數據系統的存儲空間。
- 數據庫中數據按照業務邏輯進行處理后被正確的輸入到算法中。
- 算法邏輯。
- 用戶可見的數據信息是準確有序的按照算法運算結果呈現給終端用戶的。
- 異常情況處理,如數據傳輸過程中突然中斷、輸入給算法的數據過大或過小等情況。
總而言之,數據在系統的各個部分進行流轉,需根據系統的架構、業務的邏輯等,從準確性、完整性、一致性、及時性幾個方面保障數據的質量。
三、驗證算法的結果
對于算法結果的驗證是數據類項目中遇到另一個挑戰,在這里我按照以往的項目經驗總結了“三、二、一”:三個已踐行,二個待實現,一個貫穿始終。
三個已踐行
1.確保每步邏輯正確
在敏捷實踐中對于需求的拆分和追蹤是以Story的形式進行的,數據項目中尤其要確認好每一個Story的輸入數據樣式、輸出數據樣式來確保在開發過程中各個Story之間可以順利銜接,在輔以Kick Off和Desk Check等敏捷實踐,確保Dev、BA、QA對于需求的理解一致。
算法部分一般是調用外部的包直接實現的,一般假設這部分的實現邏輯沒有問題,故重點需關注輸入至算法的數據。
2.向用戶或者業務人員展示結果
若在進行探索研究階段就已經輸出完整的數據處理邏輯和算法處理過程,且其結果得到驗證,項目內容主要是對該研究結果進行工程實現,則需保障工程實現過程中的質量。該情況下,保障質量的方法是把工程實現系統和在探索研究階段輸出的結果進行對比,這也是在幫助客戶進行工程實現時較為常用的一種方法。
算法有固定的輸出結果,比如數據分析類項目中需要統計某類訂單的數量,可以采用構建測試數據和預期輸出數據,判斷系統輸出結果是否與預期相同的方法。
沒有研究階段的輸出結果,也沒有固定的輸出,比如智慧物流系統里路徑規劃,我們采取的方案是將結果展示給貨司機,讓他們去實際按照路線送貨,由真正的用戶來判斷是否是其想要的結果。類似于這種結果無法由開發團隊直接判斷的,需盡早且持續的將結果展示給用戶或相關業務人員,請其對算法結果進行反饋。
3.不同數據集多次驗證。
設計不同的數據集進行驗證,驗證算法在不同數據下的表現,探究算法的邊界。比如上文中提到的智慧物流項目可能適用于上海的場景,不一定適用于北京的場景,因為該算法用于訓練的歷史數據多為上海地區數據。
兩個待實現
1.以最終目標為依據
比如智慧物流,最終的目標是降低成本、提高收入。所以算法本身的指標,比如靈敏度,召回率都不是最終的計算,甚至路程都不是最終的目標。可以設定一個f(x)=總收入-總成本,目標為總成本最低。再比如滴滴的推薦算法,加了一個滴滴司機提供的反饋信息,這個信息只包括一條“你會不會把這個App推薦給朋友”。該推薦算法的目標為提高司機的滿意度以推廣軟件,即為司機將算法推薦給朋友的數量。
2.線上迭代驗證
模型的驗證指標,比如召回率,靈敏度等,作為一個指標放到線上去做驗證。對于上線的模型選取部分測試數據對其進行迭代驗證,在不滿足指標的情況下發出告警。該情況可能是由于隨著時間的推移,用于訓練的歷史數據已經不再適應新的情形導致,需要算法工程師重新對其進行評估。
一個貫穿始終的注意點
真實數據對于系統的驗證非常重要,人為構造的數據無論是在分布形態還是異常場景覆蓋上都比不上真實的生產數據。測試數據分布不同于真實數據時,可能會導致算法在測試階段表現良好,而在進入到生產系統后表現欠佳。在測試數據構造困難的情況下,由于測試數據對異常場景的覆蓋不足,在進入生產系統引入真實數據后,甚至有可能會導致算法實效或系統崩潰等嚴重后果。
而實際項目中,獲取可用于測試的真實數據,往往也是一大挑戰。通常在將真實數據引入測試環節前還需進行至關重要的一步:數據脫敏。由于真實數據中包含了大量的機密信息,故在將真實數據用于測試前通常會將如身份證號、電話、價錢等敏感信息進行脫敏處理。
文/ThoughtWorks 王薇
目前在網上能找到的跟大數據項目測試相關的文章有限,便結合經歷過的項目進行了以上的總結。若有同樣在大數據項目中擔任QA角色的同學,歡迎一起來交流討論。