01 背景
傳統(tǒng)軟件測(cè)試技術(shù)主要基于測(cè)試人員對(duì)業(yè)務(wù)的理解,但由于經(jīng)驗(yàn)的局限性、被測(cè)系統(tǒng)的復(fù)雜性以及與真實(shí)業(yè)務(wù)數(shù)據(jù)的差距,肯定存在測(cè)試不充分的情況,所以,雖然整個(gè)測(cè)試流程很規(guī)范,但最終軟件質(zhì)量還是不盡如人意。而隨著分布式、微服務(wù)架構(gòu)、大數(shù)據(jù)技術(shù)的出現(xiàn),軟件越來(lái)越復(fù)雜,迭代越來(lái)越快,測(cè)試的挑戰(zhàn)性越來(lái)越大。測(cè)試人員急切的需要一套更加精確、高效的測(cè)試技術(shù)和方法。精準(zhǔn)化測(cè)試技術(shù)就在這種背景下應(yīng)運(yùn)而生并快速發(fā)展。 精準(zhǔn)化測(cè)試技術(shù)是一種可追溯的軟件測(cè)試技術(shù),通過(guò)構(gòu)建一套計(jì)算機(jī)測(cè)試輔助分析系統(tǒng),對(duì)測(cè)試過(guò)程的活動(dòng)進(jìn)行監(jiān)控,將采集到的監(jiān)控?cái)?shù)據(jù)進(jìn)行分析,得到精準(zhǔn)的量化數(shù)據(jù),使用這些量化數(shù)據(jù)進(jìn)行質(zhì)量評(píng)價(jià),利用這些分析數(shù)據(jù)可以促進(jìn)測(cè)試過(guò)程的不斷完善,形成度量及分析閉環(huán),實(shí)現(xiàn)軟件測(cè)試從經(jīng)驗(yàn)型方法向技術(shù)型方法的轉(zhuǎn)型。
02 定義
在對(duì)精準(zhǔn)測(cè)試下定義之前我們先看幾個(gè)精準(zhǔn)測(cè)試需要解決的問(wèn)題:
如何刻畫(huà)和度量有限測(cè)試集合的充分性
如何挑選有限測(cè)試集合并充分執(zhí)行
如何讓上述過(guò)程更加自動(dòng)化、更加精準(zhǔn)
那我們可以得到精準(zhǔn)測(cè)試需要包含的幾個(gè)特性:
全不全:通過(guò)代碼覆蓋率度量測(cè)試充分性
準(zhǔn)不準(zhǔn):通過(guò)精準(zhǔn)推薦代替人工進(jìn)行變更影響范圍評(píng)估指導(dǎo)用例回歸
快不快:精準(zhǔn)推薦自動(dòng)化&用例執(zhí)行失敗快速定位等
然后我們可以將其定義為:精準(zhǔn)測(cè)試是基于代碼和用例關(guān)聯(lián)關(guān)系的測(cè)試充分性度量和提升手段之一。
03 實(shí)現(xiàn)思路
首先貼一張流程圖:
整體使用有兩條鏈路: 1.靜態(tài)掃描+推薦測(cè)試范圍,流程如下:
原始代碼靜態(tài)掃描,獲取基礎(chǔ)函數(shù)調(diào)用鏈
原數(shù)據(jù)解析,掃描結(jié)果存儲(chǔ)至Neo4j
代碼diff獲取版本差異,圖譜查詢影響接口范圍
測(cè)試范圍推薦
2.動(dòng)態(tài)追蹤+推薦測(cè)試用例,流程如下:
業(yè)務(wù)代碼插樁
插樁后執(zhí)行業(yè)務(wù)/自動(dòng)化測(cè)試用例
采集“用例-函數(shù)調(diào)用鏈”權(quán)重
代碼diff獲取版本差異
測(cè)試用例推薦
04 技術(shù)架構(gòu)
4.1 技術(shù)選型
4.2 測(cè)試范圍評(píng)估實(shí)踐
4.2.1
原始代碼靜態(tài)掃描,獲取基礎(chǔ)函數(shù)調(diào)用鏈
首先會(huì)有兩輪掃描: 1. 自研算法獲取函數(shù)的基礎(chǔ)調(diào)用鏈,獲取函數(shù)節(jié)點(diǎn)及調(diào)用關(guān)系
2. AST掃描,獲取函數(shù)節(jié)點(diǎn)補(bǔ)充信息
AST是抽象語(yǔ)法樹(shù)(Abstract Syntax Tree)的簡(jiǎn)稱,AST以樹(shù)狀形式表現(xiàn)編程語(yǔ)言的語(yǔ)法結(jié)構(gòu),樹(shù)上每個(gè)節(jié)點(diǎn)都表示源代碼中的一種結(jié)構(gòu)。
4.2.2
原數(shù)據(jù)解析,掃描結(jié)果存儲(chǔ)至Neo4j
在獲取到調(diào)用鏈的graph數(shù)據(jù)后,遍歷轉(zhuǎn)換成存入Neo4j所需的cypher語(yǔ)句
如上圖所示,圖譜最基本的組成單位,存在(代碼所屬包)-[包含]->(文件)-[包含]->(函數(shù))-[調(diào)用]->(函數(shù))的結(jié)構(gòu) 在獲取項(xiàng)目調(diào)用鏈原數(shù)據(jù)后,再深度遍歷每一條調(diào)用鏈路采集每個(gè)包、文件、函數(shù)的對(duì)應(yīng)關(guān)系,以及路徑、所處位置、出參入?yún)ⅰ⒆⑨尅⒋a行等信息,寫入Neo4j。
4.2.3
代碼diff獲取版本差異,圖譜查詢影響接口范圍
通過(guò)git開(kāi)放api,我們可以在git diff內(nèi)獲取兩次commit對(duì)比
通過(guò)文件路徑與函數(shù)名,我們可以找到對(duì)應(yīng)的函數(shù)節(jié)點(diǎn)
然后通過(guò)圖譜向上追蹤查詢完整的調(diào)用鏈路,最終獲取到影響的接口
4.2.4 測(cè)試范圍推薦
可視化頁(yè)面展示版本代碼對(duì)比,與影響的接口(服務(wù)端)、頁(yè)面/組件(客戶端)
4.3 測(cè)試用例推薦實(shí)踐
下面主要講解調(diào)用鏈獲取及加權(quán)部分
4.3.1 業(yè)務(wù)代碼插樁
修改編譯邏輯,在開(kāi)始編譯前通過(guò)AST解析插入覆蓋率和Trace的采集器
4.3.2 用例執(zhí)行
通過(guò)代理服務(wù)執(zhí)行測(cè)試用例,采集“用例-調(diào)用鏈”的映射關(guān)系
4.3.3 采集“用例-函數(shù)調(diào)用鏈”權(quán)重
對(duì)關(guān)聯(lián)關(guān)系進(jìn)行加權(quán)計(jì)算后,存入Neo4j。 下面舉例幾種不同的權(quán)重計(jì)算方式:調(diào)用次數(shù)加權(quán)
假如有一條測(cè)試用例,執(zhí)行時(shí)經(jīng)過(guò)了Api_1和Api_2兩個(gè)接口 然后Api_1執(zhí)行時(shí)經(jīng)過(guò)了函數(shù)FuncA、FuncC、FuncE Api_2執(zhí)行時(shí)經(jīng)過(guò)了函數(shù)FuncB、FuncD、FuncE 我們可以理解為該條測(cè)試用例,對(duì)于函數(shù)A、B、C、D、E的調(diào)用次數(shù)加權(quán)分別為1、1、1、1、2業(yè)務(wù)模塊加權(quán)這是半手工的方式,如果在用例管理系統(tǒng)中,有一條case屬于“書(shū)架”模塊,那我們可以將不同層級(jí)的代碼,處于bookshelf目錄下的函數(shù),都與該case綁定一個(gè)“同模塊(module_weight)”的關(guān)系(relationship)
文本相似度加權(quán)通過(guò)對(duì)測(cè)試用例庫(kù)內(nèi)的所有用例,進(jìn)行分詞、建立詞庫(kù),使用tf-idf的方式計(jì)算用例與用例間的文本相似度,來(lái)計(jì)算用例的相似性
此方案對(duì)測(cè)試人員編寫用例時(shí)的要求較高,如果會(huì)有不同的測(cè)試人員去測(cè)試相同模塊,因?yàn)闀?shū)寫習(xí)慣不一樣,可能會(huì)導(dǎo)致case計(jì)算結(jié)果不準(zhǔn)確,所以我們引入GCN計(jì)算case的相似性GCN(圖卷積神經(jīng)網(wǎng)絡(luò))計(jì)算用例相似性實(shí)際使用中,我們會(huì)采取不同的特征來(lái)訓(xùn)練GCN,用于計(jì)算不同場(chǎng)景的結(jié)果 在這里我們舉一個(gè)簡(jiǎn)單的例子,用于計(jì)算case的相似性:
1. 我們通過(guò)采集不同case對(duì)函數(shù)的調(diào)用層級(jí),構(gòu)成一個(gè)C × N的稀疏矩陣 (C:測(cè)試用例個(gè)數(shù),N:函數(shù)節(jié)點(diǎn)數(shù)) 2. 將調(diào)用層級(jí)數(shù)取反,然后歸一化,得到訓(xùn)練模型用的矩陣 3. 根據(jù)GCN的定義X'=σ(L ?symXW)來(lái)定義GCN層,然后堆疊兩層GCN構(gòu)建圖卷積網(wǎng)絡(luò) 4. 訓(xùn)練完后,通過(guò)TSNE將輸出層的score嵌入進(jìn)行二維化處理,計(jì)算每個(gè)節(jié)點(diǎn)與節(jié)點(diǎn)的歐式距離,再存入Neo4j
4.3.4 代碼diff獲取版本差異
與步驟4.2.4一樣,通過(guò)代碼diff獲取改動(dòng)的函數(shù)節(jié)點(diǎn),然后通過(guò)權(quán)重計(jì)算獲取測(cè)試用例。
4.3.5 測(cè)試用例推薦
如果是業(yè)務(wù)用例則自動(dòng)創(chuàng)建測(cè)試計(jì)劃,并關(guān)聯(lián)測(cè)試用例。 如果是自動(dòng)化測(cè)試用例,則自動(dòng)導(dǎo)入用例所處的文件、函數(shù)信息。
05 落地效果
目前平臺(tái)在MR、冒煙、提測(cè)、回歸、上線等不同階段,采取了8種不同的質(zhì)量保障措施:
迭代時(shí)間由3周縮短至2周
版本平均需執(zhí)行自動(dòng)化用例數(shù)減少80%
回歸測(cè)試階段平均需執(zhí)行用例數(shù)減少60%
覆蓋率需統(tǒng)計(jì)代碼減少90%
06 未來(lái)展望
隨著增量用例的增多,數(shù)據(jù)量提高,進(jìn)一步提高GCN的計(jì)算結(jié)果準(zhǔn)確度
打造調(diào)用鏈代碼染色+頁(yè)面可視化功能,助力測(cè)試環(huán)境問(wèn)題定位
審核編輯:郭婷
-
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70725 -
大數(shù)據(jù)
+關(guān)注
關(guān)注
64文章
8960瀏覽量
140195
原文標(biāo)題:基于知識(shí)圖譜的調(diào)用鏈分析精準(zhǔn)化測(cè)試平臺(tái)
文章出處:【微信號(hào):軟件質(zhì)量報(bào)道,微信公眾號(hào):軟件質(zhì)量報(bào)道】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
信而泰×DeepSeek:AI推理引擎驅(qū)動(dòng)網(wǎng)絡(luò)智能診斷邁向 “自愈”時(shí)代
AI智能眼鏡產(chǎn)業(yè)鏈分析
輕輕松松學(xué)電工(識(shí)圖篇)
東軟集團(tuán)入選中國(guó)央國(guó)企數(shù)字化平臺(tái)廠商圖譜
典型電路原理、電路識(shí)圖從入門到精通等資料

電路識(shí)圖從入門到精通高清電子資料
淵亭KGAG升級(jí)引入“高級(jí)策略推理”
微軟發(fā)布《GraphRAG實(shí)踐應(yīng)用白皮書(shū)》助力開(kāi)發(fā)者
信而泰網(wǎng)絡(luò)測(cè)試儀校準(zhǔn)解決方案:精準(zhǔn)測(cè)試,性能無(wú)憂

利智方:驅(qū)動(dòng)企業(yè)知識(shí)管理與AI創(chuàng)新加速的平臺(tái)
三星自主研發(fā)知識(shí)圖譜技術(shù),強(qiáng)化Galaxy AI用戶體驗(yàn)與數(shù)據(jù)安全
矢量網(wǎng)絡(luò)分析儀軟件精準(zhǔn)測(cè)試天線

FLEXBENCH通用測(cè)試軟件平臺(tái)

評(píng)論