toplogo
登入

大規模軟件測試生成和測試完成基準測試


核心概念
現有的代碼生成模型可以幫助改善許多常見的軟件任務,從代碼完成到缺陷預測。然而,現有的基準測試主要集中在代碼創作或代碼完成,而很少關注軟件測試,儘管良好的測試軟件與有效的錯誤檢測之間存在強烈的相關性。為了填補這一空白,我們創建並發布了TESTGENEVAL,這是一個大規模的基準測試,用於測量測試生成性能。TESTGENEVAL包含來自11個維護良好的Python存儲庫的1,210個代碼和測試文件對,涵蓋了初始測試編寫、測試套件完成和代碼覆蓋率提高。我們評估了幾種流行的模型,參數大小從7B到405B不等。我們的詳細分析突出了TESTGENEVAL對全面評估測試生成性能的貢獻。特別是,模型難以生成高覆蓋率的測試套件,最佳模型GPT-4o只達到35.2%的平均覆蓋率。這主要是由於模型難以推理執行,以及在處理複雜代碼路徑時經常出現斷言錯誤。
摘要

TESTGENEVAL是一個大規模的基準測試,用於測量軟件測試生成和測試完成的性能。它包含來自11個大型、維護良好的Python存儲庫的1,210個代碼和測試文件對。

TESTGENEVAL包含兩個任務:

  1. 全文件單元測試生成:目標是生成整個測試套件,給定要測試的類。我們使用覆蓋率和突變得分來評估生成的測試套件的價值。
  2. 測試完成:目標是生成現有測試套件中的下一個測試,給定現有測試套件和要測試的文件。我們測量通過率和覆蓋率改善。

我們評估了從7B到405B參數不等的各種流行模型。結果顯示,模型難以生成高覆蓋率和高突變得分的測試套件。最佳模型GPT-4o只達到35.2%的平均覆蓋率和18.8%的突變得分。模型在推理代碼執行和生成正確的斷言方面存在困難。

相比之下,測試完成任務相對更容易,最佳模型在最後一個測試完成設置中達到74.3%的通過率。但是,模型難以為現有的完整測試套件增加覆蓋率,通常只能測試已經被覆蓋的計算路徑。

我們還進行了廣泛的定量和定性分析,包括與其他基準的相關性、設置和模型之間的相關性、常見的模型錯誤以及樣本和上下文窗口大小的影響。我們還比較了Codestral、GPT-4o和Llama 405B在區分問題方面的表現。

edit_icon

客製化摘要

edit_icon

使用 AI 重寫

edit_icon

產生引用格式

translate_icon

翻譯原文

visual_icon

產生心智圖

visit_icon

前往原文

統計資料
以下是一些重要的數據指標: 最佳模型GPT-4o的平均覆蓋率為35.2% 最佳模型GPT-4o的突變得分為18.8% 最佳模型Codestral 22B在最後一個測試完成設置中達到74.3%的通過率
引述

深入探究

如何設計更具挑戰性的測試生成任務,以進一步推動模型在這一領域的發展?

為了設計更具挑戰性的測試生成任務,可以考慮以下幾個方面: 複雜性增加:引入更複雜的代碼結構,例如多層次的繼承、接口和抽象類,要求模型能夠理解和生成針對這些結構的測試。這樣的設計可以促使模型在處理複雜邏輯時進行更深入的推理。 多樣化的測試類型:除了單元測試,還可以引入集成測試和功能測試的生成任務。這要求模型不僅要考慮單一函數的行為,還要考慮多個模塊之間的交互,從而提高測試的全面性。 隨機化測試數據:設計任務時,可以隨機生成測試數據和邊界條件,挑戰模型在不同情境下生成有效的測試。這樣的隨機性可以幫助模型學習如何處理不確定性和變化。 引入錯誤和缺陷:在生成的代碼中故意引入錯誤,要求模型生成能夠檢測這些錯誤的測試。這不僅能提高測試的有效性,還能促進模型在錯誤檢測方面的能力。 性能和效率考量:設計測試生成任務時,可以考慮測試的執行效率和性能,要求模型生成的測試不僅要正確,還要在執行時具備良好的性能表現。 這些挑戰性的設計將促使模型在測試生成的能力上不斷進步,並推動整個領域的發展。

除了覆蓋率和突變得分,還有哪些指標可以用來更全面地評估生成的測試套件的質量?

除了覆蓋率和突變得分,還可以考慮以下指標來更全面地評估生成的測試套件的質量: 測試通過率:這是指生成的測試中有多少比例的測試能夠成功通過。高的測試通過率表明生成的測試能夠有效地驗證代碼的正確性。 測試執行時間:測試的執行時間也是一個重要指標,因為過長的執行時間可能會影響開發效率。理想的測試應該在合理的時間內完成。 錯誤檢測率:這是指生成的測試能夠檢測到的錯誤或缺陷的比例。高的錯誤檢測率表明測試的有效性,能夠幫助開發者及早發現問題。 測試的可維護性:測試代碼的可讀性和可維護性也是評估其質量的重要指標。良好的測試應該易於理解和修改,以便在代碼變更時能夠快速適應。 測試的多樣性:測試的多樣性指的是測試用例在不同情境下的覆蓋程度。多樣化的測試用例能夠更全面地驗證代碼的行為,減少潛在的邊界情況未被測試的風險。 這些指標的綜合考量將有助於更全面地評估生成的測試套件的質量,並促進測試生成技術的進一步發展。

模型在推理代碼執行和生成正確斷言方面的困難是否可以通過改進模型架構或訓練方法來解決?

模型在推理代碼執行和生成正確斷言方面的困難,確實可以通過改進模型架構和訓練方法來解決。以下是幾個可能的改進方向: 增強模型架構:可以考慮使用更先進的模型架構,例如結合圖神經網絡(GNN)來處理代碼的結構信息,這樣可以幫助模型更好地理解代碼的執行流和依賴關係。 多任務學習:通過多任務學習的方式,同時訓練模型進行代碼生成和測試生成,這樣可以促進模型在理解代碼上下文和生成測試斷言方面的能力。 強化學習:引入強化學習的方法,通過獎勵機制來鼓勵模型生成高質量的測試用例和正確的斷言。這樣的訓練方式可以使模型在生成過程中不斷優化其策略。 增強數據集:擴充訓練數據集,特別是包含多樣化的代碼示例和測試用例,能夠幫助模型學習到更廣泛的代碼模式和測試策略。 錯誤分析和反饋機制:建立一個系統的錯誤分析和反饋機制,讓模型能夠從生成的錯誤中學習,逐步改進其生成能力。 這些改進措施將有助於提升模型在推理代碼執行和生成正確斷言方面的能力,從而提高測試生成的質量和有效性。
0
star