System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本公開涉及軟件開發,具體涉及一種基于程序執行路徑分解的測試用例生成方法、裝置。
技術介紹
1、在軟件開發過程中,單元測試是確保代碼質量和功能正確性的關鍵環節。單元測試是指驗證軟件中的最小可測試部分(例如單個函數)的正確性。單元測試的目的是隔離代碼的一小部分,并確保這部分代碼在各種輸入條件下都能按預期工作。
2、現有技術中一般利用大模型技術來生成代碼的單元測試用例,但針對結構層次較多且各層次之間相互關聯的類型的程序,例如:第二層次的函數的執行需要使用的第一層次函數的結果,或者,是第一層次函數的一種條件的分支,大模型在理解方面存在局限性,導致生成的測試用例可能無法全面覆蓋代碼的所有邏輯分支和邊界條件,從而影響整個測試流程的效率和效果。
技術實現思路
1、有鑒于此,本公開提出了一種基于程序執行路徑分解的測試用例生成方法、裝置,以解決相關技術中由于大模型在理解邏輯復雜程序時存在局限性,導致生成的測試用例可能無法覆蓋代碼的所有邏輯分支和邊界條件,影響測試效率和效果的問題。
2、本公開第一方面實施例提出了一種基于程序執行路徑分解的測試用例生成方法,所述方法包括:
3、獲取目標代碼,所述目標代碼中包括目標函數語句的代碼,所述目標函數語句是指觸發至少兩個執行條件的函數語句;
4、按照代碼執行路徑對所述目標代碼進行拆分,得到多個子代碼,所述多個子代碼包括所述至少兩個執行條件分別對應的子代碼;
5、針對所述多個子代碼中的任意一個子代碼,生成與
6、根據與所述多個子代碼一一對應的多個單元測試用例,生成所述目標代碼的測試用例。
7、本公開實施例通過按照代碼執行路徑對目標代碼進行拆分,得到多個子代碼;生成與每個目標代碼對應的測試用例,并基于所有測試用例生成目標代碼的測試用例,能夠使得生成的測試用例全面覆蓋代碼的所有邏輯分支,從而達到提高單元測試的測試效率和測試效果的目的。
8、在本公開實施例中,所述按照代碼執行路徑對所述目標代碼進行拆分,得到多個子代碼,包括:
9、將所述目標代碼轉換為對應的抽象語法樹;
10、根據所述至少兩個執行條件分別對所述抽象語法樹進行拆分,得到多個子抽象語法樹,所述至少兩個執行條件中任一執行條件對應的執行功能對應所述多個子抽象語法樹中的一個子抽象語法樹;
11、將所述多個子抽象語法樹分別進行轉換,得到所述多個子代碼。
12、在本公開實施例中,所述目標函數語句是以下任一:判斷函數語句、選擇函數語句和循環函數語句。
13、在本公開實施例中,所述目標函數語句為所述判斷函數語句;所述根據所述至少兩個執行條件分別對所述抽象語法樹進行拆分,得到多個子抽象語法樹,包括:
14、當所述抽象語法樹的多個子節點中存在所述判斷函數語句的判斷節點時,確定與所述判斷節點對應的肯定分支結構和否定分支結構;
15、基于所述肯定分支結構,生成與所述肯定分支結構對應的第一子抽象語法樹;
16、基于所述否定分支結構,生成與所述否定分支結構對應的第二子抽象語法樹。
17、本公開實施例通過確定抽象語法樹中判斷節點所對應的肯定分支結構和否定分支結構,生成與之對應的子抽象語法樹,有助于針對程序的不同分支生成測試用例,從而達到提高語句覆蓋率和分支覆蓋率的目的,也可以更精準地測試程序在不同條件下的行為。
18、在本公開實施例中,所述目標函數語句為所述選擇函數語句;所述根據所述至少兩個執行條件分別對所述抽象語法樹進行拆分,得到多個子抽象語法樹,包括:
19、當所述抽象語法樹的多個子節點中存在所述選擇函數語句的選擇節點時,確定與所述選擇節點對應的多個類型分支結構;
20、針對所述多個類型分支結構中的任意一個類型分支結構,基于所述類型分支結構,生成與所述類型分支結構對應的第三子抽象語法樹。
21、本公開實施例通過確定抽象語法樹中與選擇節點相對應的多個類型分支結構,并生成與每個類型分支結構相對應的子抽象語法樹,生成多個子抽象語法樹可以確保測試路徑覆蓋到所有可能的執行路徑,包括那些由不同條件分支組合形成的復雜路徑,從而達到提高條件覆蓋率的目的,進而實現提高單元測試的測試效率和測試效果。
22、在本公開實施例中,所述目標函數語句為所述循環函數語句;所述根據所述至少兩個執行條件分別對所述抽象語法樹進行拆分,得到多個子抽象語法樹,包括:
23、當所述抽象語法樹的多個子節點中存在所述循環函數語句的目標循環節點時,確定與所述目標循環節點對應的目標分支結構;所述目標循環節點是指以原有變量作為截止判斷條件的循環節點,所述目標分支結構包括所述目標循環節點,以及所述目標循環節點的所有子節點;
24、基于所述目標分支結構,生成與所述目標分支結構對應的第四子抽象語法樹。
25、在本公開實施例中,所述根據與所述多個子代碼一一對應的多個單元測試用例,生成所述目標代碼的測試用例,包括:
26、將所述多個單元測試用例進行合并,得到所述目標代碼的測試用例。
27、在本公開實施例中,在所述生成與所述子代碼對應的單元測試用例之前,還包括:
28、獲取訓練樣本;所述訓練樣本包括多個樣本代碼,以及與所述多個樣本代碼一一對應的多個樣本單元測試用例;
29、使用所述訓練樣本訓練初始模型,得到所述單元測試用例生成模型,所述單元測試用例生成模型用于根據所述子代碼生成單元測試用例。
30、在本公開實施例中,所述獲取訓練樣本,包括:
31、獲取多個樣本代碼,以及與所述多個樣本代碼一一對應的多個樣本單元測試用例;
32、針對所述多個樣本代碼中的任意一個樣本代碼,從所述樣本代碼中提取出對應的特征向量;所述特征向量包括以下至少一種:結構特征、語法特征以及邏輯復雜度特征;
33、將每個樣本代碼的特征向量,以及對應的樣本單元測試用例作為所述訓練樣本。
34、本公開第二方面的實施例提供了一種基于程序執行路徑分解的測試用例生成裝置,包括:
35、代碼獲取模塊,用于獲取目標代碼,所述目標代碼中包括目標函數語句的代碼,所述目標函數語句是指觸發至少兩個執行條件的函數語句;
36、代碼拆分模塊,用于按照代碼執行路徑對所述目標代碼進行拆分,得到多個子代碼,所述多個子代碼包括所述至少兩個執行條件分別對應的子代碼;
37、單元測試用例生成模塊,用于針對所述多個子代碼中的任意一個子代碼,生成與所述子代碼對應的單元測試用例;
38、測試用例生成模塊,用于根據與所述多個子代碼一一對應的多個單元測試用例,生成所述目標代碼的測試用例。
39、本公開第三方面的實施例提供了一種計算機設備,該計算機設備包括存儲器和處理器,所述存儲器和所述處理器之間互相通信連接,所述存儲器中本文檔來自技高網...
【技術保護點】
1.一種基于程序執行路徑分解的測試用例生成方法,其特征在于,所述方法包括:
2.根據權利要求1所述的方法,其特征在于,所述按照代碼執行路徑對所述目標代碼進行拆分,得到多個子代碼,包括:
3.根據權利要求2所述的方法,其特征在于,所述目標函數語句是以下任一:判斷函數語句、選擇函數語句和循環函數語句。
4.根據權利要求3所述的方法,其特征在于,所述目標函數語句為所述判斷函數語句;所述根據所述至少兩個執行條件分別對所述抽象語法樹進行拆分,得到多個子抽象語法樹,包括:
5.根據權利要求3所述的方法,其特征在于,所述目標函數語句為所述選擇函數語句;所述根據所述至少兩個執行條件分別對所述抽象語法樹進行拆分,得到多個子抽象語法樹,包括:
6.根據權利要求3所述的方法,其特征在于,所述目標函數語句為所述循環函數語句;所述根據所述至少兩個執行條件分別對所述抽象語法樹進行拆分,得到多個子抽象語法樹,包括:
7.根據權利要求1或2所述的方法,其特征在于,所述根據與所述多個子代碼一一對應的多個單元測試用例,生成所述目標代碼的測試用例
8.根據權利要求1所述的方法,其特征在于,在所述生成與所述子代碼對應的單元測試用例之前,還包括:
9.根據權利要求8所述的方法,其特征在于,所述獲取訓練樣本,包括:
10.一種基于程序執行路徑分解的測試用例生成裝置,其特征在于,所述裝置包括:
...【技術特征摘要】
1.一種基于程序執行路徑分解的測試用例生成方法,其特征在于,所述方法包括:
2.根據權利要求1所述的方法,其特征在于,所述按照代碼執行路徑對所述目標代碼進行拆分,得到多個子代碼,包括:
3.根據權利要求2所述的方法,其特征在于,所述目標函數語句是以下任一:判斷函數語句、選擇函數語句和循環函數語句。
4.根據權利要求3所述的方法,其特征在于,所述目標函數語句為所述判斷函數語句;所述根據所述至少兩個執行條件分別對所述抽象語法樹進行拆分,得到多個子抽象語法樹,包括:
5.根據權利要求3所述的方法,其特征在于,所述目標函數語句為所述選擇函數語句;所述根據所述至少兩個執行條件分別對所述抽象語法樹進...
【專利技術屬性】
技術研發人員:李戈,蔣思源,劉洋,
申請(專利權)人:北京硅心科技有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。