基于大模型的測試斷言生成技術(shù)_第1頁
基于大模型的測試斷言生成技術(shù)_第2頁
基于大模型的測試斷言生成技術(shù)_第3頁
基于大模型的測試斷言生成技術(shù)_第4頁
基于大模型的測試斷言生成技術(shù)_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

基于大模型的測試斷言生成技術(shù)房春榮

南京大學(xué)房春榮南京博士,南京大學(xué)軟件學(xué)院準(zhǔn)聘副生者,CCF高級會員,系統(tǒng)軟件/容錯計算專委會委員,主要從事智能軟件工程研究(BigCode

&AITesting)。主持國家自然科學(xué)基金項目3項,國家重點(diǎn)研發(fā)項目骨干2項,教育部產(chǎn)學(xué)合作協(xié)同育人項目3項,橫向科研項目若干。在CCF-A會議/期刊發(fā)表論文40余篇,獲得國際會議最佳論文1項,申請發(fā)明專利10余項,部分成果在華為、百度等知名企業(yè)應(yīng)用。曾擔(dān)任AST、AIST等國際會議程序委員會共同主席,多次擔(dān)任國際頂級會議程序委員會委員及頂級期刊審稿人,并多次獲得杰出審稿人。參編多項軟件工程和工業(yè)APP相關(guān)某省市、團(tuán)體標(biāo)準(zhǔn)。獲2022年國家級教學(xué)成果獎,CCF

TCFTC2021年軟件測試青年創(chuàng)新獎,2020國家級一流本科課程、2018國家精品在線開放課程《軟件測試》。目

錄CONTENTS研究背景單元測試生成和修復(fù)3.

單元測試的斷言問題① 初步探索:面向單元測試場景的大模型斷言生成能力② 檢索角度:基于混合檢索增強(qiáng)的單元測試斷言生成③ 訓(xùn)練角度:基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成應(yīng)用驗(yàn)證總結(jié)與展望PART

01研究背景大語言模型和單元測試基礎(chǔ)研究背景-單元測試與測試斷言單元測試的例子斷言問題:預(yù)期的行為或測試斷言應(yīng)該是什么測試前綴測試斷言功能實(shí)現(xiàn)預(yù)期功能單元測試:一種被廣泛接受的甚至是強(qiáng)制性的開發(fā)實(shí)踐研究背景-單元測試生成方法存在的主要問題大模型生成單元測試的流程圖以大模型會話迭代為主要框架的代表性方法充分利用了大模型的語義理解和代碼生成能力,以

CODAMOSA

為代表的算法,計算資源的開銷主要取決于選取的傳統(tǒng)測試方法,大模型作為輔助工具來改進(jìn)傳統(tǒng)測試方法研究背景-單元測試生成方法存在的主要問題生成無效測試用例:大型語言模型(LLMs)可能在上下文不足的情況下生成無效的測試用例,導(dǎo)致編譯錯誤。這意味著生成的測試用例無法成功運(yùn)行,影響測試過程的有效性。缺乏測試和覆蓋反饋:缺乏詳細(xì)的測試反饋和覆蓋率信息可能導(dǎo)致生成的測試用例在運(yùn)行時出現(xiàn)錯誤,并且覆蓋率低。這意味著生成的測試用例可能未能充分測試目標(biāo)代碼,從而降低了測試的全面性和有效性。重復(fù)抑制問題:現(xiàn)有方法中,LLMs可能會陷入自我修復(fù)或再生成嘗試的重復(fù)循環(huán),導(dǎo)致生成過程低效。即模型在面對生成錯誤時,可能會不斷嘗試修復(fù)同樣的錯誤而無法前進(jìn),從而浪費(fèi)計算資源和時間。研究背景-單元測試生成方法存在的主要問題基于LLM的單元測試生成的局限性:EvoSuite缺乏深入理解源代碼的能力,因此復(fù)雜的前提條件縮小了基于搜索的測試生成方法的適用范圍。盡管LLM在理解語義信息和推理生成能力方面表現(xiàn)出色,但生成的測試用例中不可避免地存在編譯錯誤和運(yùn)行時錯誤。如果這些錯誤能夠得到修復(fù),LLM生成的測試用例質(zhì)量將大大提高。研究背景-自動斷言生成方法存在的主要問題手動編寫單元測試的勞動密集性:編寫測試斷言通常非常耗時且勞動密集,需要測試專家手動插入測試輸入(如前綴)和測試輸出(如斷言)?,F(xiàn)有方法的局限性:基于深度學(xué)習(xí)(DL)的方法通常需要大量的訓(xùn)練數(shù)據(jù),并且可能在處理特定任務(wù)時表現(xiàn)不佳。依賴于從現(xiàn)有數(shù)據(jù)中檢索相關(guān)的測試斷言,可能會受到詞匯匹配的限制,難以生成語義上有意義的斷言。有方法沒有采用聯(lián)合訓(xùn)練策略,導(dǎo)致檢索器和生成器之間缺乏協(xié)同優(yōu)化,無法充分利用各自的優(yōu)勢來生成更準(zhǔn)確的斷言。有方法在有限的訓(xùn)練數(shù)據(jù)上表現(xiàn)不佳,難以生成高質(zhì)量的斷言?,F(xiàn)有使用LLM進(jìn)行單元測試生成的技術(shù)的有效性并沒有系統(tǒng)的比較研究。PART

02單元測試生成和修復(fù)單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)生成階段:是TestART方法的核心步驟,旨在利用大型語言模型(LLM)生成初始的單元測試用例。通過這一階段,TestART可以自動化生成測試用例,從而減少人工測試的工作量,并提高代碼覆蓋率。生成階段的成功執(zhí)行依賴于有效的上下文預(yù)處理和模型提示設(shè)計,以充分發(fā)揮LLM的潛力。修復(fù)階段:修復(fù)部分介紹了一種通過聯(lián)合訓(xùn)練來改進(jìn)檢索增強(qiáng)的深度斷言生成方法(AG-RAG),AG-RAG結(jié)合外部代碼庫和預(yù)訓(xùn)練語言模型,解決了以前方法中的技術(shù)局限,在所有基準(zhǔn)和指標(biāo)上顯著優(yōu)于現(xiàn)有的斷言生成方法,大幅提高了準(zhǔn)確性和生成唯一斷言的能力。單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)生成階段步驟1、

