《4-黃國輝-OpenHarmony開發者測試工程.pdf》由會員分享,可在線閱讀,更多相關《4-黃國輝-OpenHarmony開發者測試工程.pdf(36頁珍藏版)》請在三個皮匠報告上搜索。
1、OpenHarmony開發者測試工程黃國輝OpenHarmony兼容性工作組SIG成員黃國輝主要負責OpenHarmony各子系統開發自測試相關工作,了解開發者測試設計方法、測試框架以及覆蓋率構建相關工具。OpenHarmony兼容性工作組SIG成員目錄CONTENTS背景簡介01 OpenHarmony開發者測試活動02 OpenHarmony開發者測試框架03 OpenHarmony一站式代碼覆蓋率工具04 未來展望與規劃05 01背景簡介背景簡介l后端問題解決的成本遠大于前端,盡可能在前端全面高效維護代碼質量。OpenHarmony包含60+子系統,累計代碼量超1億行。Unit Test
2、sIntergration TestsSystemTestsUITests發現問題的難易程度困難容易解決問題的速度慢快需求質量設計質量谷歌的測試金字塔模型02OpenHarmony開發者測試活動開發者測試活動全景自測試流水線自測試框架TDD測試分布式測試功能測試性能測試專項測試內存測試benchmark靜態api安全測試漏洞補丁靜態掃描開源漏洞掃描安全編譯選項fuzz測試穩定性測試代碼覆蓋率黑盒測試白盒測試判定表法等價類劃分邊界值分析法路徑覆蓋法單模塊隨機壓測整機隨機壓測MTBF功能測試TDD測試Test Driven Development測試設計模塊設計用例/編碼從測試的角度來推導設計,驗
3、證設計測試先行,用例約束代碼實現敏捷開發,小步快跑通過用例的反饋,確保目標的達成促進設計更好地理解需求功能測試分布式測試OpenHarmony分布式數據OpenHarmony分布式數據分布式設備分布式文件分布式調度分布式調度分布式設備分布式軟總線分布式軟總線分布式組網、協議間兼容分布式設備上線下遠程啟動、遷移能力分布式數據存儲、同步、一致性分布式硬件分布式硬件分布式硬件虛擬化能力分布式文件內核傳輸分布式文件專項測試性能測試通過基準測試建立一個已知的性能水平(稱為基準線),當系統的軟硬件環境發生變化之后再進行一次基準測試以確定那些變化對性能的影響。benchmark內存測試基本概念:1:常駐內存
4、:指業務運行結束退至后臺,靜置5分鐘后,進程的內存使用情況。2:動態內存:業務在后臺運行時,進程的內存總量峰值。u看護進程范圍與基線值:專項測試安全測試Syzkaller:是一種針對kernel的fuzzing測試工具。Fuzzing測試是一種軟件測試方法,通過產生隨機輸入,從而驗證被測軟件可靠性與安全性的一種方法。Syzkaller通過覆蓋制導,更容易探索新路徑并發現代碼中存在的問題。Syzkaller與kasan和ubasn一起使用,更容易發現問題。libfuzz介紹:模糊測試(fuzzing test)是一種軟件測試技術,其核心思想是將自動或半自動生成的隨機數據輸入到一個程序中,并監視程
5、序異常,如崩潰,斷言(assertion)失敗,以發現可能的程序錯誤,比如內存泄漏,訪問越界等。Libfuzz主要關注的風險接口:1、解析處理遠程發送來的TCP/UDP或者藍牙等協議數據。2、通過復雜的文件解碼處理等,包括音視頻、圖片解碼、解壓縮等。3、IPC跨進程的數據輸入處理。Libfuzz測試流程:Libfuzz執行要求:1、達到基本穩定:同時滿足,不生成新的bug,不生成新的樣本。2、達到充分測試:使用libfuzzer,1個小時穩定測試或者1000萬次穩定測試。能力提升黑盒測試常用的用例設計方法l 判定表法:采用表格的形式,列出所有條件和對應結果,能夠將復雜問題簡化并避免遺漏。判定表
6、很適合于處理條件項各自獨立,互不影響的問題。判定表的格式:1、條件樁:列出問題的所有條件。2、動作樁:列出問題規定可能采取的操作。l 等價類劃分:針對測試對象的所有可能的輸入,按照等價類原則劃分為不同的輸入域子集,在每個子集中選取少數具有代表性的數據作為測試用例,合理覆蓋。l 邊界值分析:輸入或輸出的邊界值的分析方法,是對等價類劃分法的補充。有效等價類:合理的、有意義的輸入數據構成的集合。無效等價類:不合理或無意義的輸入數據所構成的集合。對范圍為1到8的整數輸入參數進行驗證,按照開區間和閉區間,半開半閉區間進行說明,其中的邊界值如上圖所示。能力提升白盒測試語句覆蓋:每條語句至少執行一次判定覆蓋
7、:每個判定的每個分支至少執行一次條件覆蓋:每個判定的每個條件取到各種可能的值判定條件覆蓋:同時滿足判定覆蓋條件覆蓋條件組合覆蓋:每個判定中各條件的每一種組合至少出現一次路徑覆蓋:使程序中每一條可能的路徑至少執行一次常見的白盒覆蓋類型:03OpenHarmony開發者測試框架開發測試框架介紹OpenHarmony開發測試平臺,支持3種操作系統,5種語言,7種不同測試類型以及多形態設備,為開發者提供輕量級測試環境以及“一鍵式”測試執行入口,降低開發人員前端問題驗證難度,提升驗證效率和代碼質量。OpenHarmony 設備Source CodeDeveloper TestTest Code(TDD/
8、XTS)修改代碼OpenHarmony源碼工程執行修改代碼邏輯對應自動化用例編譯版本刷機編譯測試代碼(如果階段2已編譯套件此過程可跳過)執行測試代碼返回測試結果開發者開發測試框架整體架構開發測試框架重點特征-支持精準測試l 精準測試:支持測試腳本多種顆粒度、多類型執行方式,靈活支撐開發者自測試場景。參數名稱參數說明testtype指定測試類型級執行方式subsystem指定測試子系統級執行方式testpart指定部件級執行方式testmodule指定測試模塊級執行方式testsuit指定測試套級執行方式testcase指定測試用例級執行方式coverage指定覆蓋率級執行方式輸入測試運行參數簡
9、單易用執行命令統一支持多種語言(C/C+/JS/ets/python/rust)參數解析啟動用例管理調用用例篩選接口生成編譯目標及配置文件根據運行參數編譯目標配置文件編譯指定用例編譯用例生成用例列表文件啟動調度運行模塊并傳入用例列表文件創建測試計劃運行對應測試驅動run t ut tp xxx開發測試框架重點特征支持高性能并發與多語言l 高性能:并發執行,多設備高效運行測試用例。l 支持多種編程語言測試腳本調度執行,屏蔽不同測試腳本執行入口差異OpenHarmony 設備ThreadCppTestDriverJsUnitTestDriverOHJSUnitTestDriverLtpPosixT
10、estOHRustTestDriverDriver1、創建驅動執行線程2、驅動執行線程調用_execute_執行接口輪詢獲取可用設備獲取測試套參數及對應驅動創建驅動執行線程循環等待所有驅動線程結束,防止主線程阻塞初始化參數,啟動監控線程構建請求參數request,調用驅動執行接口通知監控線程驅動執行結束初始化參數,日志打印線程id開發測試框架重點特征支持穩定性測試能力多線程庫支持的接口函數 GTEST_RUN_TASK(TestFunction)HWMTEST_F(TEST_SUITE,TEST_CASE,TEST_LEVEL,THREAD_NUM)MTEST_ADD_TASK(THREAD_
11、ID,ThreadTestFunc)MTEST_POST_RUN()框架支持用例亂序能力-ra random:用例亂序執行參數利用隨機數原理實現測試套件內的用例亂序執行提供便捷高效的多線程測試能力,便于在前端攔截并發場景的穩定性問題開發測試框架重點特征支持多任務管理模式l run t ut ss/tp/ts/tc xxx-repeat 5l run-hll run-rh 1l run-retry-repeat:支持設置用例執行次數。-hl HISTORYLIST:顯示最近10條測試用例,超過10條,只顯示最近10條。-rh RUNHISTORY:按照歷史記錄中指定測試任務ID,執行測試任務-r
12、etry:檢查上次運行結果,如果有失敗用例則重復測試為開發者提供精確實用的多任務管理能力,精準實現各類任務的執行,可提升開發者執行效率開發測試框架重點特征-支持分布式驗證分布式測試框架:1.采用C-S結構,基于gtest測試框架,對其進行多設備協同擴展,其中C為主控邏輯,運行在控制端,S為測試代理,運行在服務端,負責處理相關測試邏輯;2.C-S之間基于socket通信,作為測試消息通道;3.測試用例只運行在一臺設備上,主控用例通過C-S測試通道發送消息給服務端,控制服務端執行測試邏輯;4.分布式場景下,每一個用例由一個主控用例和一個測試代理兩部分組成;5.測試代理由測試框架在用例執行前完成啟動
13、。分布式測試框架的作用:通過編寫分布式測試用例,針對分布式場景進行測試,同時建立流水線進行看護;方便及時發現分布式場異常,以此提高分布式場景的測試效率。分布式測試框架操作時序開發測試框架執行示例命令用途run觸發執行用例show顯示屬性,如支持執行用例類型等list顯示連接設備信息version顯示工具版本號信息help顯示指定命令幫助信息quit退出執行環境04OpenHarmony一站式代碼覆蓋率工具OpenHarmony一站式代碼覆蓋率工具我是否遺漏了什么BUG沒有測出來?我是否在對已經充分驗證的部分還在進行重復冗余的驗證?我的驗證到底進行到了什么程度?我還需要進行對哪些部分進行重點驗證
14、?l自測試完成后,測試質量如何評估:l業界中影響最大的解決方案:基于覆蓋率的驗證模式(Coverage-Driven Verification)OpenHarmony一站式代碼覆蓋率工具介紹工具優勢:1、集成在自測試框架中,沿用原有自測試使用習慣;2、無需更換環境,直接在編輯/編譯的linux環境執行;3、支持按子系統、部件級別運行測試用例及覆蓋率數據;4、集成流水線上常駐服務、特殊情況屏蔽等處理,盡量和流水線上結果保持一致;一站式運行用例編寫本地覆蓋率工具測試報告簡化操作流程缺點:1、覆蓋率數據生成步驟繁瑣,難以一站式生成覆蓋率報告及用例執行結果;2、需要代碼上庫之后檢測覆蓋率情況,難以幫助
15、開發在研發過程中定位問題。覆蓋率生成步驟用例編寫用例編譯源碼插樁版本燒錄用例執行數據解析數據可視化生成覆蓋率報告OpenHarmony一站式代碼覆蓋率工具整體架構系統代碼系統代碼編譯插樁so文件設備非常駐進程常駐進程信號觸發程序退出自動落盤合并剔除解析數據處理Gcno文件Gcda文件數據可視化用例執行報告覆蓋率報告OpenHarmony一站式代碼覆蓋率工具關鍵特性l精準編譯、縮小范圍、提升效率out/xxx/build_configs/parts_info/parts_path_info.jsonout/xxx/build_configs/parts_info/part_subsystem.j
16、sonout/xxx/obj/base/security/access_token目錄中獲取所有subsystem_name為security的*_module_info.json文件 不需要全量覆蓋率版本編譯安裝。只用預先編譯需要的覆蓋率版本so和用例。啟動測試框架,執行用例前會將指定部件或子系統的編譯后的覆蓋率so推到設備上重啟設備后,執行用例。覆蓋率版本編譯安裝。OpenHarmony一站式代碼覆蓋率工具關鍵特性l支持進程不退出情況下,信號觸發覆蓋率數據落盤程序正常結束時調用 exit,其繼續調用 _gcov_dump 函數輸出覆蓋率統計數據到*.gcda 文件中。常駐進程一旦啟動很少主
17、動退出,使用kill殺死進程強制退出時不會調用exit,不會落盤覆蓋率數據。構造信號攔截函數動態庫預加載信號觸發覆蓋率數據落盤信號處理函數中注冊待攔截信號,使用_attribute_(constructor)進行修飾(SIGUSR2)添加signal handler,在其中調用數據落盤函數_gcov_dump使用LD_PRELOAD將信號處理函數與待測動態庫進行鏈接給待測進程發送信號 SIGUSR2信號被攔截,觸發數據落盤函數 _gcov_dump有效解決gcover無法統計常駐進程覆蓋率數據問題。OpenHarmony一站式代碼覆蓋率工具執行流程啟動工具選擇產品形態輸入命令替換插樁so文件執
18、行用例輸出用例執行結果與覆蓋率數據./start.shrun t xx xxx1環境配置完成后執行如下命令可生成覆蓋率報告:1)進入test/testfwk/developer_test目錄下,執行./start.sh。2)選擇產品形態。按回車默認為1。3)執行“run-t ut tp 部件名-cov coverage”或“run-t ut-ss 子系統名-cov coverage”或“run-t ut-ss 子系統名-tp 部件名-cov coverage”執行完成后生成覆蓋率報告。支持部件級別用例執行支持子系統級別用例執行OpenHarmony一站式代碼覆蓋率工具執行結果函數覆蓋率分支覆蓋
19、率隨用例變化趨勢OpenHarmony一站式代碼覆蓋率工具執行示例05未來展望與規劃未來展望與規劃基于大模型,結合TDD、測試結果、覆蓋率、逆向分析開展代碼質量智能評估,提高自測試質量測試設計TDD逆向改進分析基于需求和場景usecase描述生成驗收標準,測試用例結合大模型生成測試用例,增強代碼覆蓋基于問題描述推薦根因和消減措施、生成復現回歸測試用例I.編解碼器類大模型RoBERTa(NL類任務預訓練)CodeBERT(Code類任務預訓練)II.OpenAI 生成類大模型Curie-GPT3(6.7B NL類任務)Codex-GPT3(12B code類任務)Davinci-GPT3(175B NL類任務)Code-davinci-002-GPT3.5(175B code類任務)后端問題導入感謝聆聽關注QECon公眾號