本技術(shù)涉及計算機軟件,尤其涉及一種單元測試用例生成方法、設(shè)備及介質(zhì)。
背景技術(shù):
1、當今信息技術(shù)日新月異,軟件系統(tǒng)的規(guī)模和復(fù)雜性以前所未有的速度持續(xù)增長,軟件已成為推動社會進步和產(chǎn)業(yè)升級的關(guān)鍵力量。然而,這一發(fā)展趨勢也對軟件的質(zhì)量與可靠性提出了更為嚴苛的要求,軟件測試作為保障軟件質(zhì)量的重要環(huán)節(jié),其地位日益凸顯。
2、單元測試聚焦于軟件中的最小可測試單元,如函數(shù)、方法或模塊,旨在驗證這些獨立單元在隔離環(huán)境下的行為是否符合預(yù)期。
3、然而,傳統(tǒng)的手動編寫單元測試方法面臨著挑戰(zhàn)與不足,手動編寫單元測試效率低下,特別是在面對大型、復(fù)雜的軟件系統(tǒng)時,開發(fā)人員需要花費大量時間和精力來創(chuàng)建和維護測試用例,不僅增加了開發(fā)成本,還可能延遲軟件交付時間。
技術(shù)實現(xiàn)思路
1、本技術(shù)實施例提供了一種單元測試用例生成方法、設(shè)備及介質(zhì),用于解決如下技術(shù)問題:手動編寫單元測試效率低下,特別是在面對大型、復(fù)雜的軟件系統(tǒng)時,開發(fā)人員需要花費大量時間和精力來創(chuàng)建和維護測試用例,不僅增加了開發(fā)成本,還可能延遲軟件交付時間。
2、本技術(shù)實施例采用下述技術(shù)方案:
3、本技術(shù)實施例提供一種單元測試用例生成方法。包括,通過編譯器llvm對獲取到的源代碼進行解析,生成中間表示;對中間表示進行代碼分析與邊界分析,以得到待測試單元;將輸入變量替換為符號值,通過符號值對待測試單元對應(yīng)的不同路徑分別進行路徑約束條件的采集;基于采集的路徑約束條件,得到測試用例信息,基于測試用例信息確定出相應(yīng)的測試框架,生成參考測試用例;執(zhí)行參考測試用例,在測試覆蓋率滿足預(yù)置覆蓋率閾值的情況下,確定參考測試用例為所需測試用例。
4、本技術(shù)實施例中間標識是一種與機器和語言無關(guān)的中間代碼表示形式,能夠跨不同的平臺和架構(gòu)進行代碼分析和轉(zhuǎn)換,提高了代碼的可移植性和復(fù)用性。通過對中間表示進行代碼分析,更加精確地理解程序的結(jié)構(gòu)和行為,確保測試用例能夠覆蓋代碼的關(guān)鍵路徑和邊界情況。通過符號執(zhí)行技術(shù),自動探索程序的執(zhí)行路徑,無需手動構(gòu)造大量測試用例。通過執(zhí)行測試用例,驗證程序的正確性和穩(wěn)定性,及時發(fā)現(xiàn)并修復(fù)潛在的問題。本技術(shù)實施例通過編譯器llvm對源代碼進行解析、分析,并生成測試用例,不僅提高了測試的自動化程度和效率,還增強了測試的全面性和有效性。
5、在本技術(shù)的一種實現(xiàn)方式中,對中間表示進行代碼分析與邊界分析,以得到待測試單元,具體包括:遍歷中間表示中的函數(shù)定義節(jié)點,并記錄各函數(shù)定義節(jié)點分別對應(yīng)的函數(shù)定義信息;其中,函數(shù)定義信息至少包括名稱、參數(shù)、返回類型中的一項;對中間表示構(gòu)建控制流圖,以通過控制流圖進行控制流分析,得到數(shù)據(jù)流信息;在中間表示中確定出存在邊界的代碼數(shù)據(jù),并確定出邊界條件;其中,存在邊界的代碼數(shù)據(jù)至少包括循環(huán)語句、條件語句、數(shù)組訪問以及指針解引用中的一項;基于函數(shù)定義信息、數(shù)據(jù)流信息以及邊界條件,得到待測試單元;其中,待測試單元至少包括關(guān)鍵函數(shù)、邊界條件以及異常路徑中的一項。
6、在本技術(shù)的一種實現(xiàn)方式中,將輸入變量替換為符號值,通過符號值對待測試單元對應(yīng)的不同路徑分別進行路徑約束條件的采集,具體包括:確定出待測試單元對應(yīng)的控制流圖;將輸入變量替換為符號值,使符號值遍歷控制流圖,以基于控制流圖中的各條件分支生成不同的執(zhí)行路徑;基于執(zhí)行路徑的分支點,生成相應(yīng)的條件表達式,并將條件表達式作為分支點約束條件;基于待測試單元對應(yīng)的多個分支點約束條件,得到測試單元對應(yīng)的路徑約束條件。
7、在本技術(shù)的一種實現(xiàn)方式中,基于采集的路徑約束條件,得到測試用例信息,基于測試用例信息確定出相應(yīng)的測試框架,生成參考測試用例,具體包括:將待測試單元對應(yīng)的路徑約束條件輸入約束求解器,得到觸發(fā)不同執(zhí)行路徑的輸入值;基于輸入值得到測試用例信息;將測試用例信息與預(yù)置測試框架參照表進行匹配,確定出參考測試框架;其中,預(yù)置測試框架參照表包括多種測試框架,以及還包括多種測試框架分別對應(yīng)的集成條件;集成條件至少包括集成能力、集成所需語言類型、擴展性以及維護性中的一項;在參考測試框架中,根據(jù)測試用例信息生成參考測試用例。
8、在本技術(shù)的一種實現(xiàn)方式中,執(zhí)行參考測試用例,在測試覆蓋率滿足預(yù)置覆蓋率閾值的情況下,確定參考測試用例為所需測試用例,具體包括:執(zhí)行參考測試用例,獲取測試覆蓋率;將測試覆蓋率與預(yù)置覆蓋率閾值進行比對,在測試覆蓋率小于預(yù)置覆蓋率閾值的情況下,確定出未被測試覆蓋的路徑;針對未被測試覆蓋的路徑,生成新的測試用例,基于新的測試用例與參考測試用例生成新的參考測試用例,以進行測試用例生成迭代;執(zhí)行新的參考測試用例,直至新的參考測試用例對應(yīng)的測試覆蓋率大于預(yù)置覆蓋率閾值,結(jié)束迭代過程,得到所需測試用例。
9、在本技術(shù)的一種實現(xiàn)方式中,基于測試用例信息確定出相應(yīng)的測試框架,生成參考測試用例之后,方法還包括:將參考測試用例對應(yīng)的執(zhí)行路徑進行向量化處理;將向量化處理后的執(zhí)行路徑與預(yù)置缺陷數(shù)據(jù)向量進行相似度計算,以基于相似度結(jié)果確定出參考測試用例匹配的參考缺陷數(shù)據(jù);基于匹配關(guān)系,將參考測試用例劃分為多個測試用例組;基于每個測試用例組,將每個測試用例路徑作為一個節(jié)點,對測試用例進行模擬執(zhí)行測試用例路徑,基于模擬結(jié)果,對各節(jié)點進行權(quán)重分配;基于權(quán)重分配結(jié)果與各參考缺陷數(shù)據(jù)分別對應(yīng)的權(quán)重,對參考測試用例進行篩選。
10、在本技術(shù)的一種實現(xiàn)方式中,將參考測試用例對應(yīng)的執(zhí)行路徑進行向量化處理,具體包括:基于各參考測試用例,構(gòu)建參考測試用例集;基于孤立森林算法,確定出各參考測試用例分別對應(yīng)的異常分值,基于異常分值將參考測試用例集中的異常參考測試用例進行篩除;對篩除后的各參考測試用例的路徑進行特征提取,得到各參考測試用例分別對應(yīng)的數(shù)據(jù)特征值;對各數(shù)據(jù)特征值進行組合,得到參考測試用例集對應(yīng)的數(shù)據(jù)特征集;將各數(shù)據(jù)特征值分別在數(shù)據(jù)特征集中進行投影,得到各數(shù)據(jù)特征值分別對應(yīng)的第一數(shù)據(jù)特征向量;基于數(shù)據(jù)特征的不同,對第一數(shù)據(jù)特征向量中不同數(shù)據(jù)特征進行權(quán)重分配,得到各測試用例分別對應(yīng)的第二數(shù)據(jù)特征向量。
11、在本技術(shù)的一種實現(xiàn)方式中,通過編譯器llvm對獲取到的源代碼進行解析,生成中間表示,具體包括:通過編譯器llvm對獲取到的源代碼預(yù)處理;其中,預(yù)處理包括宏定義替換以及頭文件導(dǎo)入;將預(yù)處理后的源代碼進行切割,并基于切割后的源代碼進行單詞序列組合,以構(gòu)建語法樹;通過代碼生成器對語法樹自頂向下進行遍歷,以生成中間表示。
12、本技術(shù)實施例提供一種單元測試用例生成設(shè)備,包括:至少一個處理器;以及,與至少一個處理器通信連接的存儲器;其中,存儲器存儲有可被至少一個處理器執(zhí)行的指令,指令被至少一個處理器執(zhí)行,以使至少一個處理器能夠:通過編譯器llvm對獲取到的源代碼進行解析,生成中間表示;對中間表示進行代碼分析與邊界分析,以得到待測試單元;將輸入變量替換為符號值,通過符號值對待測試單元對應(yīng)的不同路徑分別進行路徑約束條件的采集;基于采集的路徑約束條件,得到測試用例信息,基于測試用例信息確定出相應(yīng)的測試框架,生成參考測試用例;執(zhí)行參考測試用例,在測試覆蓋率滿足預(yù)置覆蓋率閾值的情況下,確定參考測試用例為所需測試用例。
13、本技術(shù)實施例提供的一種非易失性計算機存儲介質(zhì),存儲有計算機可執(zhí)行指令,計算機可執(zhí)行指令設(shè)置為:通過編譯器llvm對獲取到的源代碼進行解析,生成中間表示;對中間表示進行代碼分析與邊界分析,以得到待測試單元;將輸入變量替換為符號值,通過符號值對待測試單元對應(yīng)的不同路徑分別進行路徑約束條件的采集;基于采集的路徑約束條件,得到測試用例信息,基于測試用例信息確定出相應(yīng)的測試框架,生成參考測試用例;執(zhí)行參考測試用例,在測試覆蓋率滿足預(yù)置覆蓋率閾值的情況下,確定參考測試用例為所需測試用例。
14、本技術(shù)實施例采用的上述至少一個技術(shù)方案能夠達到以下有益效果:本技術(shù)實施例中間標識是一種與機器和語言無關(guān)的中間代碼表示形式,能夠跨不同的平臺和架構(gòu)進行代碼分析和轉(zhuǎn)換,提高了代碼的可移植性和復(fù)用性。通過對中間表示進行代碼分析,更加精確地理解程序的結(jié)構(gòu)和行為,確保測試用例能夠覆蓋代碼的關(guān)鍵路徑和邊界情況。通過符號執(zhí)行技術(shù),自動探索程序的執(zhí)行路徑,無需手動構(gòu)造大量測試用例。通過執(zhí)行測試用例,驗證程序的正確性和穩(wěn)定性,及時發(fā)現(xiàn)并修復(fù)潛在的問題。本技術(shù)實施例通過編譯器llvm對源代碼進行解析、分析,并生成測試用例,不僅提高了測試的自動化程度和效率,還增強了測試的全面性和有效性。