被測代碼預(yù)處理代碼清理與壓縮:在生成階段之前,源代碼需要經(jīng)過預(yù)處理,以確保LLM聚焦于代碼的關(guān)鍵部分。清理步驟:去除注釋:

移除所有代碼注釋,以防止注釋內(nèi)容與代碼邏輯的不一致導(dǎo)致LLM產(chǎn)生幻覺。刪除多余空行:精簡代碼結(jié)構(gòu),提升模型處理效率。上下文壓縮:僅保留焦點(diǎn)方法的完整方法體,其他非關(guān)鍵方法僅保留其方法簽名。保留必要的類變量和常量以維持代碼的結(jié)構(gòu)和功能完整性。變量和方法信息提取:提取所需的變量和方法信息,包括方法簽名、起始和結(jié)束行號、變量名和數(shù)據(jù)類型。提取的信息用于構(gòu)建模型提示,指導(dǎo)生成階段的測試用例設(shè)計。單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)3、

處理生成的初始測試用例初步檢查和修正:對生成的測試用例進(jìn)行初步檢查,識別并標(biāo)記編譯錯誤和語法錯誤。修正簡單的語法問題,確保測試用例在編譯器中通過基礎(chǔ)驗(yàn)證。生成結(jié)果記錄與分析:記錄生成測試用例的數(shù)量、類型和初步結(jié)果。分析生成的測試用例覆蓋范圍及其在真實(shí)場景下的有效性。生成階段步驟2、調(diào)用大模型生成初始測試用例提示設(shè)計與模型調(diào)用:設(shè)計特定的提示以激發(fā)LLM生成測試用例的能力。提示內(nèi)容包括代碼上下文、預(yù)期行為描述以及已知測試條件。利用OpenAI的ChatGPT-3.5,通過API接口生成初始測試用例。生成的初始測試用例(

??!

):ChatGPT-3.5生成的初始測試用例被稱為

??!

。??!

包含對目標(biāo)代碼的多樣化測試,包括基本功能測試和邊界條件測試。單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)利用提示注入優(yōu)化生成提示注入策略:使用修復(fù)后的測試用例作為提示輸入,防止LLM在后續(xù)生成中出現(xiàn)相同錯誤。提示注入能有效減少模型的重復(fù)抑制問題,提高生成用例質(zhì)量。提示優(yōu)化的效果:修復(fù)后的提示能夠引導(dǎo)LLM在生成新用例時避免已知錯誤,并優(yōu)化測試覆蓋率。實(shí)驗(yàn)證明,經(jīng)過提示優(yōu)化的生成階段能顯著提高生成用例的通過率和覆蓋率。生成階段步驟4、準(zhǔn)備進(jìn)入修復(fù)階段錯誤標(biāo)記與修復(fù)策略準(zhǔn)備:標(biāo)記測試用例中的編譯和運(yùn)行時錯誤,準(zhǔn)備進(jìn)入修復(fù)階段進(jìn)行詳細(xì)修復(fù)。應(yīng)用模板修復(fù)策略,自動修復(fù)簡單錯誤,減少修復(fù)階段的工作量。生成-修復(fù)協(xié)同進(jìn)化的準(zhǔn)備:在生成階段結(jié)束時,確保所有初步生成的測試用例已準(zhǔn)備好進(jìn)入修復(fù)階段。修復(fù)后的代碼作為新一輪生成的基礎(chǔ),進(jìn)行迭代優(yōu)化。單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)1、編譯與執(zhí)行把測試代碼的編譯和執(zhí)行分開為兩個步驟進(jìn)行,這樣做的目的是為了更準(zhǔn)確地定位問題所在,針對不同類型的錯誤進(jìn)行分類處理,并采用對應(yīng)的修復(fù)模板。2、錯誤代碼定位與信息提取通過分析

Maven

編譯時的日志來定位問題。日志包含了詳細(xì)的錯誤信息、錯誤發(fā)生的代碼位置以及相關(guān)的警告信息。對于運(yùn)行錯誤,本方法通過分析報錯時輸出的堆棧追蹤信息來定位問題。堆棧追蹤信息詳細(xì)包含了異常的類型、發(fā)生位置(包括類名、方法名和行號等)以及導(dǎo)致異常的方法調(diào)用鏈。圖

修復(fù)流程修復(fù)階段步驟單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)模板一、導(dǎo)包錯誤模版發(fā)生編譯錯誤后,如果錯誤原因?yàn)槲凑业椒?,且在詳?xì)錯誤信息中是由

于找不到類符號引起的,那么就認(rèn)為是導(dǎo)包錯誤導(dǎo)致的編譯錯誤。首先索引測試項目、JDK

和所有第三方依賴的

JAR

包,以獲取在測試期間所有可訪問的

Java

類的完全限定類名(例如,java.util.HashMap)。從詳細(xì)錯誤原因中提取缺失的類名,并從索引中找到該類的完全限定類名,然后進(jìn)行導(dǎo)入。修復(fù)階段步驟3、模板修復(fù)本發(fā)明專注于修復(fù)生成的測試用例中出現(xiàn)的編譯錯誤、斷言錯誤以及運(yùn)行時錯誤。本發(fā)明的修復(fù)過程更注重測試用例的邏輯和預(yù)期行為,確保代碼的每個部分都能正確運(yùn)行。單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)模板二、布爾類斷言修復(fù)模板三、相等類斷言修復(fù)當(dāng)在測試用例中使用

assertNull

方法或者assertTrue方法進(jìn)行斷言時,如果測試失敗,意味著被檢查的對象與預(yù)期矛盾。在這種情況下,將

assertNull

更正為

assertNotNull

,

assertTrue更正為assertFalse是一種快速修復(fù)策略。相反,如果在斷言中使用

assertNotNull

或assertFalse測試失敗,則將assertNotNull更正為

assertNull,

assertFalse更正為assertTrue

。在測試用例中使用

assertEquals方法進(jìn)行斷言時,通常需要比較兩個值是否相等。使用正則表達(dá)式來提取測試報告中的預(yù)期值和實(shí)際值。對提取出的實(shí)際值進(jìn)行處理,去除多余的括號和特殊字符,并根據(jù)實(shí)際值的類型和格式,構(gòu)造相應(yīng)的替換字符串。使用替換字符換將

