隨著科學(xué)的進(jìn)步棺榔、技術(shù)的不斷更新瓶堕,世界已全面進(jìn)入數(shù)字化和智能化時代。2021年3月症歇,國家“十四五”規(guī)劃的正式發(fā)布郎笆,進(jìn)一步催化了各大小企業(yè)爭分奪秒的進(jìn)行數(shù)字化轉(zhuǎn)型谭梗、大數(shù)據(jù)賦能業(yè)務(wù)、數(shù)智化創(chuàng)新等舉措宛蚓,為的就是不久的將來企業(yè)緊跟時代發(fā)展不被科技進(jìn)步所淘汰激捏。
近年來,數(shù)據(jù)倉庫凄吏、數(shù)據(jù)平臺远舅、數(shù)據(jù)中臺的建設(shè)爆炸式增長,相關(guān)的技術(shù)與架構(gòu)也紛紛涌躍與各大社區(qū)或公眾號痕钢,本文從測試視角图柏,總結(jié)分享一些在數(shù)據(jù)項目中積累的戰(zhàn)術(shù)(策略)與武器(工具)。
在分享測試戰(zhàn)術(shù)之前任连,先簡單介紹一下數(shù)據(jù)項目的數(shù)據(jù)分層架構(gòu)蚤吹。
數(shù)據(jù)分層架構(gòu)
數(shù)據(jù)分層架構(gòu)并沒有固定的標(biāo)準(zhǔn),行業(yè)內(nèi)數(shù)據(jù)分層通常是分為三個層:ODS(Operation Data Store) - DW(DataWarehousel) - ADS(Data Warehouse Service)随抠。
- ODS數(shù)據(jù)運營層:即原始數(shù)據(jù)層裁着,與業(yè)務(wù)系統(tǒng)基本同構(gòu),目的是保留歷史拱她,解耦業(yè)務(wù)數(shù)據(jù)庫二驰,這樣整個數(shù)據(jù)平臺只需要訪問一次業(yè)務(wù)數(shù)據(jù)庫即可。ODS 層有些時候會細(xì)分為兩層秉沼,一個 STG 數(shù)據(jù)緩沖層诸蚕,存原始數(shù)據(jù),一個 ODS氧猬,存簡單清洗的數(shù)據(jù)。
-
DWD數(shù)據(jù)倉庫層:由下到上為 DWD(Data Warehouse Detail) -> DWB(Data Warehouse Base) -> DWS(Data Warehouse Service) 坏瘩。
-
DWD明細(xì)數(shù)據(jù)層
盅抚,對數(shù)據(jù)進(jìn)行清洗、代碼統(tǒng)一倔矾、字段統(tǒng)一妄均、格式統(tǒng)一、簡單映射等工作哪自,是為后續(xù)的處理提供統(tǒng)一丰包、標(biāo)準(zhǔn)的數(shù)據(jù)。 -
DWB基礎(chǔ)數(shù)據(jù)層
壤巷,存儲的是客觀數(shù)據(jù)邑彪,一般用作中間層,可以認(rèn)為是大量指標(biāo)的數(shù)據(jù)層胧华。 -
DWS服務(wù)數(shù)據(jù)層
寄症,基于DWB上的基礎(chǔ)數(shù)據(jù)宙彪,整合匯總成分析某一個主題域的服務(wù)數(shù)據(jù),一般是寬表
-
- ADS數(shù)據(jù)服務(wù)層:主要是提供給數(shù)據(jù)產(chǎn)品和數(shù)據(jù)分析使用的數(shù)據(jù)有巧,包括前端報表释漆、分析圖表、KPI篮迎、儀表盤等分析男图,面向最終結(jié)果用戶。
測試戰(zhàn)術(shù)與裝備
戰(zhàn)術(shù)一:依照數(shù)據(jù)分層架構(gòu)甜橱,由底上向逐層驗證逊笆。(復(fù)雜問題簡單化)
無論你是數(shù)倉項目、還是在數(shù)據(jù)平臺類項目上,數(shù)據(jù)的完整鏈路非常長,從最底層的ODS到最上層的ADS脆荷,經(jīng)過了很多步的數(shù)據(jù)轉(zhuǎn)換與邏輯處理程储,如果不進(jìn)行分層驗證,那么以政,端對端的測試復(fù)雜度非常高;而且,發(fā)現(xiàn)問題后偏化,Debug的難度和時間成本也較高。
目前不少數(shù)據(jù)測試團隊栽倒在此環(huán)節(jié)镐侯,還停留在只做端對端測試侦讨,測試痛苦且效率低下。
戰(zhàn)術(shù)二:依照精準(zhǔn)定位+全量捕漏苟翻,精準(zhǔn)造測試數(shù)據(jù)驗證韵卤,生產(chǎn)全量數(shù)據(jù)探查。
在測試環(huán)節(jié)崇猫,面對單步任務(wù)處理邏輯沈条,由于數(shù)據(jù)場景較多,測試難度不小诅炉。所以蜡歹,更需要精準(zhǔn)構(gòu)造每一條測試數(shù)據(jù)來完成場景覆蓋。避免多余場景數(shù)據(jù)造成干擾涕烧、防止數(shù)據(jù)混亂導(dǎo)致場景遺漏月而,數(shù)據(jù)場景清淅、易于精準(zhǔn)定位問題议纯、提高效率父款。
大數(shù)據(jù)時代下,面對真實環(huán)境的數(shù)據(jù)體量大、數(shù)據(jù)多樣铛漓、數(shù)據(jù)質(zhì)量差等現(xiàn)狀溯香,過去的測試環(huán)境構(gòu)建測試數(shù)據(jù)變更更加困難,而且總有意想不到的數(shù)據(jù)情況在生產(chǎn)浓恶,所以一定要盡早上線驗證探查玫坛。
戰(zhàn)術(shù)三:依照數(shù)據(jù)開發(fā)生命周期,每一環(huán)節(jié)進(jìn)行質(zhì)量檢驗包晰。
無論你是瀑布開發(fā)還是敏捷開發(fā)方式湿镀,在整個開發(fā)生命周期展開驗證、形成閉環(huán)伐憾。
-
瀑布團隊:需求階段 -> 架構(gòu)設(shè)計 -> 開發(fā)階段 -> 測試階段 -> 生產(chǎn)線上勉痴。
- 需求階段:對需求進(jìn)行評審,從數(shù)據(jù)質(zhì)量的六個維度(完整性树肃、一致性蒸矛、準(zhǔn)確性、唯一性胸嘴、及時性雏掠、有效性)評審需求文檔中是否存在不符合項,從需求的價值角度評審是否合理劣像,從覆蓋場景角度評審是否有遺漏或不符合場景等乡话,從數(shù)據(jù)安全、性能等非功能性方面評審是否有不符合項耳奕。
- 架構(gòu)設(shè)計:參加架構(gòu)設(shè)計評審會議绑青,對于數(shù)據(jù)分層架構(gòu)評審需要關(guān)注是否數(shù)據(jù)結(jié)構(gòu)清晰、是否方便數(shù)據(jù)血緣追蹤屋群、是否把復(fù)雜問題簡單化(比如闸婴,把復(fù)雜的任務(wù)拆解成多步驟、每一層處理單步芍躏,便于維護(hù)數(shù)據(jù)準(zhǔn)確性掠拳,也易于定位或修復(fù)問題)、是否能屏蔽業(yè)務(wù)的影響(比如纸肉,改一處需求,指標(biāo)維度變更還得重新接入數(shù)據(jù))喊熟。
- 開發(fā)階段:提前編寫測試用例(構(gòu)建測試數(shù)據(jù)柏肪、數(shù)據(jù)即用例),與開發(fā)人員提前對齊目標(biāo)結(jié)果芥牌。代碼開發(fā)完成后烦味,及時用準(zhǔn)備好的測試數(shù)據(jù)進(jìn)行驗證。
- 測試階段:更多的是進(jìn)行探索式測試,減少重復(fù)測試(比如谬俄,開發(fā)階段的測試數(shù)據(jù)以及環(huán)境都沒有差異柏靶,無需重復(fù)測試),如QA環(huán)境有脫敏生產(chǎn)數(shù)據(jù)溃论,重點進(jìn)行數(shù)據(jù)探查驗證(參見:《一定要做數(shù)據(jù)探查》)
- 生產(chǎn)線上:生產(chǎn)環(huán)境下的QA屎蜓,數(shù)據(jù)結(jié)果探查驗證、特別是要持續(xù)關(guān)注監(jiān)控與日志钥勋,及時發(fā)現(xiàn)問題炬转、及時與業(yè)務(wù)側(cè)收集反饋等。
-
敏捷團隊:敏捷開發(fā)方式下的測試實踐之前分享太多次算灸,這里不再詳細(xì)贅述扼劈。(可參見:《數(shù)據(jù)中臺測試實踐分享》
數(shù)據(jù)項目測試活動
戰(zhàn)術(shù)四:依照效能提升,提前預(yù)防菲驴、自動化裝備
- 前面提到的從開發(fā)生命周期出發(fā)荐吵,每個階段進(jìn)行安排相關(guān)就及時驗證,實際上就是為了預(yù)防缺陷遺漏到后面赊瞬。越早發(fā)現(xiàn)問題先煎,修復(fù)成本越低。
- 除了提前參與森逮、提前驗證榨婆、預(yù)防缺陷,還需要通過測試執(zhí)行效率的提升來加強質(zhì)量保障褒侧。數(shù)據(jù)類項目的測試用例即為測試數(shù)據(jù)良风,那么,測試數(shù)據(jù)構(gòu)造自動化闷供、每一層任務(wù)的測試驗證自動化烟央、數(shù)據(jù)探查自動化,一方面解決了人為執(zhí)行可能出錯的問題歪脏,二來自動化替代人工效率提高疑俭。
- 工具推薦,對于測試數(shù)據(jù)構(gòu)造工具有:Datafaker婿失、DbSchema钞艇、Online test data generator等;ETL測試工具有:RightData豪硅、QuerySurge等哩照;數(shù)據(jù)質(zhì)量檢查工具:great_expectations、mobyDQ懒浮、DataQuality飘弧、GriFFin、Qualitis等。
贈送利器Easy SQL
在項目實踐過程中次伶,即便應(yīng)用了以上測試工具加持痴昧,團隊依然會遇到各種困擾。
- 構(gòu)造測試數(shù)據(jù)工具只支持按定義規(guī)則批量生成數(shù)據(jù)冠王,無法做到精準(zhǔn)構(gòu)造每步處理邏輯覆蓋所有測試場景的最小集赶撰;而且定義每個字段規(guī)則時、字段與字段之間以及表與表之間都有復(fù)雜的約束或關(guān)聯(lián)時版确,構(gòu)建數(shù)據(jù)復(fù)雜度依然很高扣囊。
【期望】
期望能在Excel或Json文件中,直接在單元格填上數(shù)據(jù)即用例绒疗,即代表是測試數(shù)據(jù)已準(zhǔn)備侵歇,這樣多好。 - 測試環(huán)境中構(gòu)造數(shù)據(jù)時吓蘑,數(shù)據(jù)表有上百個Schema惕虑,每次通過構(gòu)造工具創(chuàng)建數(shù)據(jù)時,需要對這上百個字段進(jìn)行構(gòu)造磨镶。
【期望】
只構(gòu)造與任務(wù)處理邏輯相關(guān)的字段數(shù)據(jù)溃蔫、沒參與邏輯處理的字段不用構(gòu)造、減少繁雜提高效率琳猫。 - 測試環(huán)境的維護(hù)總是需要花大量時間伟叛,不論是由于構(gòu)造數(shù)據(jù)出問題還是處理邏輯有Bug,都會造成測試環(huán)境留下臟數(shù)據(jù)脐嫂,如果不及時處理统刮,會影響測試的正確性,造成不必要的浪費账千。
【期望】
希望能像UT一樣不需要一個真實環(huán)境侥蒙,就能對每一步數(shù)據(jù)處理任務(wù)進(jìn)行自動化測試,開發(fā)人員或測試人員只負(fù)責(zé)MOCK測試數(shù)據(jù)與結(jié)果數(shù)據(jù)(比如:用簡單的Excel填數(shù)據(jù))匀奏,程序能自動比對預(yù)期的結(jié)果和實際運行結(jié)果鞭衩。 - ...等等
推薦一款利器:開源工具Easy SQL,Easy SQL 旨在簡化數(shù)據(jù) ETL 開發(fā)過程娃善,幫助數(shù)據(jù)團隊提升研發(fā)效能论衍。它自帶的Test SQL框架就是以上期望的方式,大大提升了測試效率聚磺。 附Easy SQL Git地址饲齐。