本發(fā)明涉及軟件測試技術(shù),尤其涉及基于數(shù)字指紋的軟件測試方法及系統(tǒng)。
背景技術(shù):
1、軟件測試是軟件開發(fā)過程中至關(guān)重要的環(huán)節(jié),用于評估軟件的質(zhì)量、可靠性和穩(wěn)定性。隨著軟件系統(tǒng)規(guī)模和復(fù)雜性的不斷增加,傳統(tǒng)的軟件測試方法面臨諸多挑戰(zhàn),例如測試覆蓋度不足、測試效率低下以及難以有效評估測試的完整性等問題。為了解決這些問題,研究人員一直在探索新的軟件測試方法和技術(shù)。
2、現(xiàn)有的軟件測試方法主要包括黑盒測試、白盒測試和灰盒測試等。黑盒測試主要關(guān)注軟件的功能和性能,而白盒測試則關(guān)注軟件的內(nèi)部結(jié)構(gòu)和邏輯。灰盒測試結(jié)合了黑盒測試和白盒測試的優(yōu)點(diǎn),但仍然存在一些局限性。
3、現(xiàn)有技術(shù)存在以下缺陷和不足:
4、1.?傳統(tǒng)的測試覆蓋度評估方法難以準(zhǔn)確反映測試的完整性。例如,即使測試用例覆蓋了所有代碼行,也不能保證所有可能的執(zhí)行路徑都被測試到。
5、2.?現(xiàn)有的測試方法難以有效地檢測軟件中的潛在缺陷。例如,一些隱藏的缺陷可能只有在特定的輸入條件下才會(huì)觸發(fā),而傳統(tǒng)的測試方法很難覆蓋所有可能的輸入組合。
6、3.?現(xiàn)有的測試方法效率低下,尤其是在面對大型復(fù)雜軟件系統(tǒng)時(shí)。測試用例的設(shè)計(jì)和執(zhí)行需要耗費(fèi)大量的時(shí)間和資源,而且測試結(jié)果的分析和評估也比較繁瑣。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明實(shí)施例提供基于數(shù)字指紋的軟件測試方法及系統(tǒng),能夠解決現(xiàn)有技術(shù)中的問題。
2、本發(fā)明實(shí)施例的第一方面,提供基于數(shù)字指紋的軟件測試方法,包括:
3、采用界面采集器對系統(tǒng)界面源碼進(jìn)行靜態(tài)分析,獲取界面交互動(dòng)作信息和界面元素信息,并對所述界面交互動(dòng)作信息和界面元素信息進(jìn)行sha-256哈希運(yùn)算得到界面指紋數(shù)據(jù);采用接口采集器對運(yùn)算程序源碼進(jìn)行靜態(tài)分析,獲取接口定義信息、輸入數(shù)據(jù)信息和返回值信息,并對所述接口定義信息、輸入數(shù)據(jù)信息和返回值信息進(jìn)行sha-256哈希運(yùn)算得到接口指紋數(shù)據(jù);采用數(shù)據(jù)庫接口采集器對數(shù)據(jù)庫接口進(jìn)行靜態(tài)分析,獲取數(shù)據(jù)庫接口輸入信息和數(shù)據(jù)庫接口返回信息,并對所述數(shù)據(jù)庫接口輸入信息和數(shù)據(jù)庫接口返回信息進(jìn)行sha-256哈希運(yùn)算得到數(shù)據(jù)庫指紋數(shù)據(jù);
4、在測試執(zhí)行過程中,采用測試采集器監(jiān)控被測系統(tǒng)的運(yùn)行狀態(tài),分別記錄界面操作過程信息、接口調(diào)用過程信息和數(shù)據(jù)庫交互過程信息,對所述界面操作過程信息、所述接口調(diào)用過程信息和所述數(shù)據(jù)庫交互過程信息分別進(jìn)行sha-256哈希運(yùn)算,得到測試過程界面指紋數(shù)據(jù)、測試過程接口指紋數(shù)據(jù)和測試過程數(shù)據(jù)庫指紋數(shù)據(jù),將所述測試過程界面指紋數(shù)據(jù)、測試過程接口指紋數(shù)據(jù)和測試過程數(shù)據(jù)庫指紋數(shù)據(jù)寫入測試過程指紋數(shù)據(jù)庫;
5、將所述測試過程界面指紋數(shù)據(jù)、測試過程接口指紋數(shù)據(jù)和測試過程數(shù)據(jù)庫指紋數(shù)據(jù)分別與所述界面指紋數(shù)據(jù)、所述接口指紋數(shù)據(jù)和所述數(shù)據(jù)庫指紋數(shù)據(jù)進(jìn)行對比,生成測試覆蓋度報(bào)告。
6、對所述界面交互動(dòng)作信息和界面元素信息進(jìn)行sha-256哈希運(yùn)算得到界面指紋數(shù)據(jù)包括:
7、獲取界面交互動(dòng)作信息,所述界面交互動(dòng)作信息包括界面元素標(biāo)識(shí)符、交互動(dòng)作類型、交互動(dòng)作參數(shù)集合和交互動(dòng)作時(shí)序關(guān)系,將所述界面交互動(dòng)作信息構(gòu)建為第一特征向量;獲取界面元素信息,所述界面元素信息包括元素標(biāo)識(shí)符、元素類型、元素屬性集合和元素層級(jí)關(guān)系,將所述界面元素信息構(gòu)建為第二特征向量;
8、對所述第一特征向量和所述第二特征向量進(jìn)行數(shù)據(jù)清洗,所述數(shù)據(jù)清洗包括移除冗余屬性、標(biāo)準(zhǔn)化屬性值格式和統(tǒng)一編碼方式,得到預(yù)處理后的第一特征向量和預(yù)處理后的第二特征向量;將所述預(yù)處理后的第一特征向量和所述預(yù)處理后的第二特征向量進(jìn)行合并,構(gòu)建統(tǒng)一特征向量;
9、計(jì)算所述統(tǒng)一特征向量的長度,根據(jù)所述統(tǒng)一特征向量的長度確定填充長度,對所述統(tǒng)一特征向量進(jìn)行消息填充,所述填充長度滿足填充后的消息長度對512求余等于0;將填充后的消息分為多個(gè)512位的數(shù)據(jù)塊,對每個(gè)所述數(shù)據(jù)塊進(jìn)行消息擴(kuò)展得到64個(gè)32位字;
10、設(shè)定初始哈希值,利用壓縮函數(shù)對所述64個(gè)32位字進(jìn)行64輪運(yùn)算,更新中間哈希值,得到界面行為特征指紋數(shù)據(jù);計(jì)算所述界面行為特征指紋數(shù)據(jù)的信息熵,驗(yàn)證所述界面行為特征指紋數(shù)據(jù)的不可逆性;計(jì)算不同輸入產(chǎn)生的界面行為特征指紋數(shù)據(jù)之間的漢明距離,驗(yàn)證所述界面行為特征指紋數(shù)據(jù)的唯一性。
11、對所述接口定義信息、輸入數(shù)據(jù)信息和返回值信息進(jìn)行sha-256哈希運(yùn)算得到接口指紋數(shù)據(jù)包括:
12、獲取接口定義信息,所述接口定義信息包括接口名稱、接口命名空間、參數(shù)集合、返回值類型和接口修飾符集合,根據(jù)所述參數(shù)集合構(gòu)建參數(shù)特征向量,所述參數(shù)特征向量包含參數(shù)類型標(biāo)識(shí)、類型權(quán)重、參數(shù)約束條件和約束權(quán)重;
13、獲取輸入數(shù)據(jù)信息,所述輸入數(shù)據(jù)信息包括數(shù)據(jù)類型向量、數(shù)據(jù)規(guī)模向量和數(shù)據(jù)約束向量,根據(jù)數(shù)據(jù)類型計(jì)算邊界特征值,對于數(shù)值類型數(shù)據(jù)采用線性變換計(jì)算邊界特征值,對于字符類型數(shù)據(jù)采用長度計(jì)算邊界特征值,對于復(fù)合類型數(shù)據(jù)采用大小計(jì)算邊界特征值;
14、獲取返回值信息,所述返回值信息包括返回值類型、返回值狀態(tài)和異常信息集合,根據(jù)返回值狀態(tài)和預(yù)設(shè)的狀態(tài)權(quán)重計(jì)算狀態(tài)映射值;
15、將所述參數(shù)特征向量、所述邊界特征值和所述狀態(tài)映射值進(jìn)行串聯(lián)整合,構(gòu)建綜合特征向量;計(jì)算所述綜合特征向量的均值向量和標(biāo)準(zhǔn)差向量,利用所述均值向量和所述標(biāo)準(zhǔn)差向量對所述綜合特征向量進(jìn)行標(biāo)準(zhǔn)化處理,得到標(biāo)準(zhǔn)化特征向量;將所述標(biāo)準(zhǔn)化特征向量序列化為二進(jìn)制序列,計(jì)算所述二進(jìn)制序列的長度,根據(jù)所述二進(jìn)制序列的長度確定填充長度,使得填充后的消息長度對512求余等于0;
16、設(shè)定初始哈希值,將填充后的消息按照512位進(jìn)行分塊,對每個(gè)消息塊進(jìn)行迭代計(jì)算,得到接口行為特征指紋數(shù)據(jù);選取多組相似的輸入數(shù)據(jù)生成多個(gè)所述接口行為特征指紋數(shù)據(jù),計(jì)算所述多個(gè)接口行為特征指紋數(shù)據(jù)之間的漢明距離,根據(jù)所述漢明距離計(jì)算指紋穩(wěn)定性指標(biāo);基于所述接口行為特征指紋數(shù)據(jù)的長度和樣本空間大小,計(jì)算指紋沖突概率,驗(yàn)證所述接口行為特征指紋數(shù)據(jù)的唯一性。
17、對所述數(shù)據(jù)庫接口輸入信息和數(shù)據(jù)庫接口返回信息進(jìn)行sha-256哈希運(yùn)算得到數(shù)據(jù)庫指紋數(shù)據(jù)包括:
18、獲取數(shù)據(jù)庫接口輸入信息,所述數(shù)據(jù)庫接口輸入信息包括sql語句類型、操作對象集合、條件集合和參數(shù)集合,根據(jù)所述參數(shù)集合和預(yù)設(shè)的參數(shù)權(quán)重構(gòu)建參數(shù)化特征向量;根據(jù)所述sql語句類型、所述操作對象集合和所述條件集合計(jì)算查詢復(fù)雜度,并基于所述操作對象集合構(gòu)建關(guān)聯(lián)矩陣,所述關(guān)聯(lián)矩陣表征操作對象之間的關(guān)聯(lián)程度;
19、獲取數(shù)據(jù)庫接口返回信息,所述數(shù)據(jù)庫接口返回信息包括記錄數(shù)、字段集合、值域分布和統(tǒng)計(jì)特征,根據(jù)所述值域分布計(jì)算均值向量、標(biāo)準(zhǔn)差向量、峰度和偏度;采集數(shù)據(jù)庫執(zhí)行狀態(tài)信息,所述數(shù)據(jù)庫執(zhí)行狀態(tài)信息包括執(zhí)行時(shí)間、內(nèi)存使用量和性能指標(biāo),根據(jù)預(yù)設(shè)的性能基準(zhǔn)對所述性能指標(biāo)進(jìn)行歸一化處理;
20、將所述參數(shù)化特征向量、所述查詢復(fù)雜度、所述關(guān)聯(lián)矩陣、所述均值向量、所述標(biāo)準(zhǔn)差向量、所述峰度、所述偏度和所述歸一化處理后的性能指標(biāo)進(jìn)行串聯(lián)整合,構(gòu)建綜合特征向量;計(jì)算所述綜合特征向量的特征均值和特征標(biāo)準(zhǔn)差,利用所述特征均值和所述特征標(biāo)準(zhǔn)差對所述綜合特征向量進(jìn)行歸一化處理,得到歸一化特征向量;
21、將所述歸一化特征向量序列化為二進(jìn)制序列,計(jì)算所述二進(jìn)制序列的長度,根據(jù)所述二進(jìn)制序列的長度確定填充長度,使得填充后的消息長度對512求余等于0;對填充后的消息進(jìn)行分塊,對每個(gè)消息塊進(jìn)行迭代計(jì)算,得到數(shù)據(jù)庫交互行為的數(shù)字指紋數(shù)據(jù)。
22、將所述測試過程界面指紋數(shù)據(jù)、測試過程接口指紋數(shù)據(jù)和測試過程數(shù)據(jù)庫指紋數(shù)據(jù)分別與所述界面指紋數(shù)據(jù)、所述接口指紋數(shù)據(jù)和所述數(shù)據(jù)庫指紋數(shù)據(jù)進(jìn)行對比,生成測試覆蓋度報(bào)告包括:
23、基于測試過程界面指紋數(shù)據(jù)和基準(zhǔn)界面指紋數(shù)據(jù)計(jì)算界面指紋相似度,所述界面指紋相似度通過漢明距離與指紋長度的比值計(jì)算得到;構(gòu)建界面元素權(quán)重集合,根據(jù)所述界面元素權(quán)重集合和界面元素覆蓋指示函數(shù)計(jì)算界面元素覆蓋率,所述界面元素覆蓋指示函數(shù)用于標(biāo)識(shí)界面元素是否被測試覆蓋;
24、獲取接口調(diào)用路徑信息,建立接口調(diào)用路徑覆蓋矩陣,所述接口調(diào)用路徑覆蓋矩陣中的每個(gè)元素表示對應(yīng)路徑的覆蓋狀態(tài);獲取接口參數(shù)可能值集合和測試覆蓋值集合,計(jì)算每個(gè)參數(shù)的覆蓋度,并根據(jù)所有參數(shù)的覆蓋度計(jì)算接口參數(shù)空間覆蓋度;獲取sql語句類型集合和sql語句類型權(quán)重,基于已覆蓋次數(shù)和預(yù)期覆蓋次數(shù)計(jì)算sql語句類型覆蓋率;獲取數(shù)據(jù)庫操作深度信息,根據(jù)操作深度和覆蓋標(biāo)記計(jì)算數(shù)據(jù)庫操作深度指標(biāo);
25、設(shè)定界面覆蓋度權(quán)重系數(shù)、接口覆蓋度權(quán)重系數(shù)和數(shù)據(jù)庫覆蓋度權(quán)重系數(shù),將界面覆蓋度、接口覆蓋度和數(shù)據(jù)庫覆蓋度進(jìn)行加權(quán)融合,得到綜合覆蓋度;計(jì)算各維度覆蓋度的覆蓋度梯度,根據(jù)所述覆蓋度梯度和預(yù)設(shè)學(xué)習(xí)率對權(quán)重系數(shù)進(jìn)行自適應(yīng)調(diào)整;計(jì)算各維度覆蓋度與平均覆蓋度的方差,基于所述方差計(jì)算覆蓋均衡度;
26、獲取測試時(shí)間和資源消耗信息,根據(jù)所述綜合覆蓋度、所述測試時(shí)間和所述資源消耗計(jì)算測試效率指標(biāo);基于各維度覆蓋度和所述覆蓋均衡度生成維度分析報(bào)告;采集時(shí)序覆蓋度數(shù)據(jù),構(gòu)建時(shí)序覆蓋度序列,生成趨勢分析報(bào)告;設(shè)定模塊權(quán)重和重要性系數(shù),根據(jù)未覆蓋率、所述模塊權(quán)重和所述重要性系數(shù)計(jì)算風(fēng)險(xiǎn)指數(shù),生成風(fēng)險(xiǎn)評估報(bào)告;將所述維度分析報(bào)告、所述趨勢分析報(bào)告和所述風(fēng)險(xiǎn)評估報(bào)告整合形成測試覆蓋度綜合報(bào)告。
27、所述方法還包括:
28、獲取軟件系統(tǒng)的模塊復(fù)雜度指標(biāo)、模塊依賴度指標(biāo)和模塊測試覆蓋指標(biāo),基于所述模塊復(fù)雜度指標(biāo)、所述模塊依賴度指標(biāo)和所述模塊測試覆蓋指標(biāo)構(gòu)建模塊特征向量,所述模塊特征向量用于表征軟件系統(tǒng)中各模塊的特性;
29、獲取軟件系統(tǒng)中各模塊的接口集合,計(jì)算任意兩個(gè)模塊間的接口調(diào)用集合,根據(jù)所述接口調(diào)用集合與各模塊接口集合的交并比計(jì)算模塊間依賴強(qiáng)度,生成依賴邊集合;針對軟件系統(tǒng)中的每個(gè)模塊,獲取其代碼圈復(fù)雜度、業(yè)務(wù)關(guān)鍵度和缺陷密度信息,將所述代碼圈復(fù)雜度、所述業(yè)務(wù)關(guān)鍵度和所述缺陷密度信息進(jìn)行加權(quán)組合得到節(jié)點(diǎn)重要度,將所述節(jié)點(diǎn)重要度作為節(jié)點(diǎn)權(quán)重;針對所述依賴邊集合中的每條依賴邊,獲取其邊影響因子集合和對應(yīng)的因子權(quán)重集合,根據(jù)所述邊影響因子集合和所述因子權(quán)重集合的加權(quán)平均計(jì)算得到邊權(quán)重;將所述模塊特征向量對應(yīng)的模塊節(jié)點(diǎn)、所述依賴邊集合、所述節(jié)點(diǎn)權(quán)重和所述邊權(quán)重組合構(gòu)建風(fēng)險(xiǎn)傳播圖模型;
30、在所述風(fēng)險(xiǎn)傳播圖模型中識(shí)別所有的風(fēng)險(xiǎn)傳播路徑,根據(jù)路徑上各邊的邊權(quán)重計(jì)算得到每條傳播路徑的路徑權(quán)重;獲取每條傳播路徑中各節(jié)點(diǎn)的風(fēng)險(xiǎn)值,結(jié)合節(jié)點(diǎn)在路徑中的位置權(quán)重,計(jì)算單條路徑的路徑風(fēng)險(xiǎn)值;根據(jù)所有傳播路徑的路徑風(fēng)險(xiǎn)值構(gòu)建局部風(fēng)險(xiǎn)矩陣,并結(jié)合傳播衰減系數(shù)和傳播概率,計(jì)算全局風(fēng)險(xiǎn)傳播值;按時(shí)間序列采集風(fēng)險(xiǎn)數(shù)據(jù)構(gòu)建時(shí)序風(fēng)險(xiǎn)序列,計(jì)算相鄰采樣點(diǎn)的風(fēng)險(xiǎn)變化率,所述風(fēng)險(xiǎn)變化率用于表征風(fēng)險(xiǎn)演化趨勢;
31、對所述時(shí)序風(fēng)險(xiǎn)序列進(jìn)行統(tǒng)計(jì)分析,計(jì)算其均值、標(biāo)準(zhǔn)差、偏度和峰度,構(gòu)建風(fēng)險(xiǎn)演化模式特征向量,所述風(fēng)險(xiǎn)演化模式特征向量用于表征風(fēng)險(xiǎn)變化模式;基于所述時(shí)序風(fēng)險(xiǎn)序列的均值和標(biāo)準(zhǔn)差,構(gòu)建具有自適應(yīng)特性的風(fēng)險(xiǎn)預(yù)警閾值,所述風(fēng)險(xiǎn)預(yù)警閾值隨時(shí)序風(fēng)險(xiǎn)分布動(dòng)態(tài)調(diào)整;設(shè)定高風(fēng)險(xiǎn)閾值和低風(fēng)險(xiǎn)閾值,根據(jù)當(dāng)前風(fēng)險(xiǎn)值與所述高風(fēng)險(xiǎn)閾值和所述低風(fēng)險(xiǎn)閾值的關(guān)系進(jìn)行風(fēng)險(xiǎn)等級(jí)劃分;根據(jù)所述風(fēng)險(xiǎn)預(yù)警自適應(yīng)閾值和所述風(fēng)險(xiǎn)等級(jí)劃分結(jié)果生成風(fēng)險(xiǎn)預(yù)警信息,所述風(fēng)險(xiǎn)預(yù)警信息包括風(fēng)險(xiǎn)等級(jí)、風(fēng)險(xiǎn)程度和風(fēng)險(xiǎn)演化趨勢。
32、本發(fā)明實(shí)施例的第二方面,提供基于數(shù)字指紋的軟件測試系統(tǒng),包括:
33、第一單元,用于采用界面采集器對系統(tǒng)界面源碼進(jìn)行靜態(tài)分析,獲取界面交互動(dòng)作信息和界面元素信息,并對所述界面交互動(dòng)作信息和界面元素信息進(jìn)行sha-256哈希運(yùn)算得到界面指紋數(shù)據(jù);采用接口采集器對運(yùn)算程序源碼進(jìn)行靜態(tài)分析,獲取接口定義信息、輸入數(shù)據(jù)信息和返回值信息,并對所述接口定義信息、輸入數(shù)據(jù)信息和返回值信息進(jìn)行sha-256哈希運(yùn)算得到接口指紋數(shù)據(jù);采用數(shù)據(jù)庫接口采集器對數(shù)據(jù)庫接口進(jìn)行靜態(tài)分析,獲取數(shù)據(jù)庫接口輸入信息和數(shù)據(jù)庫接口返回信息,并對所述數(shù)據(jù)庫接口輸入信息和數(shù)據(jù)庫接口返回信息進(jìn)行sha-256哈希運(yùn)算得到數(shù)據(jù)庫指紋數(shù)據(jù);
34、第二單元,用于在測試執(zhí)行過程中,采用測試采集器監(jiān)控被測系統(tǒng)的運(yùn)行狀態(tài),分別記錄界面操作過程信息、接口調(diào)用過程信息和數(shù)據(jù)庫交互過程信息,對所述界面操作過程信息、所述接口調(diào)用過程信息和所述數(shù)據(jù)庫交互過程信息分別進(jìn)行sha-256哈希運(yùn)算,得到測試過程界面指紋數(shù)據(jù)、測試過程接口指紋數(shù)據(jù)和測試過程數(shù)據(jù)庫指紋數(shù)據(jù),將所述測試過程界面指紋數(shù)據(jù)、測試過程接口指紋數(shù)據(jù)和測試過程數(shù)據(jù)庫指紋數(shù)據(jù)寫入測試過程指紋數(shù)據(jù)庫;
35、第三單元,用于將所述測試過程界面指紋數(shù)據(jù)、測試過程接口指紋數(shù)據(jù)和測試過程數(shù)據(jù)庫指紋數(shù)據(jù)分別與所述界面指紋數(shù)據(jù)、所述接口指紋數(shù)據(jù)和所述數(shù)據(jù)庫指紋數(shù)據(jù)進(jìn)行對比,生成測試覆蓋度報(bào)告。
36、本發(fā)明實(shí)施例的第三方面
37、提供一種電子設(shè)備,包括:
38、處理器;
39、用于存儲(chǔ)處理器可執(zhí)行指令的存儲(chǔ)器;
40、其中,所述處理器被配置為調(diào)用所述存儲(chǔ)器存儲(chǔ)的指令,以執(zhí)行前述所述的方法。
41、本發(fā)明實(shí)施例的第四方面,
42、提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序指令,所述計(jì)算機(jī)程序指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)前述所述的方法。
43、本技術(shù)的有益效果如下:
44、1.?提升測試覆蓋率:通過對界面、接口、數(shù)據(jù)庫進(jìn)行全面的指紋采集和比對,可以更精準(zhǔn)地評估測試覆蓋范圍,發(fā)現(xiàn)潛在的未測試代碼路徑,從而提高軟件測試的完整性和有效性。
45、2.?提高測試效率:自動(dòng)化采集和比對指紋數(shù)據(jù),減少了人工測試的工作量,縮短了測試周期,提高了測試效率。
46、3.?便于測試結(jié)果分析:生成的測試覆蓋度報(bào)告清晰直觀,便于開發(fā)人員和測試人員快速了解測試情況,準(zhǔn)確定位問題,并進(jìn)行有針對性的改進(jìn)。