assertEquals中的第一個參數(shù)替換為實(shí)際值。修復(fù)階段步驟單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)模板四、插入異常處理模板五、增加捕獲語句當(dāng)測試用例的某行代碼拋出異常時,通過插入異常處理語句,可以捕獲這個異常,達(dá)到修復(fù)的目的通過使用

try-catch

語句包裹可能拋出異常的代碼行,并在

catch塊中處理預(yù)期的異常類型。在某些情況下,現(xiàn)有的異常處理語句可能無法完全覆蓋代碼執(zhí)行過程中實(shí)

際拋出的所有異常類型。為了進(jìn)一步提高測試用例的健壯性,添加catch語句可以確保原有的異常處理邏輯

保持完整,同時避免修改引入新的錯誤、擴(kuò)大了異常處理的覆蓋范圍,使測試用例能夠應(yīng)對更多的錯誤場景。修復(fù)階段步驟單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)

修復(fù)階段步驟4、大模型修復(fù)圖

大模型修復(fù)錯誤反饋模板在模板修復(fù)失敗的情況下,本方法采用大模型修復(fù)作為補(bǔ)充手段,以進(jìn)一步提高測試代碼的修復(fù)成功率。大模型修復(fù)的基本思路:將模板修復(fù)失敗的錯誤信息反饋給大模型,讓其分析錯誤原因,并嘗試生成修正后的測試代碼。提示模板主要由三部分組成

:錯誤提示:告知大模型先前生成的測試代碼存在斷言錯誤或者運(yùn)行時異

常,需要進(jìn)行修正。錯誤信息:將出錯的代碼行以及相關(guān)錯誤信息填充到提

示中,為大模型提供錯誤定位和分析的線索。修復(fù)要求:明確要求大模型修改測試代碼,并以

Java代碼塊的形式輸出

完整的測試代碼。單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)修復(fù)階段步驟5、覆蓋信息反饋該環(huán)節(jié)的主要目的是計算第三個環(huán)節(jié)中輸出的測試用例

Tp

在源代碼焦點(diǎn)方法上的覆蓋率,并將測試用例的覆蓋率信息反饋給大型語言模型,引導(dǎo)其生成下一輪的增量測試用例。① 計算覆蓋率使用

OpenClover

工具的

Maven插件來計算覆蓋率。清理項目以確保分析的準(zhǔn)確性利用

OpenClover

插件的

setup目標(biāo)初始化覆蓋率數(shù)據(jù)收集環(huán)境。執(zhí)行項目的測試用例集,收集測試過程中被執(zhí)行的代碼行和分支的信息。aggregate

目標(biāo)用于整合所

有單元測試的覆蓋率信息。clover

目標(biāo)生成最終的覆蓋率報告。② 構(gòu)建反饋提示自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成研究問題:RQ1:

TestART生成的測試用例在正確性方面與基線方法進(jìn)行比較RQ2:TestART生成的測試用例的充分性與基線方法進(jìn)行比較RQ3:

不同部分的組合如何影響TestART的魯棒性數(shù)據(jù)集:Defects4J

:

該數(shù)據(jù)集包含可復(fù)現(xiàn)的軟件缺陷和支持基礎(chǔ)設(shè)施,以推動軟件工程研究。數(shù)據(jù)集包括來自五個Java項目的公共和非抽象類,研究人員從中提取了作為焦點(diǎn)方法的公共方法,總計8192個方法用于評估?;€方法:EvoSuite,A3Test,ChatGPT,ChatUniTest單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)ProjectAbbr.VersionNumberofFocalmethodsGsonGson2.10.1378mons-LangLang3.1.01728mons-CliCli1.6.0177mons-CsvCsv1.10.0137JFreeChartChart1.5.45772Total8192表

Defects4J

數(shù)據(jù)集所選用的項目通過比較不同方法對8192個焦點(diǎn)方法生成的測試用例結(jié)果:相比ChatGPT提升了10%編譯通過率,16%的運(yùn)行通過率,30%的整體通過率;相比GPT-4.0提升了4%編譯通過率,17%的運(yùn)行通過率,

20%的整體通過率;RQ1:TestART生成的測試用例在正確性方面與基線方法進(jìn)行比較單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)RQ1:TestART生成的測試用例在正確性方面與基線方法進(jìn)行比較表

TestART與不同基線的正確性性能比較??Finding:實(shí)驗(yàn)結(jié)果表明,使用固定的修復(fù)模板更有效,能將通過率提高18.50%。生成的測試用例常常有相對一致的錯誤,而大語言模型難以運(yùn)行這些測試用例以獲取錯誤反饋,因此使用大語言模型進(jìn)行調(diào)試和修復(fù)往往會陷入困境。單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)RQ2:TestART生成的測試用例的充分性與基線方法進(jìn)行比較表

基線的總覆蓋率比較??

Finding:在相同的基于ChatGPT-3.5的實(shí)驗(yàn)方法中,ChatUniTest的覆蓋率雖然不如ChatGPT-4.0,但仍高于ChatGPT-3.5。TestART的平均覆蓋率比ChatGPT-4.0高出約17%,這主要得益于測試反饋和提示注入。通過覆蓋信息的指導(dǎo),增量迭代的測試用例可以大大覆蓋原測試用例中遺漏的部分單元測試生成-基于提示引導(dǎo)和動態(tài)反饋的大模型測試用例生成和修復(fù)RQ3:不同組件的組合如何影響TestART的魯棒性表

消融實(shí)驗(yàn)對比結(jié)果??

Finding:我們展示了四種不同TestART變種的總分支覆蓋率、總行覆蓋率和通過率:僅使用ChatGPT-3.5、加上修復(fù)模塊(+

Repair)、加上修復(fù)和迭代模塊(+Repair

+

Iteration)、以及完整的TestART(包括修復(fù)、迭代和測試反饋)。數(shù)據(jù)表明,修復(fù)模塊起著至關(guān)重要的作用,將通過率提高了28.64%,分支覆蓋率提高了19.03%,行覆蓋率提高了19.66%。迭代和測試反饋分別貢獻(xiàn)了約3%的覆蓋率提升。PART

03單元測試的斷言問題單元測試核心問題-測試斷言生成自動測試生成工具的局限性缺乏語義理解能力難以檢測真實(shí)缺陷(c)Generatedby

Evosuite(a)Buggy

implementation(b)Unittestfor

popExampleofaunittestcasegeneratedby

Evosuite單元測試示例Assertion自動斷言生成-之前的工作ATLAS,通過訓(xùn)練RNN模型來從現(xiàn)有代碼中提取相關(guān)斷言對的基于檢索的斷言生成方法?;谏疃葘W(xué)習(xí)的斷言生成

:

ATLAS訓(xùn)練語料有限:無法充分理解單元測試語義語義信息模型架構(gòu)局限性:RNN難以學(xué)習(xí)長序列數(shù)據(jù)和上下文關(guān)聯(lián)信息自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索圖1

基于LLM的斷言生成的架構(gòu)概述??是否可以利?更先進(jìn)的?語?模型完成斷??成任務(wù)?自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索RQ1LLM在生成單元斷言方面的推斷準(zhǔn)確性如何?LLM生成的斷言在實(shí)際軟件缺陷檢測方面的性能如何?能否通過信息檢索增強(qiáng)LLM的斷言生成能力?RQ2RQ3系統(tǒng)性比較現(xiàn)有LLMs的效果:評估不同LLMs在自動斷言生成中的表現(xiàn):研究中評估了多個大語言模型,包括CodeBERT、GraphCodeBERT、UniXcoder、CodeT5和CodeGPT探索這些模型的優(yōu)缺點(diǎn):分析每個模型的優(yōu)缺點(diǎn),找出其在生成準(zhǔn)確性、覆蓋率等方面的差異。自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索數(shù)據(jù)集1:

Dataold來源:

GitHub的250萬測試方法內(nèi)容:

包含測試前綴和相應(yīng)的斷言預(yù)處理:

去除長度超過1K的測試方法,過濾掉包含未知令牌的斷言,最終樣本數(shù)量為156,760個數(shù)據(jù)集2:

Datanew擴(kuò)展:

在Dataold基礎(chǔ)上增加了之前被過濾的樣本,共計265,420個樣本訓(xùn)練集:

80%驗(yàn)證集:

10%測試集:

10%表

數(shù)據(jù)集對比數(shù)據(jù)集自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索模型選擇選取的LLM包括:CodeBERT,GraphCodeBERT,UniXcoder,CodeT5,

CodeGPT這些模型在編碼器-解碼器架構(gòu)上進(jìn)行預(yù)訓(xùn)練和微調(diào)評價指標(biāo)準(zhǔn)確率(Accuracy):

生成斷言與參考斷言完全匹配的比例錯誤檢測能力(BugFound):

生成斷言能夠檢測到的軟件錯誤數(shù)量"$"%&基線方法現(xiàn)有的AG技術(shù)包括:

ATLAS、

????"#

、

????'"$"%&、

????((、Integration,、EditAS表:我們實(shí)驗(yàn)中選取的開源LLMs的詳細(xì)信息。自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索Dataold數(shù)據(jù)集Datanew數(shù)據(jù)集LLM的準(zhǔn)確率范圍:

51.82%~58.71%ATLAS的準(zhǔn)確率:31.42%其他AG技術(shù)的準(zhǔn)確率:

36.26%~46.54%最高準(zhǔn)確率:

58.71%比ATLAS提高:

86.86%比Integration提高:

26.15%準(zhǔn)確率對比CodeT5表現(xiàn)LLM的準(zhǔn)確率范圍:

38.72%~48.19%ATLAS的準(zhǔn)確率:21.66%其他AG技術(shù)的準(zhǔn)確率:

37.90%~44.36%最高準(zhǔn)確率:

48.19%比ATLAS提高:

122.48%比Integration提高:

14.19%RQ1:LLMs在斷言生成中的推理準(zhǔn)確性如何?自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索RQ1:LLMs在斷言生成中的推理準(zhǔn)確性如何???

Finding:(1)LLMs在自動化斷言生成中能夠達(dá)到顯著的表現(xiàn),其在Dataold和Datanew上的預(yù)測準(zhǔn)確率分別為51.82%、58.71%和38.72%~48.19%;(2)與最先進(jìn)的AG技術(shù)相比,LLMs在預(yù)測性能上有所提高,平均提高了29.60%和12.47%;(3)CodeT5在所有LLMs和所有基線中表現(xiàn)最出色,其在兩個基準(zhǔn)測試上的預(yù)測準(zhǔn)確率平均高出13.85%和39.65%。自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索RQ2:LLMs生成的斷言能有效檢測真實(shí)漏洞嗎?圖A.

LLMs

和斷言生成領(lǐng)域最新技術(shù)的錯誤檢測性能 圖B.

不同方法檢測到的錯誤的重疊率??

Finding:(1)五個選定的LLMs能夠平均檢測到32個真實(shí)漏洞,比最先進(jìn)的技術(shù)EDTAS高出52.38%;三個表現(xiàn)最好的LLMs平均能檢測到26個漏洞,比最先進(jìn)的技術(shù)EDTAS提高了136.36%;這三個LLMs的結(jié)合能夠檢測到61個漏洞,證明了LLMs在單元測試中檢測現(xiàn)實(shí)世界漏洞的潛力。自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索EASE方法的概念結(jié)合檢索到的斷言和LLMs生成新的斷言:類似程序修復(fù)任務(wù)中的“整容手術(shù)”假設(shè),通過少量編輯操作生成新的斷言。不需要從頭生成斷言,僅進(jìn)行少量編輯操作:提高生成效率和準(zhǔn)確性,減少生成新斷言的復(fù)雜度。提供實(shí)際開發(fā)場景中的額外信息:開發(fā)人員經(jīng)常參考相似的代碼片段來生成新代碼,通過結(jié)合檢索到的斷言,提供更多上下文信息。EASE方法實(shí)驗(yàn)結(jié)果EASE方法進(jìn)一步提升了LLMs的斷言生成準(zhǔn)確率:CodeT5的準(zhǔn)確率從原來的58.71%提升到63.37%。其他LLMs在EASE方法的輔助下也表現(xiàn)出色:例如,CodeBERT的準(zhǔn)確率從51.82%提升到57.60%,顯示出EASE方法的廣泛適用性和有效性。觀察:RQ1中直接檢索的斷言準(zhǔn)確率達(dá)到36%,我們是否可以利用檢索的結(jié)果進(jìn)一步引導(dǎo)大模型生成?自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索RQ3:通過檢索增強(qiáng)的LLM方法EASE能否提高現(xiàn)有LLM技術(shù)的效果???

Finding:我們的比較結(jié)果表明,通過結(jié)合LLMs和檢索到的斷言,EASE能進(jìn)一步提升現(xiàn)有斷言生成方法的性能,為所有LLMs帶來了預(yù)測準(zhǔn)確率的新記錄,例如CodeT5在Datanew上的預(yù)測準(zhǔn)確率達(dá)到51.15%。自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索討論1:候選斷言數(shù)量的影響①設(shè)計:研究了不同候選斷言數(shù)量(beamsize)對LLMs預(yù)測準(zhǔn)確性的影響?,F(xiàn)有研究(如CIRCLE)表明,生成更多候選斷言可以提高預(yù)測性能。探討在不同實(shí)際場景中,LLMs在生成Top-1和Top-5候選斷言時的預(yù)測準(zhǔn)確性。表:不同候選斷言數(shù)量下LLM在斷言生成中的實(shí)驗(yàn)結(jié)果自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索表:不同候選斷言數(shù)量下LLM在斷言生成中的實(shí)驗(yàn)結(jié)果②結(jié)果:生成Top-1候選斷言時表現(xiàn)出色,候選數(shù)量增加至5時,預(yù)測準(zhǔn)確性顯著提高。UniXcoder的預(yù)測準(zhǔn)確性從Top-5的53.11%提高到Top-50的61.20%。③總結(jié):更多候選斷言顯著提升性能,未來研究可探索多斷言過濾方法,與現(xiàn)有AG方法結(jié)合。自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索②結(jié)果:CodeT5在各種斷言類型上表現(xiàn)最佳,特別是在NotNull(58.51%)、False(48.07%)和Null(50.70%)類型上。對于Equals(41.00%)和ArrayEquals(41.22%)類型的斷言,生成準(zhǔn)確性較低。討論2:斷言類型的影響①設(shè)計:研究了不同類型斷言對LLMs性能的影響。使用JUnit測試框架中的常見斷言類型進(jìn)行實(shí)驗(yàn)。表:不同LLM在每種斷言類型下的詳細(xì)統(tǒng)計數(shù)據(jù)自動斷言生成-①面向單元測試場景的大模型斷言生成能力探索討論3:測試長度和斷言長度的影響①設(shè)計:(1)研究了輸入測試長度和輸出斷言長度對LLMs預(yù)測準(zhǔn)確性的影響。(2)探討了LLMs在生成不同長度測試和斷言時的性能。表:五個LLM在生成不同長度斷言時的比較結(jié)果②結(jié)果:輸入測試長度在300-400

tokens時,LLMs的表現(xiàn)最佳。輸出斷言長度小于100

tokens時,LLMs的生成準(zhǔn)確性較高,如CodeT5在0-20

tokens長度下的預(yù)測準(zhǔn)確性為61.33%。自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成RetriGen從檢索優(yōu)化?度,將傳統(tǒng)信息檢索和?模型的代碼理解能?結(jié)合,設(shè)計了?種基于代碼字符-嵌?向量混合檢索的斷??成框架該方法解決之前方法無法同時考慮代碼語法和語義相似性的問題。RetriGen首先構(gòu)建一個混合斷言檢索器,從外部代碼庫中搜索最相關(guān)的測試-斷言對。檢索過程既考慮了基于token和基于Embedding的斷言檢索,既有詞匯相似性也有語義相似性。然后,RetriGen將斷言生成作為序列到序列任務(wù),并設(shè)計了一個基于預(yù)訓(xùn)練語言模型的斷言生成器,以預(yù)測與檢索到的斷言相一致的斷言。自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成定義1:深度斷言生成給定一個包含m個代碼token的焦點(diǎn)測試輸入????!

=

[????",

···

,??#]和包含n個代碼token的斷言輸出??!=[??"

,

···

??$],斷言生成問題形式化為最大化條件概率,即??!作為正確斷言的可能性:其中:

????!是測試前綴,??!是斷言,??*是模型參數(shù),??&

是斷言的第j個標(biāo)記

。定義2:檢索增強(qiáng)的深度斷言生成假設(shè)C

=

(????%

,??′

)|(|& & &)"是一個包含大量歷史測試-斷言對的外部代碼庫,其中

????% 和

??′ 分別表示第j個歷& &史焦點(diǎn)測試及其對應(yīng)的斷言。給定數(shù)據(jù)集D中的一個焦點(diǎn)測試

????!,檢索器從代碼庫C中& &搜索最相關(guān)的焦點(diǎn)測試

????%

及其斷言??′

。原始焦點(diǎn)測試輸入

????!與檢索到的斷言連接形成新輸入序列

?????!=

????!⊕

??′&

,其中⊕表示連接操作。最終,斷言生成器嘗試通過學(xué)習(xí)以下概率從

?????!

生成??!

:其中:??*是檢索模型參數(shù),

????!是測試前綴,

??!

是斷言自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成基于token的檢索器:RetriGen的混合斷言檢索組件包括基于token的檢索器和基于Embedding的檢索器,以同時考慮詞匯和語義相似性?;趖oken的檢索器使用稀疏策略IR來搜索與查詢focal-test在詞匯上相似的斷言。它通過分詞數(shù)據(jù)集和代碼庫中的所有focal-test,并刪除重復(fù)token,以提高檢索效率。然后,使用Jaccard系數(shù)計算詞匯相似性。Jaccard系數(shù)通過計算兩個向量的重疊和唯一token的數(shù)量,來測量它們之間的相似性。公式定義了Jaccard相似性的計算方法,用于確定兩個focal-test之間的相似程度。(其中S(FTi)和S(FTj)分別是兩個

focal-testFTi和FTj的代碼token集。)自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成基于Embedding的檢索器:RetriGen的基于Embedding的檢索器使用了預(yù)訓(xùn)練的CodeLlama模型,直接利用其提供的語義Embedding來進(jìn)行斷言檢索。與傳統(tǒng)方法從零開始訓(xùn)練模型不同,RetriGen直接使用預(yù)訓(xùn)練模型,利用其對大量代碼的訓(xùn)練經(jīng)驗(yàn)來獲取有意義的語義Embedding。RetriGen通過將focal-test代碼分詞并轉(zhuǎn)化為向量,然后計算這些向量之間的余弦相似性來評估斷言的語義相關(guān)性。余弦相似性是一種常用的相似性度量方法,通過計算向量之間的角度余弦值來確定它們的相似程度。公式定義了余弦相似性的計算方法(其中FTi和FTj分別是兩個

focal-test

FTi和FTj的Embedding。)自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成混合檢索器:混合檢索器結(jié)合了基于token的檢索器和基于Embedding的檢索器的優(yōu)點(diǎn)?;趖oken的檢索器側(cè)重于代碼的詞匯相似性?;贓mbedding的檢索器側(cè)重于代碼的語義相似性。通過將這兩種方法結(jié)合起來,混合檢索器能夠更全面地評估兩個焦點(diǎn)測試之間的相似性。公式3展示了組合相似度分?jǐn)?shù)的計算方法,其中Jaccard相似度用于詞匯相似性,余弦相似度(cos)用于語義相似性,λ是平衡這兩種相似度的權(quán)重參數(shù)。最終,選擇相似度分?jǐn)?shù)最高的測試斷言對來指導(dǎo)斷言生成器生成新的斷言。自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成斷言生成組件基礎(chǔ)模型:RetriGen使用

CodeT5

作為基礎(chǔ)模型,根據(jù)

focal-test????!和檢索&%到的斷言

?? 生成斷言。CodeT5

是針對源代碼優(yōu)化的編碼-解碼預(yù)訓(xùn)練模型。&輸入表示:輸入為

??0??!=

????!

??% ,生成器通過序列到序列學(xué)習(xí)從

??0??! 生成輸出

??!

。模型架構(gòu):包括編碼器和解碼器,最后通過

softmax

激活的線性層輸出。代碼通過

BPE

標(biāo)記器處理,生成詞嵌入向量,并經(jīng)過編碼器和解碼器生成斷言概率分布。損失函數(shù)使用交叉熵最小化預(yù)測斷言和真實(shí)斷言之間的差異斷言推理在模型推理階段,一旦生成模型訓(xùn)練完成,RetriGen

使用集束搜索策略,根據(jù)詞匯表的概率分布生成候選斷言的排序列表。束搜索選擇概率最高的候選斷言。生成的斷言可以自動或手動評估其正確性,供單元測試使用。自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成研究問題:RQ1:RetriGen與最先進(jìn)的斷言生成方法相比RQ2:

不同的組件對RetriGen的整體有效性的影響分析RQ3:

當(dāng)使用其他先進(jìn)的LLMs時分析RetriGen的可擴(kuò)展性數(shù)據(jù)集:Dataold:

包含250萬個測試方法,經(jīng)過預(yù)處理后,最終保留了156,760個樣本。Datanew:

是Dataold的擴(kuò)展數(shù)據(jù)集,總共包含265,420個數(shù)據(jù)項,按8:1:1的比例劃分為訓(xùn)練集、驗(yàn)證集和測試集。表

Datanew和Dataold數(shù)據(jù)集基線方法:!#!$%現(xiàn)有的AG技術(shù)包括:

ATLAS、

????!"

????&!#!$%、

????''、Integration,、EditAS自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成RetriGen在兩個數(shù)據(jù)集上的平均預(yù)測準(zhǔn)確性為

57.66%,CodeBLEU

得分為

73.24%,相比所有基線分別提高了

50.66%和

14.14%。與

ATLAS

比較:

Dataold

Datanew

數(shù)據(jù)集上的預(yù)測準(zhǔn)確性分別達(dá)到了

64.09%

51.22%,分別顯著提高了

103.98%

136.47%;CodeBLEU提升了

25.46%和

75.89%。與基于檢索的方法比較:

在兩個數(shù)據(jù)集上平均提高了

55.95%、42.81%和

37.76%的準(zhǔn)確性,相比

????!"

、????& 和????'' 。!#!$% !#!$%與集成方法比較:

Dataold

上的預(yù)測準(zhǔn)確性分別提高了

37.71%

19.88%,在

Datanew

上分別提高了

21.37%

15.46%。RQ1:RetriGen與最先進(jìn)的斷言生成方法相比表

RetriGen與最先進(jìn)的自動生成(AG)方法的比較自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成表

RetriGen和基線在每種斷言類型下的詳細(xì)統(tǒng)計數(shù)據(jù)不同斷言類型的有效性:RetriGen在兩個數(shù)據(jù)集上的所有標(biāo)準(zhǔn)

JUnit

斷言類型上均優(yōu)于所有基線。對于最常見的

Equals

類型,RetriGen在兩個數(shù)據(jù)集上的預(yù)測準(zhǔn)確率分別為

64%和

50%,相比表現(xiàn)最好的

EDITAS

分別提高了20.75%

19.05%。在

Other

斷言類型中,RetriGen

Datanew

上生成了

1595個正確的斷言,相比表現(xiàn)最好的

Integration提高了

8.16%。自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成案例研究:展示了兩個實(shí)際項目中的斷言示例,分別說明

RetriGen的檢索和生成能力。相比現(xiàn)有方法,RetriGen

能夠捕捉到語義差異,并應(yīng)用相應(yīng)的編輯操作生成正確的斷言。自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成??

Finding:RetriGen在準(zhǔn)確性和CodeBLEU方面顯著超過了所有基線,跨兩個數(shù)據(jù)集的平均準(zhǔn)確性提高了58.81%;RetriGen在所有標(biāo)準(zhǔn)JUnit斷言類型上一貫超過所有基線,例如,在生成Equals類型的斷言上,相比于ED-ITAs,分別提高了20.75%和19.05%;RetriGen在兩個數(shù)據(jù)集上生成了大量獨(dú)特斷言,這些斷言是所有基線均未能生成的。自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成RQ2:不同的組件對RetriGen的整體有效性的影響分析表

不同檢索器選擇下RetriGen的有效性在Dataold數(shù)據(jù)集上,RetriGen的混合檢索器提高了預(yù)測準(zhǔn)確率在準(zhǔn)確率和CodeBLEU指標(biāo)上,RetriGen在兩個數(shù)據(jù)集(Dataold和Datanew)上均優(yōu)于所有變體,顯示出每個組件的重要性。 即使沒有任何檢索器,RetriGen在兩個數(shù)據(jù)集上的預(yù)測準(zhǔn)確率分別為58.71%和48.19%,比基準(zhǔn)ATLAS分別提高了86.86%和122.48%。??

Finding:所有組件(例如,基于Token的和基于Embedding的檢索器)對RetriGen的性能都有積極的貢獻(xiàn),根據(jù)兩個評價指標(biāo)度量,在兩個廣泛采用的數(shù)據(jù)集上創(chuàng)下了新紀(jì)錄。自動斷言生成-②基于混合檢索增強(qiáng)的單元測試斷言生成RQ3:當(dāng)使用其他先進(jìn)的LLMs時,RetriGen的可擴(kuò)展性如何?表

不同LLM作為斷言生成器的有效性??

Finding:RetriGen適用于不同的LLMs,并且可持續(xù)地達(dá)到最先進(jìn)的性能,例如,五種涉及的LLMs在兩個數(shù)據(jù)集上的平均準(zhǔn)確率為54.29%,平均超過最新的EDITAS

10.86%;默認(rèn)的斷言生成器(即CodeT5)是自然且在單元斷言生成場景中相當(dāng)有效的,例如,平均在兩個數(shù)據(jù)集上提高了其他LLMs的準(zhǔn)確率7.81%。自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成1.基于密集連接的斷言檢索器:

設(shè)計基于編碼器的密級檢索器,通過嵌入向量撲捉測試代碼語義信息,從外部代碼庫從檢索相似斷言。2.基于檢索增強(qiáng)的斷言生成器:

利用檢索斷言作為提示引導(dǎo)大模型斷言生成的過程,以解決大模型無法及時更新、缺乏最新知識和幻覺問題,引導(dǎo)生成語法和語義正確測試代碼。3.基于檢索生成協(xié)同優(yōu)化策略:從概率角度將斷言生成概率分解為檢索的邊緣分布和生成的條件概率,從而設(shè)計統(tǒng)一的損失函數(shù)同時優(yōu)化兩個組件。使得檢索器能夠返回最能指導(dǎo)生成過程的斷言,同時生成器根據(jù)對應(yīng)生成結(jié)果反饋來優(yōu)化檢索器。AG-RAG從訓(xùn)練優(yōu)化角度,設(shè)計了一種檢索-生成協(xié)同優(yōu)化的斷言生成框架,分別利用大模型的代碼理解和生成能力設(shè)計斷言檢索器和生成器。該方法解決之前方法檢索和生成組件獨(dú)立訓(xùn)練對代碼語義理解不充分的問題。自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成定義1:深度斷言生成輸入:焦點(diǎn)測試

????!

=

[????",

···

,????#]

:包含單元測試的前綴代碼。輸出:斷言

??!=[??"

···,

??$]

:指定測試期望結(jié)果的語句。目標(biāo):通過學(xué)習(xí)模型參數(shù)??,最大化輸入焦點(diǎn)測試生成正確斷言的條件概率:定義2:檢索增強(qiáng)的深度斷言生成& &輸入增強(qiáng):檢索到的

TAPs(

????%

,??′

):從外部代碼庫中檢索到的與當(dāng)前焦點(diǎn)測試語義相似的歷史測試-斷言對。檢索機(jī)制考慮代碼的語義相似性,而不僅僅是表面詞匯匹配。&增強(qiáng)輸入過程:原始焦點(diǎn)測試

????!

通過與檢索到的

????%

和其斷& &言

??′&

進(jìn)行組合,形成新的輸入序列:

?????!=????!⊕????%

??′

。⊕表示連接操作,將檢索到的相關(guān)信息與原始測試結(jié)合,提供更多上下文。生成目標(biāo):在增強(qiáng)后的輸入上進(jìn)行生成任務(wù),提高斷言的準(zhǔn)確性自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成對每個焦點(diǎn)測試的[CLS]標(biāo)記進(jìn)行L2正則化:在編碼器的最終隱藏層狀態(tài)中為每個測試用例添加了一個特殊的[CLS]標(biāo)記,并用這個標(biāo)記的狀態(tài)作為上下文嵌入。采用BPE分詞器:

將源代碼劃分為多個子詞,基于它們的頻率分布進(jìn)行分割。評估兩個焦點(diǎn)測試的語義相關(guān)性:

計算兩個焦點(diǎn)測試間的余弦相似度(即通過它們的標(biāo)準(zhǔn)化嵌入向量的內(nèi)積)。1.基于密集連接的斷言檢索器:目標(biāo):

從外部代碼庫中檢索相關(guān)的測試斷言模式(TAP)。使用密集檢索器來搜索相關(guān)的TAPs:

檢索器利用一個基于Transformer的編碼器,將每個focal-test編碼為固定大小的密集向量。自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成編碼:

使用CodeT5編碼器對輸入序列進(jìn)行編碼,生成上下文表示。組合輸入(輸入增強(qiáng)):

將檢索到的TAP與原始測試用例組合,形成新的輸入序列。訓(xùn)練:

通過teacher

forcing方法最小化交叉熵?fù)p失,優(yōu)化從檢索增強(qiáng)輸入到斷言生成的過程。解碼:

使用CodeT5解碼器生成斷言序列,通過softmax層指導(dǎo)的斷言生成,最大化斷言生成的條件概率。2.基于檢索增強(qiáng)的斷言生成器:目標(biāo):

根據(jù)檢索到的測試-斷言對(TAP)生成準(zhǔn)確的斷言。自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成概率分布:

使用softmax函數(shù)將語義相關(guān)性轉(zhuǎn)換為概率分布。???:語義相似度??????":檢索到的測試斷言對????#:測試前綴檢索概率計算:

將檢索視為從外部代碼庫中檢索與給定測試用例語義相似的TAP。???

:檢索模型參數(shù)??"

:生成模型參數(shù)C:外部代碼庫訓(xùn)練目標(biāo)近似:

利用前k個檢索到的TAP來近似訓(xùn)練目標(biāo),通過聯(lián)合訓(xùn)練策略優(yōu)化模型性能。使用交叉熵?fù)p失。生成概率分解:

將生成概率分解為檢索概率和檢索增強(qiáng)概率。3.基于檢索生成協(xié)同優(yōu)化策略:目標(biāo):

優(yōu)化檢索器和生成器,使其更好地協(xié)同工作。自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成研究問題:RQ1:

AG-RAG在斷言生成任務(wù)中的表現(xiàn)如何?RQ2:

聯(lián)合訓(xùn)練策略對模型性能有何影響?RQ3:

AG-RAG對不同預(yù)訓(xùn)練語言模型的泛化能力如何?數(shù)據(jù)集:Dataold:

包含9000多個開源項目中的250萬個開發(fā)者編寫的測試方法。Datanew:

是Dataold的擴(kuò)展數(shù)據(jù)集,包含額外的108,660個樣本,以更好地反映真實(shí)數(shù)據(jù)分布。表

Datanew和Dataold數(shù)據(jù)集基線方法:基線方法:!#!$%現(xiàn)有的AG技術(shù)包括:

ATLAS、

????!"

????&!#!$%、

????''、Integration,、EditAS自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成表展示了AG-RAG與基線方法在三種指標(biāo)上的比較結(jié)果??傮w而言,AG-RAG在兩個基準(zhǔn)上的準(zhǔn)確率為56.33%-64.59%,CodeBLEU得分為68.11%-80.86%,BLEU得分為72.86%-84.79%,分別比所有基線高出20.82%-160.06%、5.01%-79.66%和4.98%-92.19%。RQ1:與現(xiàn)有方法的比較表AG-RAG與基線方法對比自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成表AG-RAG與基線在不同類型斷言上的表現(xiàn)??

Finding:AG-RAG在三個指標(biāo)上顯著優(yōu)于所有以前的AG方法,預(yù)測準(zhǔn)確率為56.33%-64.59%,并在兩個數(shù)據(jù)集上生成了1739-2866個獨(dú)特斷言。自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成案例研究:展示了來自Apache

Eagle項目的一個斷言示例,只有AG-RAG能夠正確生成,而所有基線都未能生成。AG-RAG使用IR-.基于詞匯匹配來檢索相似的斷言,即使檢索到的斷言和查詢焦點(diǎn)測試在功能上不完全相似。其他方法的不足:????&!#!$%

!#!$%、????'' 、和EDITAS未能生成正確的斷言,主要是因?yàn)樗鼈冞x用了錯誤的斷言類型(如assertNotNull)并對斷言進(jìn)行了錯誤的修改(如函數(shù)調(diào)用或參數(shù)替換)。自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成案例研究:所有方法包括AG-RAG都檢索到了相同的斷言。檢索到的斷言在詞匯上幾乎正確,但AG-RAG在參數(shù)上進(jìn)行細(xì)化(從“0”修改為“3”)以更精確地反映測試的實(shí)際方法。AG-RAG成功識別出檢索到的焦點(diǎn)測試與輸入焦點(diǎn)測試之間的語義差異,并應(yīng)用了相應(yīng)的編輯操作,從而生成了正確的斷言。其他方法的不足:

現(xiàn)有基線方法直接返回了檢索到的斷言,假設(shè)它已經(jīng)是正確的。自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成表展示了我們默認(rèn)聯(lián)合檢索器與基線?法的?較結(jié)果。總體??,默認(rèn)的聯(lián)合檢索器在所有指標(biāo)和數(shù)據(jù)集上表現(xiàn)最佳。??

Finding:我們的聯(lián)合訓(xùn)練策略在三個指標(biāo)上對AG-RAG的性能有積極貢獻(xiàn),例如,在Dataold數(shù)據(jù)集上,相比于無檢索器和預(yù)訓(xùn)練檢索器,分別提高了22.45%和8.28%的準(zhǔn)確率。RQ2:

聯(lián)合訓(xùn)練策略對模型性能有何影響?表:在AG-RAG中進(jìn)行聯(lián)合訓(xùn)練的影響自動斷言生成-③基于檢索生成協(xié)同增強(qiáng)的單元測試斷言生成??

Finding:AG-RAG對不同的LLM具有通用性,在兩個數(shù)據(jù)集上的平均準(zhǔn)確率分別為58.48%和52.64%,而CodeT5在促進(jìn)斷言檢索和生成方面表現(xiàn)顯著,準(zhǔn)確率分別為64.59%和56.33%。RQ3:

AG-RAG對不同預(yù)訓(xùn)練語言模型的泛化能力如何?表:不同LLMs在AG-RAG中的有效性。PART

04應(yīng)用驗(yàn)證TestART應(yīng)用驗(yàn)證待測工程說明:開源項目包括:Defects4J中的五個常用項目:mons-Lang:1728待測方法Gson:378待測方法mons-Csv:137待測方法mons-Cli:177待測方法jfreechart:5772待測方法總計一共提取了

8192

個待測方法部署模型:Pangu-CoderUTBench包括(華為數(shù)據(jù)集):JavaBasicDemo:82個待測方法,均是較為簡單的方法mall:332個待測方法MicroServiceDemo:36個待測方法UTService:218個待測方法總計668個待測方法TestART應(yīng)用驗(yàn)證-實(shí)驗(yàn)結(jié)果表

TestART應(yīng)用驗(yàn)證待測工程為開源項目時,使用TestART后,覆蓋方法數(shù)、覆蓋語句數(shù)、通過測試的覆蓋率和分支覆蓋率均有顯著提升。例如,覆蓋方法數(shù)從34.6%提升到61.92%,通過測試的覆蓋率從74.72%提升到95.67%。待測工程為為UTBench時,使用TestART同樣顯著提升了所有指標(biāo)。例如,覆蓋方法數(shù)從49.97%提升到65.33%,通過測試的覆蓋率從74.63%提升到95.85%。??

Finding:TestART實(shí)際運(yùn)用于PanguL1.9

(Pangu-Coder)模型進(jìn)行修復(fù)后修復(fù)結(jié)果效果良好。這些結(jié)果表明,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論